import React, { ReactElement, ReactNode, useEffect } from "react"; import "@/styles/globals.css"; import "bootstrap-icons/font/bootstrap-icons.css"; import { SessionProvider } from "next-auth/react"; import type { AppProps } from "next/app"; import Head from "next/head"; import AuthRedirect from "@/layouts/AuthRedirect"; import toast from "react-hot-toast"; import { Toaster, ToastBar } from "react-hot-toast"; import { Session } from "next-auth"; import { isPWA } from "@/lib/utils"; // import useInitialData from "@/hooks/useInitialData"; import { appWithTranslation } from "next-i18next"; import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { NextPage } from "next"; const queryClient = new QueryClient({ defaultOptions: { queries: { staleTime: 1000 * 30, }, }, }); export type NextPageWithLayout

= NextPage & { getLayout?: (page: ReactElement) => ReactNode; }; type PageProps = { session?: Session | null }; type AppPropsWithLayout = AppProps & { Component: NextPageWithLayout; }; function App({ Component, pageProps }: AppPropsWithLayout) { const getLayout = Component.getLayout ?? ((page) => page); useEffect(() => { if (isPWA()) { const meta = document.createElement("meta"); meta.name = "viewport"; meta.content = "width=device-width, initial-scale=1, maximum-scale=1"; document.getElementsByTagName("head")[0].appendChild(meta); } }, []); return ( Linkwarden {/* */} {(t) => ( {({ icon, message }) => (

{icon} {message} {t.type !== "loading" && (
toast.dismiss(t.id)} >
)}
)} )} {getLayout()} {/* */} ); } export default appWithTranslation(App);