umami/components/layout/AppLayout.js

39 lines
1.1 KiB
JavaScript
Raw Normal View History

import { Container } from 'react-basics';
2020-07-17 08:03:38 +00:00
import Head from 'next/head';
2023-03-02 07:59:01 +00:00
import { useRouter } from 'next/router';
import NavBar from 'components/layout/NavBar';
2023-03-02 07:59:01 +00:00
import UpdateNotice from 'components/common/UpdateNotice';
2023-01-11 22:47:38 +00:00
import useRequireLogin from 'hooks/useRequireLogin';
2023-02-28 04:03:04 +00:00
import useConfig from 'hooks/useConfig';
2023-04-20 02:33:24 +00:00
import { CURRENT_VERSION } from 'lib/constants';
import styles from './AppLayout.module.css';
2020-07-17 08:03:38 +00:00
2023-04-21 15:00:42 +00:00
export function AppLayout({ title, children }) {
2023-01-31 05:44:07 +00:00
const { user } = useRequireLogin();
2023-02-28 04:03:04 +00:00
const config = useConfig();
2023-03-02 07:59:01 +00:00
const { pathname } = useRouter();
2023-01-31 05:44:07 +00:00
2023-02-28 04:03:04 +00:00
if (!user || !config) {
2023-01-31 05:44:07 +00:00
return null;
}
2021-05-13 06:15:37 +00:00
2023-03-02 07:59:01 +00:00
const allowUpdate = user?.isAdmin && !config?.updatesDisabled && !pathname.includes('/share/');
2020-07-17 08:03:38 +00:00
return (
2023-04-20 02:33:24 +00:00
<div className={styles.layout} data-app-version={CURRENT_VERSION}>
2023-03-02 07:59:01 +00:00
{allowUpdate && <UpdateNotice />}
2021-05-15 08:29:39 +00:00
<Head>
<title>{title ? `${title} | umami` : 'umami'}</title>
2020-07-17 08:03:38 +00:00
</Head>
2023-04-02 03:03:38 +00:00
<nav className={styles.nav}>
<NavBar />
2023-04-02 03:03:38 +00:00
</nav>
<main className={styles.body}>
<Container>{children}</Container>
</main>
</div>
2020-07-17 08:03:38 +00:00
);
}
2023-04-21 15:00:42 +00:00
export default AppLayout;