diff --git a/components/messages.js b/components/messages.js index 166a121b..c6ddae60 100644 --- a/components/messages.js +++ b/components/messages.js @@ -133,6 +133,8 @@ export const labels = defineMessages({ runQuery: { id: 'label.run-query', defaultMessage: 'Run query' }, field: { id: 'label.field', defaultMessage: 'Field' }, fields: { id: 'label.fields', defaultMessage: 'Fields' }, + createReport: { id: 'labels.create-report', defaultMessage: 'Create report' }, + description: { id: 'labels.description', defaultMessage: 'Description' }, }); export const messages = defineMessages({ diff --git a/components/pages/reports/ReportList.js b/components/pages/reports/ReportTemplates.js similarity index 85% rename from components/pages/reports/ReportList.js rename to components/pages/reports/ReportTemplates.js index 6e07c81e..7ed40af7 100644 --- a/components/pages/reports/ReportList.js +++ b/components/pages/reports/ReportTemplates.js @@ -5,7 +5,8 @@ import PageHeader from 'components/layout/PageHeader'; import Funnel from 'assets/funnel.svg'; import Nodes from 'assets/nodes.svg'; import Lightbulb from 'assets/lightbulb.svg'; -import styles from './ReportList.module.css'; +import styles from './ReportTemplates.module.css'; +import { useMessages } from 'hooks'; const reports = [ { @@ -50,10 +51,12 @@ function ReportItem({ title, description, url, icon }) { ); } -export function ReportList() { +export function ReportTemplates() { + const { formatMessage, labels } = useMessages(); + return ( - +
{reports.map(({ title, description, url, icon }) => { return ( @@ -65,4 +68,4 @@ export function ReportList() { ); } -export default ReportList; +export default ReportTemplates; diff --git a/components/pages/reports/ReportList.module.css b/components/pages/reports/ReportTemplates.module.css similarity index 100% rename from components/pages/reports/ReportList.module.css rename to components/pages/reports/ReportTemplates.module.css diff --git a/components/pages/reports/ReportsList.js b/components/pages/reports/ReportsList.js new file mode 100644 index 00000000..255cb546 --- /dev/null +++ b/components/pages/reports/ReportsList.js @@ -0,0 +1,29 @@ +import Page from 'components/layout/Page'; +import PageHeader from 'components/layout/PageHeader'; +import Link from 'next/link'; +import { Button, Icon, Icons, Text } from 'react-basics'; +import { useMessages, useReports } from 'hooks'; +import ReportsTable from './ReportsTable'; + +export function ReportsList() { + const { formatMessage, labels } = useMessages(); + const { reports, error, isLoading } = useReports(); + + return ( + + + + + + + + + ); +} + +export default ReportsList; diff --git a/components/pages/reports/ReportsTable.js b/components/pages/reports/ReportsTable.js new file mode 100644 index 00000000..dfb3a97a --- /dev/null +++ b/components/pages/reports/ReportsTable.js @@ -0,0 +1,37 @@ +import Link from 'next/link'; +import { Button, Text, Icon, Icons } from 'react-basics'; +import SettingsTable from 'components/common/SettingsTable'; +import useMessages from 'hooks/useMessages'; +import useConfig from 'hooks/useConfig'; + +export function ReportsTable({ data = [] }) { + const { formatMessage, labels } = useMessages(); + const { openExternal } = useConfig(); + + const columns = [ + { name: 'name', label: formatMessage(labels.name) }, + { name: 'description', label: formatMessage(labels.description) }, + { name: 'action', label: ' ' }, + ]; + + return ( + + {row => { + const { id } = row; + + return ( + + + + ); + }} + + ); +} + +export default ReportsTable; diff --git a/hooks/index.js b/hooks/index.js index 3f2ba4d7..cca6ca29 100644 --- a/hooks/index.js +++ b/hooks/index.js @@ -10,6 +10,7 @@ export * from './useLocale'; export * from './useMessages'; export * from './usePageQuery'; export * from './useReport'; +export * from './useReports'; export * from './useRequireLogin'; export * from './useShareToken'; export * from './useSticky'; diff --git a/hooks/useReports.js b/hooks/useReports.js new file mode 100644 index 00000000..0b5e60d0 --- /dev/null +++ b/hooks/useReports.js @@ -0,0 +1,10 @@ +import useApi from './useApi'; + +export function useReports() { + const { get, useQuery } = useApi(); + const { data, error, isLoading } = useQuery(['reports'], () => get(`/reports`)); + + return { reports: data, error, isLoading }; +} + +export default useReports; diff --git a/pages/reports/create.js b/pages/reports/create.js new file mode 100644 index 00000000..421b9c0a --- /dev/null +++ b/pages/reports/create.js @@ -0,0 +1,13 @@ +import AppLayout from 'components/layout/AppLayout'; +import ReportTemplates from 'components/pages/reports/ReportTemplates'; +import { useMessages } from 'hooks'; + +export default function ReportsPage() { + const { formatMessage, labels } = useMessages(); + + return ( + + + + ); +} diff --git a/pages/reports/index.js b/pages/reports/index.js index 6da2b943..237f31ee 100644 --- a/pages/reports/index.js +++ b/pages/reports/index.js @@ -1,21 +1,13 @@ -import { useState } from 'react'; -import { Item, Tabs } from 'react-basics'; import AppLayout from 'components/layout/AppLayout'; -import ReportList from 'components/pages/reports/ReportList'; import useMessages from 'hooks/useMessages'; +import ReportsList from 'components/pages/reports/ReportsList'; export default function ReportsPage() { - const [tab, setTab] = useState('create'); const { formatMessage, labels } = useMessages(); return ( - - {formatMessage(labels.reports)} - {formatMessage(labels.save)} - - {tab === 'create' && } - {tab === 'saved' &&

My reports

} +
); }