_app.page.tsx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import React, { useEffect } from 'react';
  2. import { isServer } from '@growi/core';
  3. import { appWithTranslation } from 'next-i18next';
  4. import { AppProps } from 'next/app';
  5. import { SWRConfig } from 'swr';
  6. import * as nextI18nConfig from '^/config/next-i18next.config';
  7. import { useI18nextHMR } from '~/services/i18next-hmr';
  8. import {
  9. useAppTitle, useConfidential, useGrowiTheme, useGrowiVersion, useSiteUrl, useCustomizedLogoSrc,
  10. } from '~/stores/context';
  11. import { SWRConfigValue, swrGlobalConfiguration } from '~/utils/swr-utils';
  12. import { CommonProps } from './utils/commons';
  13. import { registerTransformerForObjectId } from './utils/objectid-transformer';
  14. import '~/styles/style-next.scss';
  15. import '~/styles/style-themes.scss';
  16. const isDev = process.env.NODE_ENV === 'development';
  17. const swrConfig: SWRConfigValue = {
  18. ...swrGlobalConfiguration,
  19. // set the request scoped cache provider in server
  20. provider: isServer()
  21. ? cache => new Map(cache)
  22. : undefined,
  23. };
  24. type GrowiAppProps = AppProps & {
  25. pageProps: CommonProps;
  26. };
  27. // register custom serializer
  28. registerTransformerForObjectId();
  29. function GrowiApp({ Component, pageProps }: GrowiAppProps): JSX.Element {
  30. useI18nextHMR(isDev);
  31. useEffect(() => {
  32. import('bootstrap/dist/js/bootstrap');
  33. }, []);
  34. const commonPageProps = pageProps as CommonProps;
  35. // useInterceptorManager(new InterceptorManager());
  36. useAppTitle(commonPageProps.appTitle);
  37. useSiteUrl(commonPageProps.siteUrl);
  38. useConfidential(commonPageProps.confidential);
  39. useGrowiTheme(commonPageProps.theme);
  40. useGrowiVersion(commonPageProps.growiVersion);
  41. useCustomizedLogoSrc(commonPageProps.customizedLogoSrc);
  42. return (
  43. <SWRConfig value={swrConfig}>
  44. <Component {...pageProps} />
  45. </SWRConfig>
  46. );
  47. }
  48. // export default appWithTranslation(GrowiApp);
  49. export default appWithTranslation(GrowiApp, nextI18nConfig);