diff options
Diffstat (limited to 'pages/_app.js')
| -rw-r--r-- | pages/_app.js | 110 |
1 files changed, 77 insertions, 33 deletions
diff --git a/pages/_app.js b/pages/_app.js index 5303b71..68b4acd 100644 --- a/pages/_app.js +++ b/pages/_app.js @@ -6,9 +6,13 @@ import "../styles/globals.css"; import "react-toastify/dist/ReactToastify.css"; import "react-loading-skeleton/dist/skeleton.css"; import { SkeletonTheme } from "react-loading-skeleton"; -import SearchPalette from "../components/searchPalette"; -import { SearchProvider } from "../lib/hooks/isOpenState"; +import SearchPalette from "@/components/searchPalette"; +import { SearchProvider } from "@/lib/hooks/isOpenState"; import Head from "next/head"; +import { WatchPageProvider } from "@/lib/hooks/watchPageProvider"; +import { ToastContainer, toast } from "react-toastify"; +import { useEffect } from "react"; +import { unixTimestampToRelativeTime } from "@/utils/getTimes"; export default function App({ Component, @@ -16,6 +20,42 @@ export default function App({ }) { const router = useRouter(); + useEffect(() => { + async function getBroadcast() { + try { + const res = await fetch("/api/v2/admin/broadcast", { + method: "GET", + headers: { + "Content-Type": "application/json", + "X-Broadcast-Key": "get-broadcast", + }, + }); + const data = await res.json(); + if ( + data && + data?.message !== "No broadcast" && + data?.message !== "unauthorized" + ) { + toast(data.message + unixTimestampToRelativeTime(data.startAt), { + position: "top-center", + autoClose: false, + closeOnClick: true, + draggable: true, + theme: "colored", + className: "toaster", + style: { + background: "#232329", + color: "#fff", + }, + }); + } + } catch (err) { + console.log(err); + } + } + getBroadcast(); + }, []); + return ( <> <Head> @@ -26,37 +66,41 @@ export default function App({ </Head> <SessionProvider session={session}> <SearchProvider> - <AnimatePresence mode="wait"> - <SkeletonTheme baseColor="#232329" highlightColor="#2a2a32"> - <m.div - key={`route-${router.route}`} - transition={{ duration: 0.5 }} - initial="initialState" - animate="animateState" - exit="exitState" - variants={{ - initialState: { - opacity: 0, - }, - animateState: { - opacity: 1, - }, - exitState: {}, - }} - className="z-50 w-screen" - > - <NextNProgress - color="#FF7E2C" - startPosition={0.3} - stopDelayMs={200} - height={3} - showOnShallow={true} - /> - <SearchPalette /> - <Component {...pageProps} /> - </m.div> - </SkeletonTheme> - </AnimatePresence> + <WatchPageProvider> + <AnimatePresence mode="wait"> + <SkeletonTheme baseColor="#232329" highlightColor="#2a2a32"> + <ToastContainer pauseOnFocusLoss={false} pauseOnHover={false} /> + <m.div + key={`route-${router.route}`} + transition={{ duration: 0.5 }} + initial="initialState" + animate="animateState" + exit="exitState" + variants={{ + initialState: { + opacity: 0, + }, + animateState: { + opacity: 1, + }, + exitState: {}, + }} + className="z-50 w-screen" + > + <NextNProgress + color="#FF7E2C" + startPosition={0.3} + stopDelayMs={200} + height={3} + showOnShallow={true} + /> + + <SearchPalette /> + <Component {...pageProps} /> + </m.div> + </SkeletonTheme> + </AnimatePresence> + </WatchPageProvider> </SearchProvider> </SessionProvider> </> |