You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

_app.tsx 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import Head from 'next/head';
  2. import { ThemeProvider } from '@mui/material/styles';
  3. import theme from '../styles/muiTheme';
  4. import {
  5. Hydrate,
  6. QueryClient,
  7. QueryClientProvider,
  8. } from '@tanstack/react-query';
  9. import { Session } from "next-auth";
  10. import { SessionProvider } from 'next-auth/react';
  11. import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
  12. import { appWithTranslation } from 'next-i18next';
  13. import StorageProvider from '../store/cart-context';
  14. import CheckoutProvider from '../store/checkout-context';
  15. import UserProvider from '../store/user-context';
  16. import Layout from '../components/layout/base-layout/Layout';
  17. import '../styles/globals.css'
  18. import type { AppProps } from 'next/app'
  19. import { useState } from 'react';
  20. import type { DehydratedState } from '@tanstack/react-query';
  21. const Providers = ({ components, children }) => (
  22. <>
  23. {components.reduceRight(
  24. (acc, Comp) => (
  25. <Comp>{acc}</Comp>
  26. ),
  27. children
  28. )}
  29. </>
  30. );
  31. function MyApp({ Component, pageProps }: AppProps<{ dehydratedState: DehydratedState, session: Session }>) {
  32. const [queryClient] = useState(() => new QueryClient());
  33. return (
  34. <QueryClientProvider client={queryClient}>
  35. <Hydrate state={pageProps.dehydratedState}>
  36. <SessionProvider session={pageProps.session}>
  37. <ThemeProvider theme={theme}>
  38. <Providers
  39. components={[CheckoutProvider, StorageProvider, UserProvider]}
  40. >
  41. <Layout>
  42. <Head>
  43. <title>Coffee Shop</title>
  44. <meta name="description" content="NextJS template" />
  45. <meta
  46. name="viewport"
  47. content="width=device-width, initial-scale=1"
  48. />
  49. </Head>
  50. <Component {...pageProps} />
  51. </Layout>
  52. </Providers>
  53. </ThemeProvider>
  54. </SessionProvider>
  55. <ReactQueryDevtools initialIsOpen={false}></ReactQueryDevtools>
  56. </Hydrate>
  57. </QueryClientProvider>)
  58. }
  59. export default appWithTranslation<never>(MyApp);