umami/src/components/layout/Page.tsx

33 lines
742 B
TypeScript
Raw Normal View History

2023-10-01 23:11:12 +00:00
'use client';
2023-09-29 12:29:22 +00:00
import { ReactNode } from 'react';
2020-09-27 07:51:29 +00:00
import classNames from 'classnames';
import { Banner, Loading } from 'react-basics';
import useMessages from 'components/hooks/useMessages';
2023-03-22 04:28:36 +00:00
import styles from './Page.module.css';
2023-09-29 12:29:22 +00:00
export function Page({
className,
error,
isLoading,
children,
}: {
className?: string;
error?: unknown;
isLoading?: boolean;
children?: ReactNode;
}) {
2023-04-01 22:44:30 +00:00
const { formatMessage, messages } = useMessages();
if (error) {
2023-04-01 22:44:30 +00:00
return <Banner variant="error">{formatMessage(messages.error)}</Banner>;
}
2023-09-29 12:29:22 +00:00
if (isLoading) {
2023-01-10 07:59:26 +00:00
return <Loading icon="spinner" size="xl" position="page" />;
}
2020-08-06 02:04:02 +00:00
2022-08-23 07:51:37 +00:00
return <div className={classNames(styles.page, className)}>{children}</div>;
2020-08-06 02:04:02 +00:00
}
2023-04-21 15:00:42 +00:00
export default Page;