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

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

@@ -37,8 +37,8 @@ export const Comments = (props: CommentsProps): JSX.Element => {
 
   const { mutate } = useSWRxPageComment(pageId);
   const { trigger: mutatePageInfo } = useSWRMUTxPageInfo(pageId);
-  const [isDeleted] = useIsTrashPage();
-  const [currentUser] = useCurrentUser();
+  const isDeleted = useIsTrashPage();
+  const currentUser = useCurrentUser();
 
   const pageCommentParentRef = useRef<HTMLDivElement>(null);
 

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

@@ -2,11 +2,12 @@
 import React, { useState, type JSX } from 'react';
 
 import type { IUser } from '@growi/core';
+import { useAtomValue } from 'jotai';
 import { Collapse } from 'reactstrap';
 
 import type { ICommentHasId, ICommentHasIdList } from '~/interfaces/comment';
 import type { RendererOptions } from '~/interfaces/renderer-options';
-import { useIsAllReplyShown } from '~/states/server-configurations';
+import { isAllReplyShownAtom } from '~/states/server-configurations';
 
 
 import { Comment } from './Comment';
@@ -34,7 +35,7 @@ export const ReplyComments = (props: ReplycommentsProps): JSX.Element => {
     pageId, pagePath, deleteBtnClicked, onComment,
   } = props;
 
-  const [isAllReplyShown] = useIsAllReplyShown();
+  const isAllReplyShown = useAtomValue(isAllReplyShownAtom);
 
   const [isOlderRepliesShown, setIsOlderRepliesShown] = useState(false);
 

+ 11 - 10
apps/app/src/client/components/PageControls/PageControls.tsx

@@ -10,6 +10,7 @@ import {
 } from '@growi/core';
 import { pagePathUtils } from '@growi/core/dist/utils';
 import { useRect } from '@growi/ui/dist/utils';
+import { useAtomValue } from 'jotai';
 import { useTranslation } from 'next-i18next';
 import { DropdownItem } from 'reactstrap';
 
@@ -20,7 +21,7 @@ import { toastError } from '~/client/util/toastr';
 import OpenDefaultAiAssistantButton from '~/features/openai/client/components/AiAssistant/OpenDefaultAiAssistantButton';
 import { useIsGuestUser, useIsReadOnlyUser, useIsSearchPage } from '~/states/context';
 import { useCurrentPagePath } from '~/states/page';
-import { useIsUsersHomepageDeletionEnabled } from '~/states/server-configurations';
+import { isUsersHomepageDeletionEnabledAtom } from '~/states/server-configurations';
 import {
   EditorMode, useEditorMode,
 } from '~/states/ui/editor';
@@ -132,13 +133,13 @@ const PageControlsSubstance = (props: PageControlsSubstanceProps): JSX.Element =
     onClickEditTagsButton, onClickDuplicateMenuItem, onClickRenameMenuItem, onClickDeleteMenuItem, onClickSwitchContentWidth,
   } = props;
 
-  const [isGuestUser] = useIsGuestUser();
-  const [isReadOnlyUser] = useIsReadOnlyUser();
+  const isGuestUser = useIsGuestUser();
+  const isReadOnlyUser = useIsReadOnlyUser();
   const { editorMode } = useEditorMode();
   const { data: isDeviceLargerThanMd } = useIsDeviceLargerThanMd();
-  const [isSearchPage] = useIsSearchPage();
-  const [isUsersHomepageDeletionEnabled] = useIsUsersHomepageDeletionEnabled();
-  const [currentPagePath] = useCurrentPagePath();
+  const isSearchPage = useIsSearchPage();
+  const isUsersHomepageDeletionEnabled = useAtomValue(isUsersHomepageDeletionEnabledAtom);
+  const currentPagePath = useCurrentPagePath();
 
   const isUsersHomepage = currentPagePath == null ? false : pagePathUtils.isUsersHomepage(currentPagePath);
 
@@ -189,7 +190,7 @@ const PageControlsSubstance = (props: PageControlsSubstanceProps): JSX.Element =
     mutatePageInfo();
   }, [isGuestUser, mutatePageInfo, pageId, pageInfo]);
 
-  const duplicateMenuItemClickHandler = useCallback(async(_pageId: string): Promise<void> => {
+  const duplicateMenuItemClickHandler = useCallback(async(): Promise<void> => {
     if (onClickDuplicateMenuItem == null || path == null) {
       return;
     }
@@ -198,7 +199,7 @@ const PageControlsSubstance = (props: PageControlsSubstanceProps): JSX.Element =
     onClickDuplicateMenuItem(page);
   }, [onClickDuplicateMenuItem, pageId, path]);
 
-  const renameMenuItemClickHandler = useCallback(async(_pageId: string): Promise<void> => {
+  const renameMenuItemClickHandler = useCallback(async(): Promise<void> => {
     if (onClickRenameMenuItem == null || path == null) {
       return;
     }
@@ -215,7 +216,7 @@ const PageControlsSubstance = (props: PageControlsSubstanceProps): JSX.Element =
     onClickRenameMenuItem(page);
   }, [onClickRenameMenuItem, pageId, pageInfo, path, revisionId]);
 
-  const deleteMenuItemClickHandler = useCallback(async(_pageId: string): Promise<void> => {
+  const deleteMenuItemClickHandler = useCallback(async(): Promise<void> => {
     if (onClickDeleteMenuItem == null || path == null) {
       return;
     }
@@ -270,7 +271,7 @@ const PageControlsSubstance = (props: PageControlsSubstanceProps): JSX.Element =
     }
 
     return true;
-  }, [isGuestUser, isUsersHomepage, isUsersHomepageDeletionEnabled]);
+  }, [currentPagePath, isGuestUser, isUsersHomepage, isUsersHomepageDeletionEnabled]);
 
   const additionalMenuItemOnTopRenderer = useMemo(() => {
     if (!isIPageInfoForEntity(pageInfo)) {

+ 4 - 3
apps/app/src/client/components/PageCreateModal.tsx

@@ -9,6 +9,7 @@ import { Origin } from '@growi/core';
 import { pagePathUtils, pathUtils } from '@growi/core/dist/utils';
 import { normalizePath } from '@growi/core/dist/utils/path-utils';
 import { format } from 'date-fns/format';
+import { useAtomValue } from 'jotai';
 import { useTranslation } from 'next-i18next';
 import {
   Modal, ModalHeader, ModalBody, UncontrolledButtonDropdown, DropdownToggle, DropdownMenu, DropdownItem,
@@ -19,7 +20,7 @@ import { useCreateTemplatePage } from '~/client/services/create-page';
 import { useCreatePage } from '~/client/services/create-page/use-create-page';
 import { useToastrOnError } from '~/client/services/use-toastr-on-error';
 import { useCurrentUser } from '~/states/global';
-import { useIsSearchServiceReachable } from '~/states/server-configurations';
+import { isSearchServiceReachableAtom } from '~/states/server-configurations';
 import { usePageCreateModal } from '~/stores/modal';
 
 import PagePathAutoComplete from './PagePathAutoComplete';
@@ -33,7 +34,7 @@ const {
 const PageCreateModal: React.FC = () => {
   const { t } = useTranslation();
 
-  const [currentUser] = useCurrentUser();
+  const currentUser = useCurrentUser();
 
   const { data: pageCreateModalData, close: closeCreateModal } = usePageCreateModal();
 
@@ -42,7 +43,7 @@ const PageCreateModal: React.FC = () => {
   const { create } = useCreatePage();
   const { createTemplate } = useCreateTemplatePage();
 
-  const [isReachable] = useIsSearchServiceReachable();
+  const isReachable = useAtomValue(isSearchServiceReachableAtom);
   const pathname = pageCreateModalData?.path ?? '';
   const userHomepagePath = pagePathUtils.userHomepagePath(currentUser);
   const isCreatable = isCreatablePage(pathname) || isUsersHomepage(pathname);

+ 4 - 3
apps/app/src/client/components/PageDuplicateModal.tsx

@@ -2,6 +2,7 @@ import React, {
   useState, useEffect, useCallback, useMemo, type JSX,
 } from 'react';
 
+import { useAtomValue } from 'jotai';
 import { useTranslation } from 'next-i18next';
 import {
   Modal, ModalHeader, ModalBody, ModalFooter,
@@ -11,7 +12,7 @@ import { debounce } from 'throttle-debounce';
 import { apiv3Get, apiv3Post } from '~/client/util/apiv3-client';
 import { toastError } from '~/client/util/toastr';
 import { useSiteUrl } from '~/states/global';
-import { useIsSearchServiceReachable } from '~/states/server-configurations';
+import { isSearchServiceReachableAtom } from '~/states/server-configurations';
 import { usePageDuplicateModal } from '~/stores/modal';
 
 import DuplicatePathsTable from './DuplicatedPathsTable';
@@ -22,8 +23,8 @@ import PagePathAutoComplete from './PagePathAutoComplete';
 const PageDuplicateModal = (): JSX.Element => {
   const { t } = useTranslation();
 
-  const [siteUrl] = useSiteUrl();
-  const [isReachable] = useIsSearchServiceReachable();
+  const siteUrl = useSiteUrl();
+  const isReachable = useAtomValue(isSearchServiceReachableAtom);
 
   const { data: duplicateModalData, close: closeDuplicateModal } = usePageDuplicateModal();
 

+ 1 - 1
apps/app/src/client/components/PageEditor/DrawioModal.tsx

@@ -55,7 +55,7 @@ const drawioConfig: DrawioConfig = {
 
 
 export const DrawioModal = (): JSX.Element => {
-  const [{ drawioUri }] = useRendererConfig();
+  const { drawioUri } = useRendererConfig();
   const { data: personalSettingsInfo } = usePersonalSettings({
     // make immutable
     revalidateIfStale: false,

+ 1 - 1
apps/app/src/client/components/PageEditor/Preview.tsx

@@ -30,7 +30,7 @@ const Preview = (props: Props): JSX.Element => {
     expandContentWidth,
   } = props;
 
-  const [{ isEnabledMarp }] = useRendererConfig();
+  const { isEnabledMarp } = useRendererConfig();
   const isSlide = useSlidesByFrontmatter(markdown, isEnabledMarp);
 
   const fluidLayoutClass = expandContentWidth ? 'fluid-layout' : '';

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

@@ -38,10 +38,10 @@ const PagePresentationModal = (): JSX.Element => {
   const { isDarkMode } = useNextThemes();
   const fullscreen = useFullScreen();
 
-  const [currentPage] = useCurrentPageData();
+  const currentPage = useCurrentPageData();
   const { data: rendererOptions, isLoading } = usePresentationViewOptions();
 
-  const [{ isEnabledMarp }] = useRendererConfig();
+  const { isEnabledMarp } = useRendererConfig();
 
   const markdown = currentPage?.revision?.body;
 

+ 2 - 2
apps/app/src/components/Admin/Common/AdminNavigation.tsx

@@ -83,8 +83,8 @@ const MenuLink = ({
 export const AdminNavigation = (): JSX.Element => {
   const pathname = window.location.pathname;
 
-  const [growiCloudUri] = useGrowiCloudUri();
-  const [growiAppIdForGrowiCloud] = useGrowiAppIdForGrowiCloud();
+  const growiCloudUri = useGrowiCloudUri();
+  const growiAppIdForGrowiCloud = useGrowiAppIdForGrowiCloud();
 
   const isActiveMenu = useCallback((path: string | string[]) => {
     const paths = Array.isArray(path) ? path : [path];

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

@@ -1,9 +1,8 @@
 import type { ReactNode, JSX } from 'react';
 import React from 'react';
 
-import type {
-  GetServerSideProps, GetServerSidePropsContext,
-} from 'next';
+import { useAtomValue } from 'jotai';
+import type { GetServerSideProps, GetServerSidePropsContext } from 'next';
 import dynamic from 'next/dynamic';
 import Head from 'next/head';
 
@@ -15,12 +14,9 @@ import { getServerSideCommonEachProps } from '~/pages/common-props';
 import { NextjsRoutingType, detectNextjsRoutingType } from '~/pages/utils/nextjs-routing-utils';
 import { useCustomTitleForPage } from '~/pages/utils/page-title-customization';
 import { mergeGetServerSidePropsResults } from '~/pages/utils/server-side-props';
-import {
-  useCurrentPageData, useCurrentPagePath,
-} from '~/states/page';
+import { useCurrentPageData, useCurrentPagePath } from '~/states/page';
 import { useHydratePageAtoms } from '~/states/page/hydrate';
-import { useDisableLinkSharing, useRendererConfig } from '~/states/server-configurations';
-import loggerFactory from '~/utils/logger';
+import { disableLinkSharingAtom, useRendererConfig } from '~/states/server-configurations';
 
 import type { NextPageWithLayout } from '../../_app.page';
 import type { GeneralPageInitialProps } from '../../general-page';
@@ -39,8 +35,6 @@ registerPageToShowRevisionWithMeta();
 const GrowiContextualSubNavigation = dynamic(() => import('~/client/components/Navbar/GrowiContextualSubNavigation'), { ssr: false });
 
 
-const logger = loggerFactory('growi:next-page:share');
-
 type InitialProps = CommonEachProps & GeneralPageInitialProps & ShareLinkInitialProps;
 type Props = CommonEachProps | InitialProps;
 
@@ -58,10 +52,10 @@ const SharedPage: NextPageWithLayout<Props> = (props: Props) => {
     shareLinkId: shareLink?._id,
   });
 
-  const [currentPage] = useCurrentPageData();
-  const [currentPagePath] = useCurrentPagePath();
-  const [rendererConfig] = useRendererConfig();
-  const [isLinkSharingDisabled] = useDisableLinkSharing();
+  const currentPage = useCurrentPageData();
+  const currentPagePath = useCurrentPagePath();
+  const rendererConfig = useRendererConfig();
+  const isLinkSharingDisabled = useAtomValue(disableLinkSharingAtom);
 
   // Use custom hooks for navigation and routing
   // useSameRouteNavigation();