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

transplant useSetRemoteLatestPageData

Yuki Takei 7 месяцев назад
Родитель
Сommit
2df97c21c4

+ 5 - 5
apps/app/src/client/components/PageEditor/conflict.tsx

@@ -10,11 +10,11 @@ import type { Save, SaveOptions } from '~/client/components/PageEditor/PageEdito
 import { useUpdateStateAfterSave } from '~/client/services/page-operation';
 import { toastSuccess } from '~/client/util/toastr';
 import { SocketEventName } from '~/interfaces/websocket';
-import { useCurrentPageData, useCurrentPageId } from '~/states/page';
+import type { RemoteRevisionData } from '~/states/page';
+import { useCurrentPageData, useCurrentPageId, useSetRemoteLatestPageData } from '~/states/page';
 import { EditorMode, useEditorMode } from '~/states/ui/editor';
 import { usePageStatusAlert } from '~/stores/alert';
 import { useConflictDiffModal } from '~/stores/modal';
-import { type RemoteRevisionData, useSetRemoteLatestPageData } from '~/stores/remote-latest-page';
 
 
 export type ConflictHandler = (
@@ -34,7 +34,7 @@ type GenerateResolveConflicthandler = () => (
 const useGenerateResolveConflictHandler: GenerateResolveConflicthandler = () => {
   const { t } = useTranslation();
 
-  const [pageId] = useCurrentPageId();
+  const pageId = useCurrentPageId();
   const { close: closePageStatusAlert } = usePageStatusAlert();
   const { close: closeConflictDiffModal } = useConflictDiffModal();
   const { data: codeMirrorEditor } = useCodeMirrorEditorIsolated(GlobalCodeMirrorEditorKey.MAIN);
@@ -65,7 +65,7 @@ type ConflictResolver = () => ConflictHandler;
 export const useConflictResolver: ConflictResolver = () => {
   const { open: openPageStatusAlert } = usePageStatusAlert();
   const { open: openConflictDiffModal } = useConflictDiffModal();
-  const { setRemoteLatestPageData } = useSetRemoteLatestPageData();
+  const setRemoteLatestPageData = useSetRemoteLatestPageData();
   const generateResolveConflictHandler = useGenerateResolveConflictHandler();
 
   return useCallback((remoteRevidsionData, requestMarkdown, save, saveOptions) => {
@@ -80,7 +80,7 @@ export const useConflictResolver: ConflictResolver = () => {
 };
 
 export const useConflictEffect = (): void => {
-  const [currentPage] = useCurrentPageData();
+  const currentPage = useCurrentPageData();
   const { close: closePageStatusAlert } = usePageStatusAlert();
   const { close: closeConflictDiffModal } = useConflictDiffModal();
   const { data: codeMirrorEditor } = useCodeMirrorEditorIsolated(GlobalCodeMirrorEditorKey.MAIN);

+ 5 - 7
apps/app/src/client/services/page-operation.ts

@@ -6,14 +6,13 @@ import urljoin from 'url-join';
 
 import type { SyncLatestRevisionBody } from '~/interfaces/yjs';
 import { useIsGuestUser } from '~/states/context';
-import { useCurrentPageId, useFetchCurrentPage } from '~/states/page';
+import { useCurrentPageId, useFetchCurrentPage, useSetRemoteLatestPageData } from '~/states/page';
 import { useEditingMarkdown } from '~/states/ui/editor';
 import { usePageTagsForEditors } from '~/stores/editor';
 import {
   useSWRxApplicableGrant, useSWRxTagsInfo,
   useSWRxCurrentGrantData,
 } from '~/stores/page';
-import { useSetRemoteLatestPageData } from '~/stores/remote-latest-page';
 import loggerFactory from '~/utils/logger';
 
 import { apiPost } from '../util/apiv1-client';
@@ -100,13 +99,13 @@ export type UpdateStateAfterSaveOption = {
 }
 
 export const useUpdateStateAfterSave = (pageId: string|undefined|null, opts?: UpdateStateAfterSaveOption): (() => Promise<void>) | undefined => {
-  const [, setCurrentPageId] = useCurrentPageId();
+  const setCurrentPageId = useCurrentPageId();
+  const isGuestUser = useIsGuestUser();
   const { fetchCurrentPage } = useFetchCurrentPage();
-  const { setRemoteLatestPageData } = useSetRemoteLatestPageData();
+  const setRemoteLatestPageData = useSetRemoteLatestPageData();
   const { mutate: mutateTagsInfo } = useSWRxTagsInfo(pageId);
   const { sync: syncTagsInfoForEditor } = usePageTagsForEditors(pageId);
   const [, setEditingMarkdown] = useEditingMarkdown();
-  const [isGuestUser] = useIsGuestUser();
   const { mutate: mutateCurrentGrantData } = useSWRxCurrentGrantData(isGuestUser ? null : pageId);
   const { mutate: mutateApplicableGrant } = useSWRxApplicableGrant(isGuestUser ? null : pageId);
 
@@ -119,8 +118,7 @@ export const useUpdateStateAfterSave = (pageId: string|undefined|null, opts?: Up
     await mutateTagsInfo(); // get from DB
     syncTagsInfoForEditor(); // sync global state for client
 
-    await setCurrentPageId(pageId);
-    const updatedPage = await fetchCurrentPage();
+    const updatedPage = await fetchCurrentPage({ pageId });
 
     if (updatedPage == null || updatedPage.revision == null) { return }
 

+ 1 - 1
apps/app/src/components/ReactMarkdownComponents/NextLink.tsx

@@ -50,7 +50,7 @@ export const NextLink = (props: Props): JSX.Element => {
     id, href, children, className, onClick, ...rest
   } = props;
 
-  const [siteUrl] = useSiteUrl();
+  const siteUrl = useSiteUrl();
 
   if (href == null) {
     return <a className={className}>{children}</a>;

+ 51 - 0
apps/app/src/states/page/use-set-remote-latest-page-data.ts

@@ -0,0 +1,51 @@
+import type { IUserHasId } from '@growi/core/dist/interfaces';
+import { useSetAtom } from 'jotai/react';
+import { useCallback } from 'react';
+import {
+  remoteRevisionBodyAtom,
+  remoteRevisionIdAtom,
+  remoteRevisionLastUpdatedAtAtom,
+  remoteRevisionLastUpdateUserAtom,
+} from './internal-atoms';
+
+export type RemoteRevisionData = {
+  remoteRevisionId: string;
+  remoteRevisionBody: string;
+  remoteRevisionLastUpdateUser?: IUserHasId;
+  remoteRevisionLastUpdatedAt: Date;
+};
+
+type SetRemoteLatestPageData = (pageData: RemoteRevisionData) => void;
+
+/**
+ * Set remote data all at once
+ */
+export const useSetRemoteLatestPageData = (): SetRemoteLatestPageData => {
+  const setRemoteRevisionId = useSetAtom(remoteRevisionIdAtom);
+  const setRemoteRevisionBody = useSetAtom(remoteRevisionBodyAtom);
+  const setRemoteRevisionLastUpdateUser = useSetAtom(
+    remoteRevisionLastUpdateUserAtom,
+  );
+  const setRemoteRevisionLastUpdatedAt = useSetAtom(
+    remoteRevisionLastUpdatedAtAtom,
+  );
+
+  return useCallback(
+    (remoteRevisionData: RemoteRevisionData) => {
+      setRemoteRevisionId(remoteRevisionData.remoteRevisionId);
+      setRemoteRevisionBody(remoteRevisionData.remoteRevisionBody);
+      setRemoteRevisionLastUpdateUser(
+        remoteRevisionData.remoteRevisionLastUpdateUser,
+      );
+      setRemoteRevisionLastUpdatedAt(
+        remoteRevisionData.remoteRevisionLastUpdatedAt,
+      );
+    },
+    [
+      setRemoteRevisionLastUpdateUser,
+      setRemoteRevisionLastUpdatedAt,
+      setRemoteRevisionBody,
+      setRemoteRevisionId,
+    ],
+  );
+};

+ 0 - 45
apps/app/src/stores/remote-latest-page.ts

@@ -1,45 +0,0 @@
-import { useMemo, useCallback } from 'react';
-
-import type { IUserHasId } from '@growi/core';
-import { useSWRStatic } from '@growi/core/dist/swr';
-import type { SWRResponse } from 'swr';
-
-import { useRemoteRevisionBody, useRemoteRevisionId } from '~/states/page';
-
-export const useRemoteRevisionLastUpdateUser = (initialData?: IUserHasId): SWRResponse<IUserHasId, Error> => {
-  return useSWRStatic<IUserHasId, Error>('remoteRevisionLastUpdateUser', initialData);
-};
-
-export const useRemoteRevisionLastUpdatedAt = (initialData?: Date): SWRResponse<Date, Error> => {
-  return useSWRStatic<Date, Error>('remoteRevisionLastUpdatedAt', initialData);
-};
-
-export type RemoteRevisionData = {
-  remoteRevisionId: string,
-  remoteRevisionBody: string,
-  remoteRevisionLastUpdateUser?: IUserHasId,
-  remoteRevisionLastUpdatedAt: Date,
-}
-
-
-// set remote data all at once
-export const useSetRemoteLatestPageData = (): { setRemoteLatestPageData: (pageData: RemoteRevisionData) => void } => {
-  const [, setRemoteRevisionId] = useRemoteRevisionId();
-  const [, setRemoteRevisionBody] = useRemoteRevisionBody();
-  const { mutate: mutateRemoteRevisionLastUpdateUser } = useRemoteRevisionLastUpdateUser();
-  const { mutate: mutateRemoteRevisionLastUpdatedAt } = useRemoteRevisionLastUpdatedAt();
-
-  const setRemoteLatestPageData = useCallback((remoteRevisionData: RemoteRevisionData) => {
-    setRemoteRevisionId(remoteRevisionData.remoteRevisionId);
-    setRemoteRevisionBody(remoteRevisionData.remoteRevisionBody);
-    mutateRemoteRevisionLastUpdateUser(remoteRevisionData.remoteRevisionLastUpdateUser);
-    mutateRemoteRevisionLastUpdatedAt(remoteRevisionData.remoteRevisionLastUpdatedAt);
-  }, [mutateRemoteRevisionLastUpdateUser, mutateRemoteRevisionLastUpdatedAt, setRemoteRevisionBody, setRemoteRevisionId]);
-
-  return useMemo(() => {
-    return {
-      setRemoteLatestPageData,
-    };
-  }, [setRemoteLatestPageData]);
-
-};