您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

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