Yuki Takei 7 months ago
parent
commit
75ea3a953e

+ 2 - 2
apps/app/src/client/components/SearchPage.tsx

@@ -7,7 +7,7 @@ import { useTranslation } from 'next-i18next';
 import type { ISelectableAll, ISelectableAndIndeterminatable } from '~/client/interfaces/selectable-all';
 import type { ISelectableAll, ISelectableAndIndeterminatable } from '~/client/interfaces/selectable-all';
 import { useKeywordManager } from '~/client/services/search-operation';
 import { useKeywordManager } from '~/client/services/search-operation';
 import type { IFormattedSearchResult } from '~/interfaces/search';
 import type { IFormattedSearchResult } from '~/interfaces/search';
-import { useShowPageLimitationL } from '~/stores-universal/context';
+import { useShowPageLimitationL } from '~/states/server-configurations';
 import { type ISearchConditions, type ISearchConfigurations, useSWRxSearch } from '~/stores/search';
 import { type ISearchConditions, type ISearchConfigurations, useSWRxSearch } from '~/stores/search';
 
 
 import { NotAvailableForGuest } from './NotAvailableForGuest';
 import { NotAvailableForGuest } from './NotAvailableForGuest';
@@ -84,7 +84,7 @@ SearchResultListHead.displayName = 'SearchResultListHead';
 
 
 export const SearchPage = (): JSX.Element => {
 export const SearchPage = (): JSX.Element => {
   const { t } = useTranslation();
   const { t } = useTranslation();
-  const { data: showPageLimitationL } = useShowPageLimitationL();
+  const [showPageLimitationL] = useShowPageLimitationL();
 
 
   const { data: keyword, pushState } = useKeywordManager();
   const { data: keyword, pushState } = useKeywordManager();
 
 

+ 9 - 70
apps/app/src/pages/_private-legacy-pages/index.page.tsx

@@ -1,35 +1,28 @@
 import { useEffect } from 'react';
 import { useEffect } from 'react';
 
 
-import { isPermalink, isUserPage, isUsersTopPage } from '@growi/core/dist/utils/page-path-utils';
-import type {
-  NextPage, GetServerSideProps, GetServerSidePropsContext,
-} from 'next';
+import type { NextPage } from 'next';
 import { useTranslation } from 'next-i18next';
 import { useTranslation } from 'next-i18next';
 import dynamic from 'next/dynamic';
 import dynamic from 'next/dynamic';
 import Head from 'next/head';
 import Head from 'next/head';
 import { useRouter } from 'next/router';
 import { useRouter } from 'next/router';
 
 
 import { DrawioViewerScript } from '~/components/Script/DrawioViewerScript';
 import { DrawioViewerScript } from '~/components/Script/DrawioViewerScript';
-import type { CrowiRequest } from '~/interfaces/crowi-request';
 import { useIsSearchPage } from '~/states/context';
 import { useIsSearchPage } from '~/states/context';
-import { useHydrateSidebarAtoms } from '~/states/ui/sidebar/hydrate';
 
 
+import { getServerSideSearchPageProps } from '../_search/get-server-side-props';
 import type { ServerConfigurationProps } from '../_search/types';
 import type { ServerConfigurationProps } from '../_search/types';
 import { useHydrateServerConfigurationAtoms } from '../_search/use-hydrate-server-configurations';
 import { useHydrateServerConfigurationAtoms } from '../_search/use-hydrate-server-configurations';
-import type { CommonEachProps, CommonInitialProps, UserUISettingsProps } from '../common-props';
-import {
-  getServerSideCommonEachProps, getServerSideCommonInitialProps, getServerSideI18nProps, getServerSideUserUISettingsProps,
-} from '../common-props';
-import type { RendererConfigProps, SidebarConfigProps } from '../general-page';
-import { getServerSideRendererConfigProps, getServerSideSidebarConfigProps } from '../general-page';
+import type { BasicLayoutConfigurationProps } from '../basic-layout-page';
+import { useHydrateBasicLayoutConfigurationAtoms } from '../basic-layout-page/hydrate';
+import type { CommonEachProps, CommonInitialProps } from '../common-props';
+import type { RendererConfigProps } from '../general-page';
 import { useCustomTitle } from '../utils/page-title-customization';
 import { useCustomTitle } from '../utils/page-title-customization';
-import { mergeGetServerSidePropsResults } from '../utils/server-side-props';
 
 
 
 
 const SearchResultLayout = dynamic(() => import('~/components/Layout/SearchResultLayout'), { ssr: false });
 const SearchResultLayout = dynamic(() => import('~/components/Layout/SearchResultLayout'), { ssr: false });
 
 
 
 
-type Props = CommonInitialProps & CommonEachProps & ServerConfigurationProps & RendererConfigProps & UserUISettingsProps & SidebarConfigProps;
+type Props = CommonInitialProps & CommonEachProps & BasicLayoutConfigurationProps & ServerConfigurationProps & RendererConfigProps;
 
 
 const PrivateLegacyPage: NextPage<Props> = (props: Props) => {
 const PrivateLegacyPage: NextPage<Props> = (props: Props) => {
   const router = useRouter();
   const router = useRouter();
@@ -43,8 +36,8 @@ const PrivateLegacyPage: NextPage<Props> = (props: Props) => {
   // useCurrentPathname('/_private-legacy-pages');
   // useCurrentPathname('/_private-legacy-pages');
 
 
   // Hydrate server-side data
   // Hydrate server-side data
+  useHydrateBasicLayoutConfigurationAtoms(props.searchConfig, props.sidebarConfig, props.userUISettings);
   useHydrateServerConfigurationAtoms(props.serverConfig, props.rendererConfig);
   useHydrateServerConfigurationAtoms(props.serverConfig, props.rendererConfig);
-  useHydrateSidebarAtoms(props.sidebarConfig, props.userUISettings);
 
 
   const [, setIsSearchPage] = useIsSearchPage();
   const [, setIsSearchPage] = useIsSearchPage();
 
 
@@ -78,60 +71,6 @@ const PrivateLegacyPage: NextPage<Props> = (props: Props) => {
   );
   );
 };
 };
 
 
-const getServerSideConfigurationProps: GetServerSideProps<ServerConfigurationProps> = async(context: GetServerSidePropsContext) => {
-  const req: CrowiRequest = context.req as CrowiRequest;
-  const { crowi } = req;
-  const {
-    configManager, searchService,
-  } = crowi;
-
-  return {
-    props: {
-      serverConfig: {
-        isSearchServiceConfigured: searchService.isConfigured,
-        isSearchServiceReachable: searchService.isReachable,
-        isSearchScopeChildrenAsDefault: configManager.getConfig('customize:isSearchScopeChildrenAsDefault'),
-        isContainerFluid: configManager.getConfig('customize:isContainerFluid'),
-      },
-    },
-  };
-};
-
-export const getServerSideProps: GetServerSideProps = async(context: GetServerSidePropsContext) => {
-  const req: CrowiRequest = context.req as CrowiRequest;
-
-  // redirect to the page the user was on before moving to the Login Page
-  if (req.headers.referer != null) {
-    const urlBeforeLogin = new URL(req.headers.referer);
-    if (isPermalink(urlBeforeLogin.pathname) || isUserPage(urlBeforeLogin.pathname) || isUsersTopPage(urlBeforeLogin.pathname)) {
-      req.session.redirectTo = urlBeforeLogin.href;
-    }
-  }
-
-  const [
-    commonInitialResult,
-    commonEachResult,
-    userUIResult,
-    rendererConfigResult,
-    sidebarConfigResult,
-    serverConfigResult,
-    i18nPropsResult,
-  ] = await Promise.all([
-    getServerSideCommonInitialProps(context),
-    getServerSideCommonEachProps(context),
-    getServerSideUserUISettingsProps(context),
-    getServerSideRendererConfigProps(context),
-    getServerSideSidebarConfigProps(context),
-    getServerSideConfigurationProps(context),
-    getServerSideI18nProps(context, ['translation']),
-  ]);
-
-  return mergeGetServerSidePropsResults(commonInitialResult,
-    mergeGetServerSidePropsResults(commonEachResult,
-      mergeGetServerSidePropsResults(userUIResult,
-        mergeGetServerSidePropsResults(rendererConfigResult,
-          mergeGetServerSidePropsResults(sidebarConfigResult,
-            mergeGetServerSidePropsResults(serverConfigResult, i18nPropsResult))))));
-};
+export const getServerSideProps = getServerSideSearchPageProps;
 
 
 export default PrivateLegacyPage;
 export default PrivateLegacyPage;

+ 61 - 0
apps/app/src/pages/_search/get-server-side-props/index.ts

@@ -0,0 +1,61 @@
+import { isPermalink, isUserPage, isUsersTopPage } from '@growi/core/dist/utils/page-path-utils';
+import type { GetServerSideProps, GetServerSidePropsContext } from 'next';
+
+import type { CrowiRequest } from '~/interfaces/crowi-request';
+
+import { getServerSideBasicLayoutProps } from '../../basic-layout-page';
+import {
+  getServerSideCommonEachProps, getServerSideCommonInitialProps, getServerSideI18nProps,
+} from '../../common-props';
+import { getServerSideRendererConfigProps } from '../../general-page';
+import { mergeGetServerSidePropsResults } from '../../utils/server-side-props';
+import type { ServerConfigurationProps } from '../types';
+
+const getServerSideConfigurationProps: GetServerSideProps<ServerConfigurationProps> = async(context: GetServerSidePropsContext) => {
+  const req: CrowiRequest = context.req as CrowiRequest;
+  const { crowi } = req;
+  const { configManager } = crowi;
+
+  return {
+    props: {
+      serverConfig: {
+        isContainerFluid: configManager.getConfig('customize:isContainerFluid'),
+        showPageLimitationL: configManager.getConfig('customize:showPageLimitationL'),
+      },
+    },
+  };
+};
+
+export const getServerSideSearchPageProps: GetServerSideProps = async(context: GetServerSidePropsContext) => {
+  const req: CrowiRequest = context.req as CrowiRequest;
+
+  // redirect to the page the user was on before moving to the Login Page
+  if (req.headers.referer != null) {
+    const urlBeforeLogin = new URL(req.headers.referer);
+    if (isPermalink(urlBeforeLogin.pathname) || isUserPage(urlBeforeLogin.pathname) || isUsersTopPage(urlBeforeLogin.pathname)) {
+      req.session.redirectTo = urlBeforeLogin.href;
+    }
+  }
+
+  const [
+    commonInitialResult,
+    commonEachResult,
+    basicLayoutResult,
+    rendererConfigResult,
+    serverConfigResult,
+    i18nPropsResult,
+  ] = await Promise.all([
+    getServerSideCommonInitialProps(context),
+    getServerSideCommonEachProps(context),
+    getServerSideBasicLayoutProps(context),
+    getServerSideRendererConfigProps(context),
+    getServerSideConfigurationProps(context),
+    getServerSideI18nProps(context, ['translation']),
+  ]);
+
+  return mergeGetServerSidePropsResults(commonInitialResult,
+    mergeGetServerSidePropsResults(commonEachResult,
+      mergeGetServerSidePropsResults(basicLayoutResult,
+        mergeGetServerSidePropsResults(rendererConfigResult,
+          mergeGetServerSidePropsResults(serverConfigResult, i18nPropsResult)))));
+};

+ 9 - 68
apps/app/src/pages/_search/index.page.tsx

@@ -1,34 +1,29 @@
 import { useEffect } from 'react';
 import { useEffect } from 'react';
 
 
-import { isPermalink, isUserPage, isUsersTopPage } from '@growi/core/dist/utils/page-path-utils';
-import type { GetServerSideProps, GetServerSidePropsContext } from 'next';
 import { useTranslation } from 'next-i18next';
 import { useTranslation } from 'next-i18next';
 import dynamic from 'next/dynamic';
 import dynamic from 'next/dynamic';
 import Head from 'next/head';
 import Head from 'next/head';
 import { useRouter } from 'next/router';
 import { useRouter } from 'next/router';
 
 
 import { DrawioViewerScript } from '~/components/Script/DrawioViewerScript';
 import { DrawioViewerScript } from '~/components/Script/DrawioViewerScript';
-import type { CrowiRequest } from '~/interfaces/crowi-request';
 import { useIsSearchPage } from '~/states/context';
 import { useIsSearchPage } from '~/states/context';
-import { useHydrateSidebarAtoms } from '~/states/ui/sidebar/hydrate';
 
 
 import type { NextPageWithLayout } from '../_app.page';
 import type { NextPageWithLayout } from '../_app.page';
-import type { CommonEachProps, CommonInitialProps, UserUISettingsProps } from '../common-props';
-import {
-  getServerSideCommonEachProps, getServerSideCommonInitialProps, getServerSideI18nProps, getServerSideUserUISettingsProps,
-} from '../common-props';
-import type { RendererConfigProps, SidebarConfigProps } from '../general-page';
-import { getServerSideRendererConfigProps, getServerSideSidebarConfigProps } from '../general-page';
+import type { BasicLayoutConfigurationProps } from '../basic-layout-page';
+import { useHydrateBasicLayoutConfigurationAtoms } from '../basic-layout-page/hydrate';
+import type { CommonEachProps, CommonInitialProps } from '../common-props';
+import type { RendererConfigProps } from '../general-page';
 import { useCustomTitle } from '../utils/page-title-customization';
 import { useCustomTitle } from '../utils/page-title-customization';
-import { mergeGetServerSidePropsResults } from '../utils/server-side-props';
 
 
+import { getServerSideSearchPageProps } from './get-server-side-props';
 import type { ServerConfigurationProps } from './types';
 import type { ServerConfigurationProps } from './types';
 import { useHydrateServerConfigurationAtoms } from './use-hydrate-server-configurations';
 import { useHydrateServerConfigurationAtoms } from './use-hydrate-server-configurations';
 
 
+
 const SearchResultLayout = dynamic(() => import('~/components/Layout/SearchResultLayout'), { ssr: false });
 const SearchResultLayout = dynamic(() => import('~/components/Layout/SearchResultLayout'), { ssr: false });
 const SearchPage = dynamic(() => import('~/client/components/SearchPage').then(mod => mod.SearchPage), { ssr: false });
 const SearchPage = dynamic(() => import('~/client/components/SearchPage').then(mod => mod.SearchPage), { ssr: false });
 
 
-type Props = CommonInitialProps & CommonEachProps & ServerConfigurationProps & RendererConfigProps & UserUISettingsProps & SidebarConfigProps;
+type Props = CommonInitialProps & CommonEachProps & BasicLayoutConfigurationProps & ServerConfigurationProps & RendererConfigProps;
 
 
 const SearchResultPage: NextPageWithLayout<Props> = (props: Props) => {
 const SearchResultPage: NextPageWithLayout<Props> = (props: Props) => {
   const router = useRouter();
   const router = useRouter();
@@ -42,8 +37,8 @@ const SearchResultPage: NextPageWithLayout<Props> = (props: Props) => {
   // const [, setSearchPage] = useIsSearchPage();
   // const [, setSearchPage] = useIsSearchPage();
 
 
   // Hydrate server-side data
   // Hydrate server-side data
+  useHydrateBasicLayoutConfigurationAtoms(props.searchConfig, props.sidebarConfig, props.userUISettings);
   useHydrateServerConfigurationAtoms(props.serverConfig, props.rendererConfig);
   useHydrateServerConfigurationAtoms(props.serverConfig, props.rendererConfig);
-  useHydrateSidebarAtoms(props.sidebarConfig, props.userUISettings);
 
 
   const [, setIsSearchPage] = useIsSearchPage();
   const [, setIsSearchPage] = useIsSearchPage();
 
 
@@ -75,60 +70,6 @@ const SearchResultPage: NextPageWithLayout<Props> = (props: Props) => {
   );
   );
 };
 };
 
 
-const getServerSideConfigurationProps: GetServerSideProps<ServerConfigurationProps> = async(context: GetServerSidePropsContext) => {
-  const req: CrowiRequest = context.req as CrowiRequest;
-  const { crowi } = req;
-  const {
-    configManager, searchService,
-  } = crowi;
-
-  return {
-    props: {
-      serverConfig: {
-        isSearchServiceConfigured: searchService.isConfigured,
-        isSearchServiceReachable: searchService.isReachable,
-        isSearchScopeChildrenAsDefault: configManager.getConfig('customize:isSearchScopeChildrenAsDefault'),
-        isContainerFluid: configManager.getConfig('customize:isContainerFluid'),
-      },
-    },
-  };
-};
-
-export const getServerSideProps: GetServerSideProps = async(context: GetServerSidePropsContext) => {
-  const req: CrowiRequest = context.req as CrowiRequest;
-
-  // redirect to the page the user was on before moving to the Login Page
-  if (req.headers.referer != null) {
-    const urlBeforeLogin = new URL(req.headers.referer);
-    if (isPermalink(urlBeforeLogin.pathname) || isUserPage(urlBeforeLogin.pathname) || isUsersTopPage(urlBeforeLogin.pathname)) {
-      req.session.redirectTo = urlBeforeLogin.href;
-    }
-  }
-
-  const [
-    commonInitialResult,
-    commonEachResult,
-    userUIResult,
-    rendererConfigResult,
-    sidebarConfigResult,
-    serverConfigResult,
-    i18nPropsResult,
-  ] = await Promise.all([
-    getServerSideCommonInitialProps(context),
-    getServerSideCommonEachProps(context),
-    getServerSideUserUISettingsProps(context),
-    getServerSideRendererConfigProps(context),
-    getServerSideSidebarConfigProps(context),
-    getServerSideConfigurationProps(context),
-    getServerSideI18nProps(context, ['translation']),
-  ]);
-
-  return mergeGetServerSidePropsResults(commonInitialResult,
-    mergeGetServerSidePropsResults(commonEachResult,
-      mergeGetServerSidePropsResults(userUIResult,
-        mergeGetServerSidePropsResults(rendererConfigResult,
-          mergeGetServerSidePropsResults(sidebarConfigResult,
-            mergeGetServerSidePropsResults(serverConfigResult, i18nPropsResult))))));
-};
+export const getServerSideProps = getServerSideSearchPageProps;
 
 
 export default SearchResultPage;
 export default SearchResultPage;

+ 1 - 3
apps/app/src/pages/_search/types.ts

@@ -1,8 +1,6 @@
 export type ServerConfigurationProps = {
 export type ServerConfigurationProps = {
   serverConfig: {
   serverConfig: {
-    isSearchServiceConfigured: boolean;
-    isSearchServiceReachable: boolean;
-    isSearchScopeChildrenAsDefault: boolean;
     isContainerFluid: boolean;
     isContainerFluid: boolean;
+    showPageLimitationL: number;
   },
   },
 }
 }

+ 2 - 6
apps/app/src/pages/_search/use-hydrate-server-configurations.ts

@@ -2,10 +2,8 @@ import { useHydrateAtoms } from 'jotai/utils';
 
 
 import type { RendererConfig } from '~/interfaces/services/renderer';
 import type { RendererConfig } from '~/interfaces/services/renderer';
 import {
 import {
-  isSearchScopeChildrenAsDefaultAtom,
-  isSearchServiceConfiguredAtom,
-  isSearchServiceReachableAtom,
   isContainerFluidAtom,
   isContainerFluidAtom,
+  showPageLimitationLAtom,
   rendererConfigAtom,
   rendererConfigAtom,
 } from '~/states/server-configurations';
 } from '~/states/server-configurations';
 
 
@@ -21,10 +19,8 @@ export const useHydrateServerConfigurationAtoms = (
 ): void => {
 ): void => {
   // Hydrate server configuration atoms with server-side data
   // Hydrate server configuration atoms with server-side data
   useHydrateAtoms(serverConfig == null || rendererConfigs == null ? [] : [
   useHydrateAtoms(serverConfig == null || rendererConfigs == null ? [] : [
-    [isSearchServiceConfiguredAtom, serverConfig.isSearchServiceConfigured],
-    [isSearchServiceReachableAtom, serverConfig.isSearchServiceReachable],
-    [isSearchScopeChildrenAsDefaultAtom, serverConfig.isSearchScopeChildrenAsDefault],
     [isContainerFluidAtom, serverConfig.isContainerFluid],
     [isContainerFluidAtom, serverConfig.isContainerFluid],
+    [showPageLimitationLAtom, serverConfig.showPageLimitationL],
     [rendererConfigAtom, rendererConfigs],
     [rendererConfigAtom, rendererConfigs],
   ]);
   ]);
 };
 };

+ 2 - 2
apps/app/src/pages/share/[[...path]]/index.page.tsx

@@ -23,8 +23,8 @@ import loggerFactory from '~/utils/logger';
 import type { NextPageWithLayout } from '../../_app.page';
 import type { NextPageWithLayout } from '../../_app.page';
 import type { GeneralPageInitialProps } from '../../general-page';
 import type { GeneralPageInitialProps } from '../../general-page';
 import { useInitialCSRFetch } from '../../general-page';
 import { useInitialCSRFetch } from '../../general-page';
+import { useHydrateGeneralPageConfigurationAtoms } from '../../general-page/hydrate';
 import { registerPageToShowRevisionWithMeta } from '../../general-page/superjson';
 import { registerPageToShowRevisionWithMeta } from '../../general-page/superjson';
-import { useHydrateServerConfigurationAtoms } from '../../general-page/use-hydrate-server-configurations';
 
 
 import { NEXT_JS_ROUTING_PAGE } from './consts';
 import { NEXT_JS_ROUTING_PAGE } from './consts';
 import { getServerSidePropsForInitial, getServerSidePropsForSameRoute } from './server-side-props';
 import { getServerSidePropsForInitial, getServerSidePropsForSameRoute } from './server-side-props';
@@ -103,7 +103,7 @@ type LayoutProps = Props & {
 const Layout = ({ children, ...props }: LayoutProps): JSX.Element => {
 const Layout = ({ children, ...props }: LayoutProps): JSX.Element => {
   // Hydrate sidebar atoms with server-side data - must be called unconditionally
   // Hydrate sidebar atoms with server-side data - must be called unconditionally
   const initialProps = isInitialProps(props) ? props : undefined;
   const initialProps = isInitialProps(props) ? props : undefined;
-  useHydrateServerConfigurationAtoms(initialProps?.serverConfig, initialProps?.rendererConfig);
+  useHydrateGeneralPageConfigurationAtoms(initialProps?.serverConfig, initialProps?.rendererConfig);
 
 
   return <ShareLinkLayout>{children}</ShareLinkLayout>;
   return <ShareLinkLayout>{children}</ShareLinkLayout>;
 };
 };