diff --git a/components/layout/NavBar.js b/components/layout/NavBar.js
index 97eaa46c..e896b404 100644
--- a/components/layout/NavBar.js
+++ b/components/layout/NavBar.js
@@ -18,6 +18,8 @@ export function NavBar() {
const links = [
{ label: formatMessage(labels.dashboard), url: '/dashboard' },
+ { label: formatMessage(labels.websites), url: '/websites' },
+ { label: formatMessage(labels.reports), url: '/reports' },
!cloudMode && { label: formatMessage(labels.settings), url: '/settings' },
].filter(n => n);
diff --git a/components/messages.js b/components/messages.js
index 6b4cbb51..afd8d848 100644
--- a/components/messages.js
+++ b/components/messages.js
@@ -21,6 +21,8 @@ export const labels = defineMessages({
details: { id: 'label.details', defaultMessage: 'Details' },
website: { id: 'label.website', defaultMessage: 'Website' },
websites: { id: 'label.websites', defaultMessage: 'Websites' },
+ myWebsites: { id: 'label.my-websites', defaultMessage: 'My Websites' },
+ teamWebsites: { id: 'label.team-websites', defaultMessage: 'Team Websites' },
created: { id: 'label.created', defaultMessage: 'Created' },
edit: { id: 'label.edit', defaultMessage: 'Edit' },
name: { id: 'label.name', defaultMessage: 'Name' },
@@ -28,6 +30,7 @@ export const labels = defineMessages({
accessCode: { id: 'label.access-code', defaultMessage: 'Access code' },
teamId: { id: 'label.team-id', defaultMessage: 'Team ID' },
team: { id: 'label.team', defaultMessage: 'Team' },
+ teamName: { id: 'label.team-name', defaultMessage: 'Team Name' },
regenerate: { id: 'label.regenerate', defaultMessage: 'Regenerate' },
remove: { id: 'label.remove', defaultMessage: 'Remove' },
join: { id: 'label.join', defaultMessage: 'Join' },
@@ -242,16 +245,12 @@ export const messages = defineMessages({
},
noResultsFound: {
id: 'message.no-results-found',
- defaultMessage: 'No results were found.',
+ defaultMessage: 'No results found.',
},
noWebsitesConfigured: {
id: 'message.no-websites-configured',
defaultMessage: 'You do not have any websites configured.',
},
- noReportsConfigured: {
- id: 'message.no-reports-configured',
- defaultMessage: 'You do not have any reports configured.',
- },
noTeamWebsites: {
id: 'message.no-team-websites',
defaultMessage: 'This team does not have any websites.',
diff --git a/components/pages/reports/ReportsPage.js b/components/pages/reports/ReportsPage.js
index 470e1b08..8fc56917 100644
--- a/components/pages/reports/ReportsPage.js
+++ b/components/pages/reports/ReportsPage.js
@@ -1,13 +1,29 @@
+import EmptyPlaceholder from 'components/common/EmptyPlaceholder';
import Page from 'components/layout/Page';
import PageHeader from 'components/layout/PageHeader';
+import { useMessages, useReports } from 'hooks';
import Link from 'next/link';
import { Button, Icon, Icons, Text } from 'react-basics';
-import { useMessages, useReports } from 'hooks';
import ReportsTable from './ReportsTable';
export function ReportsPage() {
- const { formatMessage, labels } = useMessages();
- const { reports, error, isLoading } = useReports();
+ const { formatMessage, labels, messages } = useMessages();
+ const {
+ reports,
+ error,
+ isLoading,
+ deleteReport,
+ filter,
+ handleFilterChange,
+ handlePageChange,
+ handlePageSizeChange,
+ } = useReports();
+
+ const hasData = (reports && reports?.data.length !== 0) || filter;
+
+ const handleDelete = async id => {
+ await deleteReport(id);
+ };
return (
@@ -21,7 +37,23 @@ export function ReportsPage() {
-
+
+ {hasData && (
+
+ )}
+ {!hasData && (
+
+ )}
);
}
diff --git a/components/pages/reports/ReportsTable.js b/components/pages/reports/ReportsTable.js
index 529f5359..98f5267a 100644
--- a/components/pages/reports/ReportsTable.js
+++ b/components/pages/reports/ReportsTable.js
@@ -1,9 +1,10 @@
-import { useState } from 'react';
-import { Flexbox, Icon, Icons, Text, Button, Modal } from 'react-basics';
+import ConfirmDeleteForm from 'components/common/ConfirmDeleteForm';
import LinkButton from 'components/common/LinkButton';
import SettingsTable from 'components/common/SettingsTable';
-import ConfirmDeleteForm from 'components/common/ConfirmDeleteForm';
import { useMessages } from 'hooks';
+import useUser from 'hooks/useUser';
+import { useState } from 'react';
+import { Button, Flexbox, Icon, Icons, Modal, Text } from 'react-basics';
export function ReportsTable({
data = [],
@@ -12,14 +13,24 @@ export function ReportsTable({
onFilterChange,
onPageChange,
onPageSizeChange,
+ showDomain,
}) {
const [report, setReport] = useState(null);
const { formatMessage, labels } = useMessages();
+ const { user } = useUser();
+
+ const domainColumn = [
+ {
+ name: 'domain',
+ label: formatMessage(labels.domain),
+ },
+ ];
const columns = [
{ name: 'name', label: formatMessage(labels.name) },
{ name: 'description', label: formatMessage(labels.description) },
{ name: 'type', label: formatMessage(labels.type) },
+ ...(showDomain ? domainColumn : []),
{ name: 'action', label: ' ' },
];
@@ -40,11 +51,15 @@ export function ReportsTable({
filterValue={filterValue}
>
{row => {
- const { id } = row;
+ const { id, userId: reportOwnerId, website } = row;
+ if (showDomain) {
+ row.domain = website.domain;
+ }
return (
{formatMessage(labels.view)}
+ {!showDomain || user.id === reportOwnerId || user.id === website?.userId}