Przeglądaj źródła

move useSaveNextCaretLine to stores-universal

reiji-h 1 rok temu
rodzic
commit
e7f430299e

+ 0 - 44
apps/app/src/client/services/side-effects/save-next-caret-line.ts

@@ -1,44 +0,0 @@
-import { useCallback, useEffect } from 'react';
-
-import type EventEmitter from 'events';
-
-import { useSWRStatic } from '@growi/core/dist/swr';
-import type { SWRResponse } from 'swr';
-
-declare global {
-  // eslint-disable-next-line vars-on-top, no-var
-  var globalEmitter: EventEmitter;
-}
-
-type SaveNextCaretLineUtils = {
-  pick(): number | undefined,
-}
-
-export const useSaveNextCaretLine = (initialData?: number): SWRResponse<number> & SaveNextCaretLineUtils => {
-
-  const swrResponse = useSWRStatic('saveNextCaretLine', initialData, { fallbackData: 0 });
-  const { data, mutate } = swrResponse;
-
-  const pick = useCallback(() => {
-    const tmp = data;
-    mutate(0);
-    return tmp;
-  }, [data, mutate]);
-
-  useEffect(() => {
-    const handler = (lineNumber: number) => {
-      mutate(lineNumber);
-    };
-
-    globalEmitter.on('saveNextCaretLine', handler);
-
-    return function cleanup() {
-      globalEmitter.removeListener('saveNextCaretLine', handler);
-    };
-  }, [mutate]);
-
-  return {
-    ...swrResponse,
-    pick,
-  };
-};

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

@@ -41,7 +41,7 @@ import {
   useCsrfToken, useIsSearchScopeChildrenAsDefault, useIsEnabledMarp, useCurrentPathname,
   useIsSlackConfigured, useRendererConfig, useGrowiCloudUri,
   useIsAllReplyShown, useIsContainerFluid, useIsNotCreatable,
-  useIsUploadAllFileAllowed, useIsUploadEnabled,
+  useIsUploadAllFileAllowed, useIsUploadEnabled, useSaveNextCaretLine,
 } from '~/stores-universal/context';
 import { useEditingMarkdown } from '~/stores/editor';
 import {
@@ -260,8 +260,10 @@ const Page: NextPageWithLayout<Props> = (props: Props) => {
 
   const { mutate: mutateCurrentPageYjsData } = useCurrentPageYjsData();
 
+
   useSetupGlobalSocket();
   useSetupGlobalSocketForPage(pageId);
+  useSaveNextCaretLine();
 
   // Store initial data (When revisionBody is not SSR)
   useEffect(() => {

+ 31 - 0
apps/app/src/stores-universal/context.tsx

@@ -1,3 +1,7 @@
+import { useCallback, useEffect } from 'react';
+
+import type EventEmitter from 'events';
+
 import { AcceptedUploadFileType } from '@growi/core';
 import type { ColorScheme, IUserHasId } from '@growi/core';
 import { useSWRStatic } from '@growi/core/dist/swr';
@@ -12,6 +16,10 @@ import type { TargetAndAncestors } from '../interfaces/page-listing-results';
 
 import { useContextSWR } from './use-context-swr';
 
+declare global {
+  // eslint-disable-next-line vars-on-top, no-var
+  var globalEmitter: EventEmitter;
+}
 
 type Nullable<T> = T | null;
 
@@ -252,6 +260,29 @@ export const useIsEditable = (): SWRResponse<boolean, Error> => {
   );
 };
 
+
+export const useSaveNextCaretLine = (initialData?: number): SWRResponse<number> => {
+
+  const swrResponse = useSWRStatic('saveNextCaretLine', initialData, { fallbackData: 0 });
+  const { mutate } = swrResponse;
+
+  useEffect(() => {
+    const handler = (lineNumber: number) => {
+      mutate(lineNumber);
+    };
+
+    globalEmitter.on('saveNextCaretLine', handler);
+
+    return function cleanup() {
+      globalEmitter.removeListener('saveNextCaretLine', handler);
+    };
+  }, [mutate]);
+
+  return {
+    ...swrResponse,
+  };
+};
+
 export const useAcceptedUploadFileType = (): SWRResponse<AcceptedUploadFileType, Error> => {
   const { data: isUploadEnabled } = useIsUploadEnabled();
   const { data: isUploadAllFileAllowed } = useIsUploadAllFileAllowed();