diff --git a/apps/applicant-tracking/src/app/layout.tsx b/apps/applicant-tracking/src/app/layout.tsx index 5ee9057..a7bdf53 100644 --- a/apps/applicant-tracking/src/app/layout.tsx +++ b/apps/applicant-tracking/src/app/layout.tsx @@ -1,3 +1,6 @@ +import Layout from '@/components/Layout'; +import React from 'react'; + export const metadata = { title: 'Next.js', description: 'Generated by Next.js', @@ -10,7 +13,9 @@ export default function RootLayout({ }) { return ( - {children} + + {children} + ); } diff --git a/apps/applicant-tracking/src/app/page.tsx b/apps/applicant-tracking/src/app/page.tsx index 19b4b6a..f8b5cbb 100644 --- a/apps/applicant-tracking/src/app/page.tsx +++ b/apps/applicant-tracking/src/app/page.tsx @@ -1,3 +1,21 @@ +'use client'; + +import useSnackbar from '@/hooks/useSnackbar'; +import { Button } from '@mui/material'; + export default function DashboardPage() { - return

Dashboard page

; + const { openSnackbar } = useSnackbar(); + return ( + <> +

Dashboard page

+ + + ); } diff --git a/apps/applicant-tracking/src/components/ATSAppBar/index.tsx b/apps/applicant-tracking/src/components/ATSAppBar/index.tsx new file mode 100644 index 0000000..e69de29 diff --git a/apps/applicant-tracking/src/components/Layout/index.tsx b/apps/applicant-tracking/src/components/Layout/index.tsx new file mode 100644 index 0000000..72f70fc --- /dev/null +++ b/apps/applicant-tracking/src/components/Layout/index.tsx @@ -0,0 +1,34 @@ +'use client'; + +import { SnackbarProvider } from '@/hooks/useSnackbar'; +import { Snackbar, Alert, AlertColor } from '@mui/material'; + +interface LayoutProps { + children: React.ReactNode; +} + +export default function Layout({ children }: LayoutProps) { + return ( + ( + + + {message} + + + )} + > + {children} + + ); +} diff --git a/apps/applicant-tracking/src/hooks/useSnackbar/SnackbarContext.tsx b/apps/applicant-tracking/src/hooks/useSnackbar/SnackbarContext.tsx new file mode 100644 index 0000000..d425fae --- /dev/null +++ b/apps/applicant-tracking/src/hooks/useSnackbar/SnackbarContext.tsx @@ -0,0 +1,45 @@ +import React from 'react'; +import { createContext } from 'react'; + +export type SnackbarContextType = { + openSnackbar: (message: string, severity: string) => void; + closeSnackbar: () => void; +}; + +export const SnackbarContext = createContext(null); + +type SnackbarProviderProps = { + snackbar: ( + open: boolean, + onClose: () => void, + message?: string, + severity?: string + ) => React.ReactNode; + children: React.ReactNode; +}; + +const SnackbarProvider = ({ snackbar, children }: SnackbarProviderProps) => { + const [open, setOpen] = React.useState(false); + const [message, setMessage] = React.useState(''); + const [severity, setSeverity] = React.useState(''); + + const onClose = () => setOpen(false); + + return ( + { + setOpen(true); + setMessage(message); + setSeverity(severity); + }, + closeSnackbar: () => setOpen(false), + }} + > + {children} + {snackbar(open, onClose, message, severity)} + + ); +}; + +export default SnackbarProvider; diff --git a/apps/applicant-tracking/src/hooks/useSnackbar/index.ts b/apps/applicant-tracking/src/hooks/useSnackbar/index.ts new file mode 100644 index 0000000..7ba9ee7 --- /dev/null +++ b/apps/applicant-tracking/src/hooks/useSnackbar/index.ts @@ -0,0 +1,16 @@ +'use client'; +import { useContext } from 'react'; +import SnackbarProvider, { + SnackbarContext, + SnackbarContextType, +} from './SnackbarContext'; + +export default function useSnackbar() { + const { openSnackbar, closeSnackbar } = useContext( + SnackbarContext + ) as SnackbarContextType; + + return { openSnackbar, closeSnackbar }; +} + +export { SnackbarProvider };