umami/src/app/(main)/settings/layout.tsx

57 lines
1.7 KiB
TypeScript
Raw Normal View History

2023-09-29 12:29:22 +00:00
'use client';
import { usePathname } from 'next/navigation';
2024-02-03 01:49:17 +00:00
import { useLogin, useMessages, useTeamContext } from 'components/hooks';
2023-10-03 16:45:02 +00:00
import SideNav from 'components/layout/SideNav';
2023-09-29 12:29:22 +00:00
import styles from './layout.module.css';
2023-03-23 18:46:49 +00:00
2023-09-29 12:29:22 +00:00
export default function SettingsLayout({ children }) {
const { user } = useLogin();
2023-09-29 12:29:22 +00:00
const pathname = usePathname();
2023-03-23 18:46:49 +00:00
const { formatMessage, labels } = useMessages();
2023-10-08 05:42:49 +00:00
const cloudMode = !!process.env.cloudMode;
2024-02-03 01:49:17 +00:00
const { teamId, renderTeamUrl } = useTeamContext();
2023-03-23 18:46:49 +00:00
const items = [
2024-02-03 05:06:55 +00:00
teamId && {
2024-02-03 01:49:17 +00:00
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' },
2023-03-23 23:33:10 +00:00
].filter(n => n);
2023-04-12 20:40:19 +00:00
const getKey = () => items.find(({ url }) => pathname === url)?.key;
2023-03-23 18:46:49 +00:00
2023-12-06 09:26:58 +00:00
if (cloudMode && pathname !== '/settings/profile') {
2023-10-08 05:42:49 +00:00
return null;
}
2023-03-23 18:46:49 +00:00
return (
<div className={styles.layout}>
{!cloudMode && (
<div className={styles.menu}>
<SideNav items={items} shallow={true} selectedKey={getKey()} />
</div>
)}
<div className={styles.content}>{children}</div>
</div>
2023-03-23 18:46:49 +00:00
);
}