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.

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