diff --git a/next.config.js b/next.config.js
index 4a316433..d0336b10 100644
--- a/next.config.js
+++ b/next.config.js
@@ -78,6 +78,11 @@ const redirects = [
destination: '/teams/:id/websites',
permanent: true,
},
+ {
+ source: '/teams/:id/settings',
+ destination: cloudMode ? `${cloudUrl}/teams/:id/settings` : '/teams/:id/settings/team',
+ permanent: true,
+ },
];
if (cloudMode && cloudUrl && disableLogin) {
diff --git a/src/app/(main)/NavBar.tsx b/src/app/(main)/NavBar.tsx
index fdf70ae8..c26e5906 100644
--- a/src/app/(main)/NavBar.tsx
+++ b/src/app/(main)/NavBar.tsx
@@ -8,14 +8,16 @@ import LanguageButton from 'components/input/LanguageButton';
import ProfileButton from 'components/input/ProfileButton';
import TeamsButton from 'components/input/TeamsButton';
import Icons from 'components/icons';
-import { useLogin, useMessages, useNavigation } from 'components/hooks';
+import { useLogin, useMessages, useNavigation, useTeamContext } from 'components/hooks';
import styles from './NavBar.module.css';
export function NavBar() {
const { user } = useLogin();
const { formatMessage, labels } = useMessages();
+ const { pathname } = useNavigation();
+ const { teamId, renderTeamUrl } = useTeamContext();
+
const cloudMode = Boolean(process.env.cloudMode);
- const { pathname, renderTeamUrl, teamId } = useNavigation();
const links = [
{ label: formatMessage(labels.dashboard), url: renderTeamUrl('/dashboard') },
diff --git a/src/app/(main)/console/[[...websiteId]]/page.tsx b/src/app/(main)/console/[[...websiteId]]/page.tsx
index 3c4b8bb8..0c69f4a5 100644
--- a/src/app/(main)/console/[[...websiteId]]/page.tsx
+++ b/src/app/(main)/console/[[...websiteId]]/page.tsx
@@ -16,5 +16,5 @@ export default async function ({ params: { websiteId } }) {
}
export const metadata: Metadata = {
- title: 'Test Console | umami',
+ title: 'Test Console | Umami',
};
diff --git a/src/app/(main)/dashboard/page.tsx b/src/app/(main)/dashboard/page.tsx
index 1853a9f5..50c08f47 100644
--- a/src/app/(main)/dashboard/page.tsx
+++ b/src/app/(main)/dashboard/page.tsx
@@ -6,5 +6,5 @@ export default function () {
}
export const metadata: Metadata = {
- title: 'Dashboard | umami',
+ title: 'Dashboard | Umami',
};
diff --git a/src/app/(main)/reports/ReportsHeader.tsx b/src/app/(main)/reports/ReportsHeader.tsx
index 0f885af7..76e9b343 100644
--- a/src/app/(main)/reports/ReportsHeader.tsx
+++ b/src/app/(main)/reports/ReportsHeader.tsx
@@ -1,12 +1,12 @@
'use client';
import PageHeader from 'components/layout/PageHeader';
import { Icon, Icons, Text } from 'react-basics';
-import { useMessages, useNavigation } from 'components/hooks';
+import { useMessages, useTeamContext } from 'components/hooks';
import LinkButton from 'components/common/LinkButton';
export function ReportsHeader() {
const { formatMessage, labels } = useMessages();
- const { renderTeamUrl } = useNavigation();
+ const { renderTeamUrl } = useTeamContext();
return (
diff --git a/src/app/(main)/reports/ReportsTable.tsx b/src/app/(main)/reports/ReportsTable.tsx
index 09f8b3fc..aae604b6 100644
--- a/src/app/(main)/reports/ReportsTable.tsx
+++ b/src/app/(main)/reports/ReportsTable.tsx
@@ -1,6 +1,6 @@
import { GridColumn, GridTable, Icon, Icons, Text, useBreakpoint } from 'react-basics';
import LinkButton from 'components/common/LinkButton';
-import { useMessages, useLogin, useNavigation } from 'components/hooks';
+import { useMessages, useLogin, useTeamContext } from 'components/hooks';
import { REPORT_TYPES } from 'lib/constants';
import ReportDeleteButton from './ReportDeleteButton';
@@ -8,7 +8,7 @@ export function ReportsTable({ data = [], showDomain }: { data: any[]; showDomai
const { formatMessage, labels } = useMessages();
const { user } = useLogin();
const breakpoint = useBreakpoint();
- const { renderTeamUrl } = useNavigation();
+ const { renderTeamUrl } = useTeamContext();
return (
diff --git a/src/app/(main)/reports/[reportId]/BaseParameters.tsx b/src/app/(main)/reports/[reportId]/BaseParameters.tsx
index 9b6be5d8..113f917d 100644
--- a/src/app/(main)/reports/[reportId]/BaseParameters.tsx
+++ b/src/app/(main)/reports/[reportId]/BaseParameters.tsx
@@ -3,7 +3,7 @@ import { FormRow } from 'react-basics';
import { parseDateRange } from 'lib/date';
import DateFilter from 'components/input/DateFilter';
import WebsiteSelect from 'components/input/WebsiteSelect';
-import { useMessages } from 'components/hooks';
+import { useLogin, useMessages, useTeamContext } from 'components/hooks';
import { ReportContext } from './Report';
export interface BaseParametersProps {
@@ -21,6 +21,8 @@ export function BaseParameters({
}: BaseParametersProps) {
const { report, updateReport } = useContext(ReportContext);
const { formatMessage, labels } = useMessages();
+ const { user } = useLogin();
+ const { teamId } = useTeamContext();
const { parameters } = report || {};
const { websiteId, dateRange } = parameters || {};
@@ -39,7 +41,12 @@ export function BaseParameters({
{showWebsiteSelect && (
{allowWebsiteSelect && (
-
+
)}
)}
diff --git a/src/app/(main)/reports/[reportId]/ReportHeader.tsx b/src/app/(main)/reports/[reportId]/ReportHeader.tsx
index d69cd0cd..303781df 100644
--- a/src/app/(main)/reports/[reportId]/ReportHeader.tsx
+++ b/src/app/(main)/reports/[reportId]/ReportHeader.tsx
@@ -1,7 +1,6 @@
import { useContext } from 'react';
-import { useRouter } from 'next/navigation';
import { Icon, LoadingButton, InlineEditField, useToasts } from 'react-basics';
-import { useMessages, useApi } from 'components/hooks';
+import { useMessages, useApi, useNavigation, useTeamContext } from 'components/hooks';
import { ReportContext } from './Report';
import styles from './ReportHeader.module.css';
import { REPORT_TYPES } from 'lib/constants';
@@ -10,8 +9,10 @@ export function ReportHeader({ icon }) {
const { report, updateReport } = useContext(ReportContext);
const { formatMessage, labels, messages } = useMessages();
const { showToast } = useToasts();
+ const { router } = useNavigation();
+ const { renderTeamUrl } = useTeamContext();
+
const { post, useMutation } = useApi();
- const router = useRouter();
const { mutate: create, isPending: isCreating } = useMutation({
mutationFn: (data: any) => post(`/reports`, data),
});
@@ -28,7 +29,7 @@ export function ReportHeader({ icon }) {
create(report, {
onSuccess: async ({ id }) => {
showToast({ message: formatMessage(messages.saved), variant: 'success' });
- router.push(`/reports/${id}`);
+ router.push(renderTeamUrl(`/reports/${id}`));
},
});
} else {
diff --git a/src/app/(main)/reports/[reportId]/page.tsx b/src/app/(main)/reports/[reportId]/page.tsx
index 1f173d7c..179ee2ff 100644
--- a/src/app/(main)/reports/[reportId]/page.tsx
+++ b/src/app/(main)/reports/[reportId]/page.tsx
@@ -10,5 +10,5 @@ export default function ReportDetailsPage({ params: { reportId } }) {
}
export const metadata: Metadata = {
- title: 'Reports | umami',
+ title: 'Reports | Umami',
};
diff --git a/src/app/(main)/reports/create/ReportTemplates.tsx b/src/app/(main)/reports/create/ReportTemplates.tsx
index 886146b2..5abdb9fb 100644
--- a/src/app/(main)/reports/create/ReportTemplates.tsx
+++ b/src/app/(main)/reports/create/ReportTemplates.tsx
@@ -6,7 +6,7 @@ import Funnel from 'assets/funnel.svg';
import Lightbulb from 'assets/lightbulb.svg';
import Magnet from 'assets/magnet.svg';
import styles from './ReportTemplates.module.css';
-import { useMessages, useNavigation } from 'components/hooks';
+import { useMessages, useTeamContext } from 'components/hooks';
function ReportItem({ title, description, url, icon }) {
const { formatMessage, labels } = useMessages();
@@ -34,7 +34,7 @@ function ReportItem({ title, description, url, icon }) {
export function ReportTemplates({ showHeader = true }: { showHeader?: boolean }) {
const { formatMessage, labels } = useMessages();
- const { renderTeamUrl } = useNavigation();
+ const { renderTeamUrl } = useTeamContext();
const reports = [
{
diff --git a/src/app/(main)/reports/create/page.tsx b/src/app/(main)/reports/create/page.tsx
index a1a761bc..8726f435 100644
--- a/src/app/(main)/reports/create/page.tsx
+++ b/src/app/(main)/reports/create/page.tsx
@@ -6,5 +6,5 @@ export default function ReportsCreatePage() {
}
export const metadata: Metadata = {
- title: 'Create Report | umami',
+ title: 'Create Report | Umami',
};
diff --git a/src/app/(main)/reports/event-data/EventDataReport.tsx b/src/app/(main)/reports/event-data/EventDataReport.tsx
index 2ce17306..fb786b31 100644
--- a/src/app/(main)/reports/event-data/EventDataReport.tsx
+++ b/src/app/(main)/reports/event-data/EventDataReport.tsx
@@ -11,7 +11,7 @@ const defaultParameters = {
parameters: { fields: [], filters: [] },
};
-export default function EventDataReport({ reportId }: { reportId: string }) {
+export default function EventDataReport({ reportId }: { reportId?: string }) {
return (
} />
diff --git a/src/app/(main)/reports/event-data/page.tsx b/src/app/(main)/reports/event-data/page.tsx
new file mode 100644
index 00000000..7ed435ef
--- /dev/null
+++ b/src/app/(main)/reports/event-data/page.tsx
@@ -0,0 +1,10 @@
+import EventDataReport from './EventDataReport';
+import { Metadata } from 'next';
+
+export default function FunnelReportPage() {
+ return ;
+}
+
+export const metadata: Metadata = {
+ title: 'Funnel Report | Umami',
+};
diff --git a/src/app/(main)/reports/funnel/FunnelReport.tsx b/src/app/(main)/reports/funnel/FunnelReport.tsx
index b9b4bd77..4013f073 100644
--- a/src/app/(main)/reports/funnel/FunnelReport.tsx
+++ b/src/app/(main)/reports/funnel/FunnelReport.tsx
@@ -14,7 +14,7 @@ const defaultParameters = {
parameters: { window: 60, urls: [] },
};
-export default function FunnelReport({ reportId }) {
+export default function FunnelReport({ reportId }: { reportId?: string }) {
return (
} />
diff --git a/src/app/(main)/reports/funnel/page.tsx b/src/app/(main)/reports/funnel/page.tsx
index 1ce70c75..7a2f2a5a 100644
--- a/src/app/(main)/reports/funnel/page.tsx
+++ b/src/app/(main)/reports/funnel/page.tsx
@@ -2,9 +2,9 @@ import FunnelReport from './FunnelReport';
import { Metadata } from 'next';
export default function FunnelReportPage() {
- return ;
+ return ;
}
export const metadata: Metadata = {
- title: 'Funnel Report | umami',
+ title: 'Funnel Report | Umami',
};
diff --git a/src/app/(main)/reports/insights/InsightsReport.tsx b/src/app/(main)/reports/insights/InsightsReport.tsx
index 709cdf72..3c199003 100644
--- a/src/app/(main)/reports/insights/InsightsReport.tsx
+++ b/src/app/(main)/reports/insights/InsightsReport.tsx
@@ -13,7 +13,7 @@ const defaultParameters = {
parameters: { fields: [], filters: [] },
};
-export default function InsightsReport({ reportId }: { reportId: string }) {
+export default function InsightsReport({ reportId }: { reportId?: string }) {
return (
} />
diff --git a/src/app/(main)/reports/insights/page.tsx b/src/app/(main)/reports/insights/page.tsx
index 1f4db5c6..e09565c0 100644
--- a/src/app/(main)/reports/insights/page.tsx
+++ b/src/app/(main)/reports/insights/page.tsx
@@ -2,9 +2,9 @@ import InsightsReport from './InsightsReport';
import { Metadata } from 'next';
export default function InsightsReportPage() {
- return ;
+ return ;
}
export const metadata: Metadata = {
- title: 'Insights Report | umami',
+ title: 'Insights Report | Umami',
};
diff --git a/src/app/(main)/reports/page.tsx b/src/app/(main)/reports/page.tsx
index 22e6e2a7..0dc380a9 100644
--- a/src/app/(main)/reports/page.tsx
+++ b/src/app/(main)/reports/page.tsx
@@ -1,14 +1,14 @@
import ReportsHeader from './ReportsHeader';
import ReportsDataTable from './ReportsDataTable';
-export default function () {
+export default function ({ params: { teamId } }: { params: { teamId: string } }) {
return (
<>
-
+
>
);
}
export const metadata = {
- title: 'Reports | umami',
+ title: 'Reports | Umami',
};
diff --git a/src/app/(main)/reports/retention/RetentionReport.tsx b/src/app/(main)/reports/retention/RetentionReport.tsx
index b49975dc..f02e5bb1 100644
--- a/src/app/(main)/reports/retention/RetentionReport.tsx
+++ b/src/app/(main)/reports/retention/RetentionReport.tsx
@@ -19,7 +19,7 @@ const defaultParameters = {
},
};
-export default function RetentionReport({ reportId }: { reportId: string }) {
+export default function RetentionReport({ reportId }: { reportId?: string }) {
return (
} />
diff --git a/src/app/(main)/reports/retention/page.tsx b/src/app/(main)/reports/retention/page.tsx
index 4e316793..41784372 100644
--- a/src/app/(main)/reports/retention/page.tsx
+++ b/src/app/(main)/reports/retention/page.tsx
@@ -2,9 +2,9 @@ import { Metadata } from 'next';
import RetentionReport from './RetentionReport';
export default function RetentionReportPage() {
- return ;
+ return ;
}
export const metadata: Metadata = {
- title: 'Create Report | umami',
+ title: 'Create Report | Umami',
};
diff --git a/src/app/(main)/settings/layout.tsx b/src/app/(main)/settings/layout.tsx
index 2f80a5d0..f8d0d1f0 100644
--- a/src/app/(main)/settings/layout.tsx
+++ b/src/app/(main)/settings/layout.tsx
@@ -1,6 +1,6 @@
'use client';
import { usePathname } from 'next/navigation';
-import { useLogin, useMessages } from 'components/hooks';
+import { useLogin, useMessages, useTeamContext } from 'components/hooks';
import SideNav from 'components/layout/SideNav';
import styles from './layout.module.css';
@@ -9,12 +9,32 @@ export default function SettingsLayout({ children }) {
const pathname = usePathname();
const { formatMessage, labels } = useMessages();
const cloudMode = !!process.env.cloudMode;
+ const { teamId, renderTeamUrl } = useTeamContext();
const items = [
- { key: 'websites', label: formatMessage(labels.websites), url: '/settings/websites' },
- { key: 'teams', label: formatMessage(labels.teams), url: '/settings/teams' },
- user.isAdmin && { key: 'users', label: formatMessage(labels.users), url: '/settings/users' },
- { key: 'profile', label: formatMessage(labels.profile), url: '/settings/profile' },
+ {
+ key: 'team',
+ label: formatMessage(labels.team),
+ url: renderTeamUrl('/settings/team'),
+ },
+ teamId && {
+ key: 'members',
+ label: formatMessage(labels.members),
+ url: renderTeamUrl('/settings/members'),
+ },
+ {
+ key: 'websites',
+ label: formatMessage(labels.websites),
+ url: renderTeamUrl('/settings/websites'),
+ },
+ !teamId && { key: 'teams', label: formatMessage(labels.teams), url: '/settings/teams' },
+ !teamId &&
+ user.isAdmin && {
+ key: 'users',
+ label: formatMessage(labels.users),
+ url: renderTeamUrl('/settings/users'),
+ },
+ !teamId && { key: 'profile', label: formatMessage(labels.profile), url: '/settings/profile' },
].filter(n => n);
const getKey = () => items.find(({ url }) => pathname === url)?.key;
diff --git a/src/app/(main)/settings/profile/page.tsx b/src/app/(main)/settings/profile/page.tsx
index d7a3ad92..f0c1047e 100644
--- a/src/app/(main)/settings/profile/page.tsx
+++ b/src/app/(main)/settings/profile/page.tsx
@@ -12,5 +12,5 @@ export default function () {
}
export const metadata: Metadata = {
- title: 'Profile Settings | umami',
+ title: 'Profile Settings | Umami',
};
diff --git a/src/app/(main)/settings/teams/[teamId]/TeamData.tsx b/src/app/(main)/settings/teams/[teamId]/TeamData.tsx
index 003737f0..facee764 100644
--- a/src/app/(main)/settings/teams/[teamId]/TeamData.tsx
+++ b/src/app/(main)/settings/teams/[teamId]/TeamData.tsx
@@ -1,3 +1,4 @@
+'use client';
import { ActionForm, Button, Modal, ModalTrigger } from 'react-basics';
import { useMessages } from 'components/hooks';
import TeamDeleteForm from '../TeamDeleteForm';
diff --git a/src/app/(main)/settings/teams/[teamId]/TeamEditForm.tsx b/src/app/(main)/settings/teams/[teamId]/TeamEditForm.tsx
index 8af74a26..d1e80f7b 100644
--- a/src/app/(main)/settings/teams/[teamId]/TeamEditForm.tsx
+++ b/src/app/(main)/settings/teams/[teamId]/TeamEditForm.tsx
@@ -1,3 +1,4 @@
+'use client';
import {
SubmitButton,
Form,
diff --git a/src/app/(main)/settings/teams/[teamId]/TeamMemberRemoveButton.tsx b/src/app/(main)/settings/teams/[teamId]/TeamMemberRemoveButton.tsx
index 19f29fd2..581b97a2 100644
--- a/src/app/(main)/settings/teams/[teamId]/TeamMemberRemoveButton.tsx
+++ b/src/app/(main)/settings/teams/[teamId]/TeamMemberRemoveButton.tsx
@@ -1,3 +1,4 @@
+'use client';
import { useApi, useMessages } from 'components/hooks';
import { Icon, Icons, LoadingButton, Text } from 'react-basics';
import { touch } from 'store/cache';
diff --git a/src/app/(main)/settings/teams/[teamId]/TeamMembers.tsx b/src/app/(main)/settings/teams/[teamId]/TeamMembers.tsx
index 75e88e25..c56511f9 100644
--- a/src/app/(main)/settings/teams/[teamId]/TeamMembers.tsx
+++ b/src/app/(main)/settings/teams/[teamId]/TeamMembers.tsx
@@ -1,3 +1,4 @@
+'use client';
import DataTable from 'components/common/DataTable';
import TeamMembersTable from './TeamMembersTable';
import useTeamMembers from 'components/hooks/queries/useTeamMembers';
diff --git a/src/app/(main)/settings/teams/[teamId]/TeamMembersTable.tsx b/src/app/(main)/settings/teams/[teamId]/TeamMembersTable.tsx
index d993bbc0..aceb5894 100644
--- a/src/app/(main)/settings/teams/[teamId]/TeamMembersTable.tsx
+++ b/src/app/(main)/settings/teams/[teamId]/TeamMembersTable.tsx
@@ -1,3 +1,4 @@
+'use client';
import { GridColumn, GridTable, useBreakpoint } from 'react-basics';
import { useMessages, useLogin } from 'components/hooks';
import { ROLES } from 'lib/constants';
diff --git a/src/app/(main)/settings/teams/[teamId]/TeamSettings.tsx b/src/app/(main)/settings/teams/[teamId]/TeamSettings.tsx
index d26ddc95..d3463bbf 100644
--- a/src/app/(main)/settings/teams/[teamId]/TeamSettings.tsx
+++ b/src/app/(main)/settings/teams/[teamId]/TeamSettings.tsx
@@ -1,7 +1,6 @@
'use client';
import { useState } from 'react';
import { Item, Loading, Tabs, Flexbox, Text, Icon } from 'react-basics';
-import TeamsContext from 'app/(main)/teams/TeamsContext';
import PageHeader from 'components/layout/PageHeader';
import { ROLES } from 'lib/constants';
import Icons from 'components/icons';
@@ -27,32 +26,26 @@ export function TeamSettings({ teamId }: { teamId: string }) {
);
return (
-
-
- }>
-
-
-
-
- {formatMessage(labels.view)}
-
-
- setTab(value)}
- style={{ marginBottom: 30 }}
- >
- - {formatMessage(labels.details)}
- - {formatMessage(labels.members)}
- - {formatMessage(labels.websites)}
- - {formatMessage(labels.data)}
-
- {tab === 'details' && }
- {tab === 'members' && }
- {tab === 'websites' && }
- {canEdit && tab === 'data' && }
-
-
+
+ }>
+
+
+
+
+ {formatMessage(labels.view)}
+
+
+ setTab(value)} style={{ marginBottom: 30 }}>
+ - {formatMessage(labels.details)}
+ - {formatMessage(labels.members)}
+ - {formatMessage(labels.websites)}
+ - {formatMessage(labels.data)}
+
+ {tab === 'details' && }
+ {tab === 'members' && }
+ {tab === 'websites' && }
+ {canEdit && tab === 'data' && }
+
);
}
diff --git a/src/app/(main)/settings/teams/[teamId]/TeamWebsiteRemoveButton.tsx b/src/app/(main)/settings/teams/[teamId]/TeamWebsiteRemoveButton.tsx
index 336e151a..843b76d3 100644
--- a/src/app/(main)/settings/teams/[teamId]/TeamWebsiteRemoveButton.tsx
+++ b/src/app/(main)/settings/teams/[teamId]/TeamWebsiteRemoveButton.tsx
@@ -1,3 +1,4 @@
+'use client';
import { useApi, useMessages } from 'components/hooks';
import { Icon, Icons, LoadingButton, Text } from 'react-basics';
diff --git a/src/app/(main)/settings/teams/[teamId]/TeamWebsites.tsx b/src/app/(main)/settings/teams/[teamId]/TeamWebsites.tsx
index 25f459d5..1fce8c23 100644
--- a/src/app/(main)/settings/teams/[teamId]/TeamWebsites.tsx
+++ b/src/app/(main)/settings/teams/[teamId]/TeamWebsites.tsx
@@ -1,3 +1,4 @@
+'use client';
import WebsitesDataTable from 'app/(main)/settings/websites/WebsitesDataTable';
export function TeamWebsites({ teamId, allowEdit }: { teamId: string; allowEdit: boolean }) {
diff --git a/src/app/(main)/settings/teams/[teamId]/TeamWebsitesTable.tsx b/src/app/(main)/settings/teams/[teamId]/TeamWebsitesTable.tsx
index 2fe74b65..fe08c059 100644
--- a/src/app/(main)/settings/teams/[teamId]/TeamWebsitesTable.tsx
+++ b/src/app/(main)/settings/teams/[teamId]/TeamWebsitesTable.tsx
@@ -1,3 +1,4 @@
+'use client';
import Link from 'next/link';
import { Button, GridColumn, GridTable, Icon, Text } from 'react-basics';
import { useMessages } from 'components/hooks';
diff --git a/src/app/(main)/settings/teams/[teamId]/page.tsx b/src/app/(main)/settings/teams/[teamId]/page.tsx
index ad242431..de53549f 100644
--- a/src/app/(main)/settings/teams/[teamId]/page.tsx
+++ b/src/app/(main)/settings/teams/[teamId]/page.tsx
@@ -1,9 +1,5 @@
import TeamSettings from './TeamSettings';
export default function ({ params: { teamId } }) {
- if (process.env.cloudMode) {
- return null;
- }
-
return ;
}
diff --git a/src/app/(main)/settings/teams/page.tsx b/src/app/(main)/settings/teams/page.tsx
index 08e96595..98ce95fb 100644
--- a/src/app/(main)/settings/teams/page.tsx
+++ b/src/app/(main)/settings/teams/page.tsx
@@ -3,10 +3,6 @@ import TeamsDataTable from './TeamsDataTable';
import TeamsHeader from './TeamsHeader';
export default function () {
- if (process.env.cloudMode) {
- return null;
- }
-
return (
<>
diff --git a/src/app/(main)/settings/users/[userId]/page.tsx b/src/app/(main)/settings/users/[userId]/page.tsx
index e8f1793e..2e2e4137 100644
--- a/src/app/(main)/settings/users/[userId]/page.tsx
+++ b/src/app/(main)/settings/users/[userId]/page.tsx
@@ -1,9 +1,5 @@
import UserSettings from './UserSettings';
export default function ({ params: { userId } }) {
- if (process.env.cloudMode) {
- return null;
- }
-
return ;
}
diff --git a/src/app/(main)/settings/users/page.tsx b/src/app/(main)/settings/users/page.tsx
index 06bb5f1e..0be95a0d 100644
--- a/src/app/(main)/settings/users/page.tsx
+++ b/src/app/(main)/settings/users/page.tsx
@@ -11,5 +11,5 @@ export default function () {
);
}
export const metadata: Metadata = {
- title: 'Users | umami',
+ title: 'Users | Umami',
};
diff --git a/src/app/(main)/settings/websites/Websites.tsx b/src/app/(main)/settings/websites/Websites.tsx
index 9f14f4e6..09750656 100644
--- a/src/app/(main)/settings/websites/Websites.tsx
+++ b/src/app/(main)/settings/websites/Websites.tsx
@@ -3,13 +3,13 @@ import { useLogin } from 'components/hooks';
import WebsitesDataTable from './WebsitesDataTable';
import WebsitesHeader from './WebsitesHeader';
-export default function Websites() {
+export default function Websites({ teamId }: { teamId: string }) {
const { user } = useLogin();
return (
<>
-
+
>
);
}
diff --git a/src/app/(main)/settings/websites/WebsitesTable.tsx b/src/app/(main)/settings/websites/WebsitesTable.tsx
index a1f0c475..884221bf 100644
--- a/src/app/(main)/settings/websites/WebsitesTable.tsx
+++ b/src/app/(main)/settings/websites/WebsitesTable.tsx
@@ -1,7 +1,7 @@
import { ReactNode } from 'react';
import Link from 'next/link';
import { Button, Text, Icon, Icons, GridTable, GridColumn, useBreakpoint } from 'react-basics';
-import { useMessages, useLogin, useNavigation } from 'components/hooks';
+import { useMessages, useLogin, useTeamContext } from 'components/hooks';
export interface WebsitesTableProps {
data: any[];
@@ -23,7 +23,7 @@ export function WebsitesTable({
const { formatMessage, labels } = useMessages();
const { user } = useLogin();
const breakpoint = useBreakpoint();
- const { renderTeamUrl } = useNavigation();
+ const { renderTeamUrl } = useTeamContext();
return (
@@ -32,12 +32,12 @@ export function WebsitesTable({
{showActions && (
{row => {
- const { id, userId } = row;
+ const { id } = row;
return (
<>
- {allowEdit && !teamId && user.id === userId && (
-
+ {allowEdit && (teamId || user.isAdmin) && (
+