Yuki Takei 7 ماه پیش
والد
کامیت
331d5dac41

+ 1 - 1
apps/app/src/client/components/Bookmarks/BookmarkFolderMenu.tsx

@@ -34,7 +34,7 @@ export const BookmarkFolderMenu = (props: BookmarkFolderMenuProps): JSX.Element
 
   const [selectedItem, setSelectedItem] = useState<string | null>(null);
 
-  const [currentUser] = useCurrentUser();
+  const currentUser = useCurrentUser();
   const { data: bookmarkFolders, mutate: mutateBookmarkFolders } = useSWRxBookmarkFolderAndChild(currentUser?._id);
 
   const { trigger: mutateCurrentUserBookmarks } = useSWRMUTxCurrentUserBookmarks();

+ 13 - 10
apps/app/src/client/components/PageEditor/ConflictDiffModal.tsx

@@ -15,11 +15,14 @@ import {
 } from 'reactstrap';
 
 import { useCurrentUser } from '~/states/global';
-import { useCurrentPageData, useRemoteRevisionBody, useRemoteRevisionId } from '~/states/page';
-import { useConflictDiffModal } from '~/stores/modal';
 import {
-  useRemoteRevisionLastUpdatedAt, useRemoteRevisionLastUpdateUser,
-} from '~/stores/remote-latest-page';
+  useCurrentPageData,
+  useRemoteRevisionBody,
+  useRemoteRevisionId,
+  useRemoteRevisionLastUpdatedAt,
+  useRemoteRevisionLastUpdateUser,
+} from '~/states/page';
+import { useConflictDiffModal } from '~/stores/modal';
 
 import styles from './ConflictDiffModal.module.scss';
 
@@ -186,15 +189,15 @@ const ConflictDiffModalCore = (props: ConflictDiffModalCoreProps): JSX.Element =
 
 
 export const ConflictDiffModal = (): JSX.Element => {
-  const [currentUser] = useCurrentUser();
-  const [currentPage] = useCurrentPageData();
+  const currentUser = useCurrentUser();
+  const currentPage = useCurrentPageData();
   const { data: conflictDiffModalStatus } = useConflictDiffModal();
 
   // state for latest page
-  const [remoteRevisionId] = useRemoteRevisionId();
-  const [remoteRevisionBody] = useRemoteRevisionBody();
-  const { data: remoteRevisionLastUpdateUser } = useRemoteRevisionLastUpdateUser();
-  const { data: remoteRevisionLastUpdatedAt } = useRemoteRevisionLastUpdatedAt();
+  const remoteRevisionId = useRemoteRevisionId();
+  const remoteRevisionBody = useRemoteRevisionBody();
+  const remoteRevisionLastUpdateUser = useRemoteRevisionLastUpdateUser();
+  const remoteRevisionLastUpdatedAt = useRemoteRevisionLastUpdatedAt();
 
   const isRemotePageDataInappropriate = remoteRevisionId == null || remoteRevisionBody == null || remoteRevisionLastUpdateUser == null;
 

+ 1 - 1
apps/app/src/client/components/PageHeader/PageHeader.tsx

@@ -14,7 +14,7 @@ const moduleClass = styles['page-header'] ?? '';
 
 export const PageHeader = (): JSX.Element => {
 
-  const [currentPage] = useCurrentPageData();
+  const currentPage = useCurrentPageData();
   const { data: pageControlsX } = usePageControlsX();
   const pageHeaderRef = useRef<HTMLDivElement>(null);
 

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

@@ -2,12 +2,13 @@ import React, {
   useCallback, useMemo, useRef, useState, type JSX,
 } from 'react';
 
+import { useAtomValue } from 'jotai';
 import { useTranslation } from 'next-i18next';
 
 import type { ISelectableAll, ISelectableAndIndeterminatable } from '~/client/interfaces/selectable-all';
 import { useKeywordManager } from '~/client/services/search-operation';
 import type { IFormattedSearchResult } from '~/interfaces/search';
-import { useShowPageLimitationL } from '~/states/server-configurations';
+import { showPageLimitationLAtom } from '~/states/server-configurations';
 import { type ISearchConditions, type ISearchConfigurations, useSWRxSearch } from '~/stores/search';
 
 import { NotAvailableForGuest } from './NotAvailableForGuest';
@@ -84,7 +85,7 @@ SearchResultListHead.displayName = 'SearchResultListHead';
 
 export const SearchPage = (): JSX.Element => {
   const { t } = useTranslation();
-  const [showPageLimitationL] = useShowPageLimitationL();
+  const showPageLimitationL = useAtomValue(showPageLimitationLAtom);
 
   const { data: keyword, pushState } = useKeywordManager();
 

+ 4 - 3
apps/app/src/components/PageView/PageAlerts/FullTextSearchNotCoverAlert.tsx

@@ -1,16 +1,17 @@
 import type { JSX } from 'react';
 
+import { useAtomValue } from 'jotai';
 import { useTranslation } from 'react-i18next';
 
 import { useCurrentPageData } from '~/states/page';
-import { useElasticsearchMaxBodyLengthToIndex } from '~/states/server-configurations';
+import { elasticsearchMaxBodyLengthToIndexAtom } from '~/states/server-configurations';
 
 
 export const FullTextSearchNotCoverAlert = (): JSX.Element => {
   const { t } = useTranslation();
 
-  const [elasticsearchMaxBodyLengthToIndex] = useElasticsearchMaxBodyLengthToIndex();
-  const [data] = useCurrentPageData();
+  const elasticsearchMaxBodyLengthToIndex = useAtomValue(elasticsearchMaxBodyLengthToIndexAtom);
+  const data = useCurrentPageData();
 
   const markdownLength = data?.revision?.body?.length;
 

+ 4 - 3
apps/app/src/components/PageView/PageAlerts/PageStaleAlert.tsx

@@ -1,20 +1,21 @@
 import type { JSX } from 'react';
 
 import { isIPageInfoForEntity } from '@growi/core';
+import { useAtomValue } from 'jotai';
 import { useTranslation } from 'next-i18next';
 
 
 import { useCurrentPageData } from '~/states/page';
-import { useIsEnabledStaleNotification } from '~/states/server-configurations';
+import { isEnabledStaleNotificationAtom } from '~/states/server-configurations';
 import { useSWRxPageInfo } from '~/stores/page';
 
 
 export const PageStaleAlert = ():JSX.Element => {
   const { t } = useTranslation();
-  const [isEnabledStaleNotification] = useIsEnabledStaleNotification();
+  const isEnabledStaleNotification = useAtomValue(isEnabledStaleNotificationAtom);
 
   // Todo: determine if it should fetch or not like useSWRxPageInfo below after https://redmine.weseek.co.jp/issues/96788
-  const [pageData] = useCurrentPageData();
+  const pageData = useCurrentPageData();
   const { data: pageInfo } = useSWRxPageInfo(isEnabledStaleNotification ? pageData?._id : null);
 
   const contentAge = isIPageInfoForEntity(pageInfo) ? pageInfo.contentAge : null;

+ 2 - 2
apps/app/src/pages/utils/nextjs-routing-utils.spec.ts

@@ -45,7 +45,7 @@ describe('nextjs-routing-utils', () => {
     });
 
     it('should remove cookie when nextjsRoutingPage is null', () => {
-      renderHook(() => useNextjsRoutingPageRegister(null));
+      renderHook(() => useNextjsRoutingPageRegister(undefined));
 
       expect(mockCookies.remove).toHaveBeenCalledWith('nextjsRoutingPage');
     });
@@ -93,7 +93,7 @@ describe('nextjs-routing-utils', () => {
 
     it('should handle rapid prop changes correctly', () => {
       const { rerender } = renderHook(
-        ({ page }: { page: string | null }) => useNextjsRoutingPageRegister(page),
+        ({ page }: { page: string | null }) => useNextjsRoutingPageRegister(page ?? undefined),
         { initialProps: { page: '/page1' as string | null } },
       );