Просмотр исходного кода

Use SWR hook to determine if old revisions are being displayed

Shun Miyazawa 2 лет назад
Родитель
Сommit
61765bbb71

+ 4 - 3
apps/app/src/components/PageAlert/OldRevisionAlert.tsx

@@ -4,15 +4,16 @@ import { returnPathForURL } from '@growi/core/dist/utils/path-utils';
 import Link from 'next/link';
 import Link from 'next/link';
 import { useTranslation } from 'react-i18next';
 import { useTranslation } from 'react-i18next';
 
 
-import { useSWRxCurrentPage, useIsLatestRevision } from '~/stores/page';
+import { useIsOldRevisionPage } from '~/stores/context';
+import { useSWRxCurrentPage } from '~/stores/page';
 
 
 export const OldRevisionAlert = (): JSX.Element => {
 export const OldRevisionAlert = (): JSX.Element => {
 
 
   const { t } = useTranslation();
   const { t } = useTranslation();
-  const { data: isLatestRevision } = useIsLatestRevision();
   const { data: page } = useSWRxCurrentPage();
   const { data: page } = useSWRxCurrentPage();
+  const { data: isOldRevisionPage } = useIsOldRevisionPage();
 
 
-  if (page == null || isLatestRevision == null || isLatestRevision) {
+  if (page == null || !isOldRevisionPage) {
     return <></>;
     return <></>;
   }
   }
 
 

+ 4 - 3
apps/app/src/components/PageEditor/PageEditor.tsx

@@ -28,7 +28,7 @@ import {
   useDefaultIndentSize, useCurrentUser,
   useDefaultIndentSize, useCurrentUser,
   useCurrentPathname, useIsEnabledAttachTitleHeader,
   useCurrentPathname, useIsEnabledAttachTitleHeader,
   useIsEditable, useIsIndentSizeForced,
   useIsEditable, useIsIndentSizeForced,
-  useAcceptedUploadFileType,
+  useAcceptedUploadFileType, useIsOldRevisionPage
 } from '~/stores/context';
 } from '~/stores/context';
 import {
 import {
   useEditorSettings,
   useEditorSettings,
@@ -115,6 +115,7 @@ export const PageEditor = React.memo((props: Props): JSX.Element => {
   const { mutate: mutateRemoteRevisionLastUpdatedAt } = useRemoteRevisionLastUpdatedAt();
   const { mutate: mutateRemoteRevisionLastUpdatedAt } = useRemoteRevisionLastUpdatedAt();
   const { mutate: mutateRemoteRevisionLastUpdateUser } = useRemoteRevisionLastUpdateUser();
   const { mutate: mutateRemoteRevisionLastUpdateUser } = useRemoteRevisionLastUpdateUser();
   const { data: user } = useCurrentUser();
   const { data: user } = useCurrentUser();
+  const { data: isOldRevisionPage } = useIsOldRevisionPage();
   const { onEditorsUpdated } = useEditingUsers();
   const { onEditorsUpdated } = useEditingUsers();
 
 
   const { data: socket } = useGlobalSocket();
   const { data: socket } = useGlobalSocket();
@@ -442,7 +443,7 @@ export const PageEditor = React.memo((props: Props): JSX.Element => {
 
 
       <div className={`flex-expand-horiz ${props.visibility ? '' : 'd-none'}`}>
       <div className={`flex-expand-horiz ${props.visibility ? '' : 'd-none'}`}>
         <div className="page-editor-editor-container flex-expand-vert border-end">
         <div className="page-editor-editor-container flex-expand-vert border-end">
-          { isLatestRevision
+          { isOldRevisionPage
             ? (
             ? (
               <CodeMirrorEditorMain
               <CodeMirrorEditorMain
               onChange={markdownChangedHandler}
               onChange={markdownChangedHandler}
@@ -480,7 +481,7 @@ export const PageEditor = React.memo((props: Props): JSX.Element => {
         </div>
         </div>
       </div>
       </div>
 
 
-      <EditorNavbarBottom />
+      { !isOldRevisionPage && (<EditorNavbarBottom />) }
 
 
     </div>
     </div>
   );
   );

+ 7 - 1
apps/app/src/pages/[[...path]].page.tsx

@@ -40,7 +40,7 @@ import {
   useCsrfToken, useIsSearchScopeChildrenAsDefault, useIsEnabledMarp, useCurrentPathname,
   useCsrfToken, useIsSearchScopeChildrenAsDefault, useIsEnabledMarp, useCurrentPathname,
   useIsSlackConfigured, useRendererConfig, useGrowiCloudUri,
   useIsSlackConfigured, useRendererConfig, useGrowiCloudUri,
   useIsAllReplyShown, useIsContainerFluid, useIsNotCreatable,
   useIsAllReplyShown, useIsContainerFluid, useIsNotCreatable,
-  useIsUploadAllFileAllowed, useIsUploadEnabled,
+  useIsUploadAllFileAllowed, useIsUploadEnabled, useIsOldRevisionPage,
 } from '~/stores/context';
 } from '~/stores/context';
 import { useEditingMarkdown } from '~/stores/editor';
 import { useEditingMarkdown } from '~/stores/editor';
 import {
 import {
@@ -175,6 +175,8 @@ type Props = CommonProps & {
   grantData?: IPageGrantData,
   grantData?: IPageGrantData,
 
 
   rendererConfig: RendererConfig,
   rendererConfig: RendererConfig,
+
+  isOldRevisionPage: boolean,
 };
 };
 
 
 const Page: NextPageWithLayout<Props> = (props: Props) => {
 const Page: NextPageWithLayout<Props> = (props: Props) => {
@@ -224,6 +226,8 @@ const Page: NextPageWithLayout<Props> = (props: Props) => {
   useIsUploadAllFileAllowed(props.isUploadAllFileAllowed);
   useIsUploadAllFileAllowed(props.isUploadAllFileAllowed);
   useIsUploadEnabled(props.isUploadEnabled);
   useIsUploadEnabled(props.isUploadEnabled);
 
 
+  useIsOldRevisionPage(props.isOldRevisionPage);
+
   const { pageWithMeta } = props;
   const { pageWithMeta } = props;
 
 
   const pageId = pageWithMeta?.data._id;
   const pageId = pageWithMeta?.data._id;
@@ -411,6 +415,8 @@ async function injectPageData(context: GetServerSidePropsContext, props: Props):
   const { crowi } = req;
   const { crowi } = req;
   const { revisionId } = req.query;
   const { revisionId } = req.query;
 
 
+  props.isOldRevisionPage = revisionId != null;
+
   const Page = crowi.model('Page') as PageModel;
   const Page = crowi.model('Page') as PageModel;
   const PageRedirect = mongooseModel('PageRedirect') as PageRedirectModel;
   const PageRedirect = mongooseModel('PageRedirect') as PageRedirectModel;
   const { pageService, configManager, pageGrantService } = crowi;
   const { pageService, configManager, pageGrantService } = crowi;

+ 5 - 0
apps/app/src/stores/context.tsx

@@ -192,6 +192,11 @@ export const useIsContainerFluid = (initialData?: boolean): SWRResponse<boolean,
   return useStaticSWR('isContainerFluid', initialData);
   return useStaticSWR('isContainerFluid', initialData);
 };
 };
 
 
+export const useIsOldRevisionPage = (initialData?: boolean): SWRResponse<boolean, Error> => {
+  return useContextSWR('isOldRevisionPage', initialData);
+};
+
+
 /** **********************************************************
 /** **********************************************************
  *                     Computed contexts
  *                     Computed contexts
  *********************************************************** */
  *********************************************************** */