Yuki Takei 8 miesięcy temu
rodzic
commit
b2a1122c33
38 zmienionych plików z 129 dodań i 117 usunięć
  1. 3 2
      apps/app/src/client/components/Admin/Customize/CustomizeLogoSetting.tsx
  2. 2 7
      apps/app/src/client/components/AlertSiteUrlUndefined.tsx
  3. 2 2
      apps/app/src/client/components/Bookmarks/BookmarkFolderTree.tsx
  4. 4 3
      apps/app/src/client/components/DescendantsPageList.tsx
  5. 9 9
      apps/app/src/client/components/Navbar/GrowiContextualSubNavigation.tsx
  6. 2 2
      apps/app/src/client/components/NotAvailableForGuest.tsx
  7. 4 3
      apps/app/src/client/components/NotAvailableForReadOnlyUser.tsx
  8. 4 3
      apps/app/src/client/components/PageAccessoriesModal/PageAccessoriesModal.tsx
  9. 3 3
      apps/app/src/client/components/PageAccessoriesModal/PageAttachment.tsx
  10. 2 2
      apps/app/src/client/components/PageControls/BookmarkButtons.tsx
  11. 4 3
      apps/app/src/client/components/PageControls/PageControls.tsx
  12. 3 2
      apps/app/src/client/components/PageDuplicateModal.tsx
  13. 3 2
      apps/app/src/client/components/PageRenameModal.tsx
  14. 3 3
      apps/app/src/client/components/PageSelectModal/PageSelectModal.tsx
  15. 4 3
      apps/app/src/client/components/PageSideContents/PageSideContents.tsx
  16. 3 3
      apps/app/src/client/components/PageStatusAlert.tsx
  17. 5 3
      apps/app/src/client/components/ReactMarkdownComponents/DrawioViewerWithEditButton.tsx
  18. 4 3
      apps/app/src/client/components/ReactMarkdownComponents/Header.tsx
  19. 4 3
      apps/app/src/client/components/ReactMarkdownComponents/TableWithEditButton.tsx
  20. 4 3
      apps/app/src/client/components/SearchPage/SearchPageBase.tsx
  21. 3 3
      apps/app/src/client/components/SearchPage/SearchResultList.tsx
  22. 4 4
      apps/app/src/client/components/Sidebar/AppTitle/AppTitle.tsx
  23. 2 2
      apps/app/src/client/components/Sidebar/Bookmarks.tsx
  24. 3 3
      apps/app/src/client/components/Sidebar/PageTree/PageTreeSubstance.tsx
  25. 3 2
      apps/app/src/client/components/Sidebar/SidebarContents.tsx
  26. 4 2
      apps/app/src/client/components/Sidebar/SidebarNav/PrimaryItems.tsx
  27. 5 4
      apps/app/src/client/components/Sidebar/SidebarNav/SecondaryItems.tsx
  28. 3 3
      apps/app/src/client/components/Sidebar/SidebarNav/SidebarNav.tsx
  29. 2 2
      apps/app/src/client/components/SystemVersion.tsx
  30. 3 2
      apps/app/src/client/components/TrashPageList.tsx
  31. 2 2
      apps/app/src/client/services/page-operation.ts
  32. 2 2
      apps/app/src/components/Layout/NoLoginLayout.tsx
  33. 2 2
      apps/app/src/components/ReactMarkdownComponents/NextLink.tsx
  34. 2 2
      apps/app/src/features/openai/client/components/AiAssistant/Sidebar/AiAssistant.tsx
  35. 3 3
      apps/app/src/stores-universal/use-next-themes.tsx
  36. 6 6
      apps/app/src/stores/editor.tsx
  37. 6 7
      apps/app/src/stores/page.tsx
  38. 2 2
      apps/app/src/stores/personal-settings.tsx

+ 3 - 2
apps/app/src/client/components/Admin/Customize/CustomizeLogoSetting.tsx

@@ -7,7 +7,8 @@ import {
   apiv3Delete, apiv3PostForm, apiv3Put,
 } from '~/client/util/apiv3-client';
 import { toastError, toastSuccess } from '~/client/util/toastr';
-import { useIsDefaultLogo, useIsCustomizedLogoUploaded } from '~/stores-universal/context';
+import { useIsDefaultLogo } from '~/states/global';
+import { useIsCustomizedLogoUploaded } from '~/stores-universal/context';
 
 import AdminUpdateButtonRow from '../Common/AdminUpdateButtonRow';
 
@@ -18,7 +19,7 @@ const CUSTOMIZED_LOGO = '/attachment/brand-logo';
 const CustomizeLogoSetting = (): JSX.Element => {
 
   const { t } = useTranslation();
-  const { data: isDefaultLogo } = useIsDefaultLogo();
+  const [isDefaultLogo] = useIsDefaultLogo();
   const { data: isCustomizedLogoUploaded, mutate: mutateIsCustomizedLogoUploaded } = useIsCustomizedLogoUploaded();
 
   const [uploadLogoSrc, setUploadLogoSrc] = useState<ArrayBuffer | string | null>(null);

+ 2 - 7
apps/app/src/client/components/AlertSiteUrlUndefined.tsx

@@ -2,7 +2,7 @@ import type { JSX } from 'react';
 
 import { useTranslation } from 'next-i18next';
 
-import { useSiteUrl } from '~/stores-universal/context';
+import { useSiteUrl } from '~/states/global';
 
 const isValidUrl = (str: string): boolean => {
   try {
@@ -17,12 +17,7 @@ const isValidUrl = (str: string): boolean => {
 
 export const AlertSiteUrlUndefined = (): JSX.Element => {
   const { t } = useTranslation('commons');
-  const { data: siteUrl, error: errorSiteUrl } = useSiteUrl();
-  const isLoadingSiteUrl = siteUrl === undefined && errorSiteUrl === undefined;
-
-  if (isLoadingSiteUrl) {
-    return <></>;
-  }
+  const [siteUrl] = useSiteUrl();
 
   if (typeof siteUrl === 'string' && isValidUrl(siteUrl)) {
     return <></>;

+ 2 - 2
apps/app/src/client/components/Bookmarks/BookmarkFolderTree.tsx

@@ -9,8 +9,8 @@ import { HTML5Backend } from 'react-dnd-html5-backend';
 
 import { toastSuccess } from '~/client/util/toastr';
 import type { OnDeletedFunction } from '~/interfaces/ui';
+import { useIsReadOnlyUser } from '~/states/context';
 import { useCurrentPageData } from '~/states/page';
-import { useIsReadOnlyUser } from '~/stores-universal/context';
 import {
   useSWRxUserBookmarks, useSWRMUTxCurrentUserBookmarks,
 } from '~/stores/bookmark';
@@ -42,7 +42,7 @@ export const BookmarkFolderTree: React.FC<Props> = (props: Props) => {
   const { t } = useTranslation();
   const router = useRouter();
 
-  const { data: isReadOnlyUser } = useIsReadOnlyUser();
+  const [isReadOnlyUser] = useIsReadOnlyUser();
   const [currentPage] = useCurrentPageData();
   const { data: bookmarkFolders, mutate: mutateBookmarkFolders } = useSWRxBookmarkFolderAndChild(userId);
   const { data: userBookmarks, mutate: mutateUserBookmarks } = useSWRxUserBookmarks(userId ?? null);

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

@@ -11,7 +11,8 @@ import { useTranslation } from 'next-i18next';
 import { toastSuccess } from '~/client/util/toastr';
 import type { IPagingResult } from '~/interfaces/paging-result';
 import type { OnDeletedFunction, OnPutBackedFunction } from '~/interfaces/ui';
-import { useIsGuestUser, useIsReadOnlyUser, useIsSharedUser } from '~/stores-universal/context';
+import { useIsGuestUser, useIsReadOnlyUser } from '~/states/context';
+import { useIsSharedUser } from '~/stores-universal/context';
 import {
   mutatePageTree,
   useSWRxPageInfoForList, useSWRxPageList, mutateRecentlyUpdated,
@@ -42,8 +43,8 @@ const DescendantsPageListSubstance = (props: SubstanceProps): JSX.Element => {
     pagingResult, activePage, setActivePage, forceHideMenuItems, onPagesDeleted, onPagePutBacked,
   } = props;
 
-  const { data: isGuestUser } = useIsGuestUser();
-  const { data: isReadOnlyUser } = useIsReadOnlyUser();
+  const [isGuestUser] = useIsGuestUser();
+  const [isReadOnlyUser] = useIsReadOnlyUser();
 
   const pageIds = pagingResult?.items?.map(page => page._id);
   const { injectTo } = useSWRxPageInfoForList(pageIds, null, true, true);

+ 9 - 9
apps/app/src/client/components/Navbar/GrowiContextualSubNavigation.tsx

@@ -24,11 +24,11 @@ import { GroundGlassBar } from '~/components/Navbar/GroundGlassBar';
 import { usePageBulkExportSelectModal } from '~/features/page-bulk-export/client/stores/modal';
 import type { OnDuplicatedFunction, OnRenamedFunction, OnDeletedFunction } from '~/interfaces/ui';
 import { useShouldExpandContent } from '~/services/layout/use-should-expand-content';
+import { useIsGuestUser, useIsReadOnlyUser } from '~/states/context';
+import { useCurrentPathname, useCurrentUser } from '~/states/global';
 import { useCurrentPageId, useFetchCurrentPage } from '~/states/page';
 import {
-  useCurrentPathname,
-  useCurrentUser, useIsGuestUser, useIsReadOnlyUser, useIsBulkExportPagesEnabled,
-  useIsLocalAccountRegistrationEnabled, useIsSharedUser, useShareLinkId, useIsUploadEnabled,
+  useIsBulkExportPagesEnabled, useIsLocalAccountRegistrationEnabled, useIsSharedUser, useShareLinkId, useIsUploadEnabled,
 } from '~/stores-universal/context';
 import { useEditorMode } from '~/stores-universal/ui';
 import {
@@ -77,8 +77,8 @@ const PageOperationMenuItems = (props: PageOperationMenuItemsProps): JSX.Element
     pageId, revisionId, isLinkSharingDisabled,
   } = props;
 
-  const { data: isGuestUser } = useIsGuestUser();
-  const { data: isReadOnlyUser } = useIsReadOnlyUser();
+  const [isGuestUser] = useIsGuestUser();
+  const [isReadOnlyUser] = useIsReadOnlyUser();
   const { data: isSharedUser } = useIsSharedUser();
   const { data: isBulkExportPagesEnabled } = useIsBulkExportPagesEnabled();
   const { data: isUploadEnabled } = useIsUploadEnabled();
@@ -257,7 +257,7 @@ const GrowiContextualSubNavigation = (props: GrowiContextualSubNavigationProps):
   const { data: shareLinkId } = useShareLinkId();
   const { fetchCurrentPage } = useFetchCurrentPage();
 
-  const { data: currentPathname } = useCurrentPathname();
+  const [currentPathname] = useCurrentPathname();
   const isSharedPage = pagePathUtils.isSharedPage(currentPathname ?? '');
 
   const revision = currentPage?.revision;
@@ -265,9 +265,9 @@ const GrowiContextualSubNavigation = (props: GrowiContextualSubNavigationProps):
 
   const { data: editorMode } = useEditorMode();
   const [pageId] = useCurrentPageId();
-  const { data: currentUser } = useCurrentUser();
-  const { data: isGuestUser } = useIsGuestUser();
-  const { data: isReadOnlyUser } = useIsReadOnlyUser();
+  const [currentUser] = useCurrentUser();
+  const [isGuestUser] = useIsGuestUser();
+  const [isReadOnlyUser] = useIsReadOnlyUser();
   const { data: isLocalAccountRegistrationEnabled } = useIsLocalAccountRegistrationEnabled();
   const { data: isSharedUser } = useIsSharedUser();
 

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

@@ -2,7 +2,7 @@ import React, { type JSX } from 'react';
 
 import { useTranslation } from 'next-i18next';
 
-import { useIsGuestUser } from '~/stores-universal/context';
+import { useIsGuestUser } from '~/states/context';
 
 import { NotAvailable } from './NotAvailable';
 
@@ -12,7 +12,7 @@ type NotAvailableForGuestProps = {
 
 export const NotAvailableForGuest = React.memo(({ children }: NotAvailableForGuestProps): JSX.Element => {
   const { t } = useTranslation();
-  const { data: isGuestUser } = useIsGuestUser();
+  const [isGuestUser] = useIsGuestUser();
 
   const isDisabled = !!isGuestUser;
   const title = t('Not available for guest');

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

@@ -2,7 +2,8 @@ import React, { type JSX } from 'react';
 
 import { useTranslation } from 'next-i18next';
 
-import { useIsReadOnlyUser, useIsRomUserAllowedToComment } from '~/stores-universal/context';
+import { useIsReadOnlyUser } from '~/states/context';
+import { useIsRomUserAllowedToComment } from '~/stores-universal/context';
 
 import { NotAvailable } from './NotAvailable';
 
@@ -10,7 +11,7 @@ export const NotAvailableForReadOnlyUser: React.FC<{
   children: JSX.Element
 }> = React.memo(({ children }) => {
   const { t } = useTranslation();
-  const { data: isReadOnlyUser } = useIsReadOnlyUser();
+  const [isReadOnlyUser] = useIsReadOnlyUser();
 
   const isDisabled = !!isReadOnlyUser;
   const title = t('Not available for read only user');
@@ -31,7 +32,7 @@ export const NotAvailableIfReadOnlyUserNotAllowedToComment: React.FC<{
   children: JSX.Element
 }> = React.memo(({ children }) => {
   const { t } = useTranslation();
-  const { data: isReadOnlyUser } = useIsReadOnlyUser();
+  const [isReadOnlyUser] = useIsReadOnlyUser();
 
   const { data: isRomUserAllowedToComment } = useIsRomUserAllowedToComment();
 

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

@@ -6,8 +6,9 @@ import {
   Modal, ModalBody, ModalHeader,
 } from 'reactstrap';
 
+import { useIsGuestUser, useIsReadOnlyUser } from '~/states/context';
 import {
-  useDisableLinkSharing, useIsGuestUser, useIsReadOnlyUser, useIsSharedUser,
+  useDisableLinkSharing, useIsSharedUser,
 } from '~/stores-universal/context';
 import { usePageAccessoriesModal, PageAccessoriesModalContents } from '~/stores/modal';
 import { useIsDeviceLargerThanLg } from '~/stores/ui';
@@ -33,8 +34,8 @@ export const PageAccessoriesModal = (): JSX.Element => {
   const [isWindowExpanded, setIsWindowExpanded] = useState(false);
 
   const { data: isSharedUser } = useIsSharedUser();
-  const { data: isGuestUser } = useIsGuestUser();
-  const { data: isReadOnlyUser } = useIsReadOnlyUser();
+  const [isGuestUser] = useIsGuestUser();
+  const [isReadOnlyUser] = useIsReadOnlyUser();
   const { data: isLinkSharingDisabled } = useDisableLinkSharing();
   const { data: isDeviceLargerThanLg } = useIsDeviceLargerThanLg();
 

+ 3 - 3
apps/app/src/client/components/PageAccessoriesModal/PageAttachment.tsx

@@ -5,8 +5,8 @@ import React, {
 import type { IAttachmentHasId } from '@growi/core';
 import { LoadingSpinner } from '@growi/ui/dist/components';
 
+import { useIsGuestUser, useIsReadOnlyUser } from '~/states/context';
 import { useCurrentPageData, useCurrentPageId } from '~/states/page';
-import { useIsGuestUser, useIsReadOnlyUser } from '~/stores-universal/context';
 import { useSWRxAttachments } from '~/stores/attachment';
 import { useDeleteAttachmentModal } from '~/stores/modal';
 
@@ -23,8 +23,8 @@ const PageAttachment = (): JSX.Element => {
   const [pageId] = useCurrentPageId();
   const [currentPage] = useCurrentPageData();
 
-  const { data: isGuestUser } = useIsGuestUser();
-  const { data: isReadOnlyUser } = useIsReadOnlyUser();
+  const [isGuestUser] = useIsGuestUser();
+  const [isReadOnlyUser] = useIsReadOnlyUser();
 
   const isPageAttachmentDisabled = !!isGuestUser || !!isReadOnlyUser;
 

+ 2 - 2
apps/app/src/client/components/PageControls/BookmarkButtons.tsx

@@ -8,7 +8,7 @@ import Popover from 'reactstrap/esm/Popover';
 import PopoverBody from 'reactstrap/esm/PopoverBody';
 import UncontrolledTooltip from 'reactstrap/esm/UncontrolledTooltip';
 
-import { useIsGuestUser } from '~/stores-universal/context';
+import { useIsGuestUser } from '~/states/context';
 import { useSWRxBookmarkedUsers } from '~/stores/bookmark';
 
 import { BookmarkFolderMenu } from '../Bookmarks/BookmarkFolderMenu';
@@ -32,7 +32,7 @@ export const BookmarkButtons: FC<Props> = (props: Props) => {
   const [isBookmarkFolderMenuOpen, setBookmarkFolderMenuOpen] = useState(false);
   const [isBookmarkUsersPopoverOpen, setBookmarkUsersPopoverOpen] = useState(false);
 
-  const { data: isGuestUser } = useIsGuestUser();
+  const [isGuestUser] = useIsGuestUser();
 
   const { data: bookmarkedUsers, isLoading: isLoadingBookmarkedUsers } = useSWRxBookmarkedUsers(isBookmarkUsersPopoverOpen ? pageId : null);
 

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

@@ -18,9 +18,10 @@ import {
 } from '~/client/services/page-operation';
 import { toastError } from '~/client/util/toastr';
 import OpenDefaultAiAssistantButton from '~/features/openai/client/components/AiAssistant/OpenDefaultAiAssistantButton';
+import { useIsGuestUser, useIsReadOnlyUser } from '~/states/context';
 import { useCurrentPagePath } from '~/states/page';
 import {
-  useIsGuestUser, useIsReadOnlyUser, useIsSearchPage, useIsUsersHomepageDeletionEnabled,
+  useIsSearchPage, useIsUsersHomepageDeletionEnabled,
 } from '~/stores-universal/context';
 import {
   EditorMode, useEditorMode,
@@ -133,8 +134,8 @@ const PageControlsSubstance = (props: PageControlsSubstanceProps): JSX.Element =
     onClickEditTagsButton, onClickDuplicateMenuItem, onClickRenameMenuItem, onClickDeleteMenuItem, onClickSwitchContentWidth,
   } = props;
 
-  const { data: isGuestUser } = useIsGuestUser();
-  const { data: isReadOnlyUser } = useIsReadOnlyUser();
+  const [isGuestUser] = useIsGuestUser();
+  const [isReadOnlyUser] = useIsReadOnlyUser();
   const { data: editorMode } = useEditorMode();
   const { data: isDeviceLargerThanMd } = useIsDeviceLargerThanMd();
   const { data: isSearchPage } = useIsSearchPage();

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

@@ -10,7 +10,8 @@ import { debounce } from 'throttle-debounce';
 
 import { apiv3Get, apiv3Post } from '~/client/util/apiv3-client';
 import { toastError } from '~/client/util/toastr';
-import { useIsSearchServiceReachable, useSiteUrl } from '~/stores-universal/context';
+import { useSiteUrl } from '~/states/global';
+import { useIsSearchServiceReachable } from '~/stores-universal/context';
 import { usePageDuplicateModal } from '~/stores/modal';
 
 import DuplicatePathsTable from './DuplicatedPathsTable';
@@ -21,7 +22,7 @@ import PagePathAutoComplete from './PagePathAutoComplete';
 const PageDuplicateModal = (): JSX.Element => {
   const { t } = useTranslation();
 
-  const { data: siteUrl } = useSiteUrl();
+  const [siteUrl] = useSiteUrl();
   const { data: isReachable } = useIsSearchServiceReachable();
 
   const { data: duplicateModalData, close: closeDuplicateModal } = usePageDuplicateModal();

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

@@ -12,7 +12,8 @@ import { debounce } from 'throttle-debounce';
 
 import { apiv3Get, apiv3Put } from '~/client/util/apiv3-client';
 import { toastError } from '~/client/util/toastr';
-import { useSiteUrl, useIsSearchServiceReachable } from '~/stores-universal/context';
+import { useSiteUrl } from '~/states/global';
+import { useIsSearchServiceReachable } from '~/stores-universal/context';
 import { usePageRenameModal } from '~/stores/modal';
 import { useSWRxPageInfo } from '~/stores/page';
 
@@ -29,7 +30,7 @@ const PageRenameModal = (): JSX.Element => {
   const { t } = useTranslation();
 
   const { isUsersHomepage } = pagePathUtils;
-  const { data: siteUrl } = useSiteUrl();
+  const [siteUrl] = useSiteUrl();
   const { data: renameModalData, close: closeRenameModal } = usePageRenameModal();
   const { data: isReachable } = useIsSearchServiceReachable();
 

+ 3 - 3
apps/app/src/client/components/PageSelectModal/PageSelectModal.tsx

@@ -13,8 +13,8 @@ import {
 import SimpleBar from 'simplebar-react';
 
 import type { IPageForItem } from '~/interfaces/page';
+import { useIsGuestUser, useIsReadOnlyUser } from '~/states/context';
 import { useCurrentPageData } from '~/states/page';
-import { useIsGuestUser, useIsReadOnlyUser } from '~/stores-universal/context';
 import { usePageSelectModal } from '~/stores/modal';
 
 import { ItemsTree } from '../ItemsTree';
@@ -33,8 +33,8 @@ const PageSelectModalSubstance: FC = () => {
 
   const { t } = useTranslation();
 
-  const { data: isGuestUser } = useIsGuestUser();
-  const { data: isReadOnlyUser } = useIsReadOnlyUser();
+  const [isGuestUser] = useIsGuestUser();
+  const [isReadOnlyUser] = useIsReadOnlyUser();
   const [currentPage] = useCurrentPageData();
   const { data: pageSelectModalData } = usePageSelectModal();
 

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

@@ -8,7 +8,8 @@ import { useTranslation } from 'next-i18next';
 import dynamic from 'next/dynamic';
 import { scroller } from 'react-scroll';
 
-import { useIsGuestUser, useIsReadOnlyUser, useShowPageSideAuthors } from '~/stores-universal/context';
+import { useIsGuestUser, useIsReadOnlyUser } from '~/states/context';
+import { useShowPageSideAuthors } from '~/stores-universal/context';
 import { useDescendantsPageListModal, useTagEditModal } from '~/stores/modal';
 import { useSWRxPageInfo, useSWRxTagsInfo } from '~/stores/page';
 import { useIsAbleToShowTagLabel } from '~/stores/ui';
@@ -43,8 +44,8 @@ const Tags = (props: TagsProps): JSX.Element => {
   const { data: tagsInfoData } = useSWRxTagsInfo(pageId, { suspense: true });
 
   const { data: showTagLabel } = useIsAbleToShowTagLabel();
-  const { data: isGuestUser } = useIsGuestUser();
-  const { data: isReadOnlyUser } = useIsReadOnlyUser();
+  const [isGuestUser] = useIsGuestUser();
+  const [isReadOnlyUser] = useIsReadOnlyUser();
   const { open: openTagEditModal } = useTagEditModal();
 
   const onClickEditTagsButton = useCallback(() => {

+ 3 - 3
apps/app/src/client/components/PageStatusAlert.tsx

@@ -2,8 +2,8 @@ import React, { useCallback, type JSX } from 'react';
 
 import { useTranslation } from 'next-i18next';
 
+import { useIsGuestUser, useIsReadOnlyUser } from '~/states/context';
 import { useCurrentPageData, useRemoteRevisionId } from '~/states/page';
-import { useIsGuestUser, useIsReadOnlyUser } from '~/stores-universal/context';
 import { useEditorMode } from '~/stores-universal/ui';
 import { usePageStatusAlert } from '~/stores/alert';
 import { useRemoteRevisionLastUpdateUser } from '~/stores/remote-latest-page';
@@ -16,8 +16,8 @@ export const PageStatusAlert = (): JSX.Element => {
   const { t } = useTranslation();
 
   const { data: editorMode } = useEditorMode();
-  const { data: isGuestUser } = useIsGuestUser();
-  const { data: isReadOnlyUser } = useIsReadOnlyUser();
+  const [isGuestUser] = useIsGuestUser();
+  const [isReadOnlyUser] = useIsReadOnlyUser();
   const { data: pageStatusAlertData } = usePageStatusAlert();
   const [remoteRevisionId] = useRemoteRevisionId();
   const { data: remoteRevisionLastUpdateUser } = useRemoteRevisionLastUpdateUser();

+ 5 - 3
apps/app/src/client/components/ReactMarkdownComponents/DrawioViewerWithEditButton.tsx

@@ -11,13 +11,15 @@ import { useTranslation } from 'next-i18next';
 
 import { useIsRevisionOutdated } from '~/states/page';
 import {
-  useIsGuestUser, useIsReadOnlyUser, useIsSharedUser, useShareLinkId,
+  useIsSharedUser, useShareLinkId,
 } from '~/stores-universal/context';
 import { useCurrentPageYjsData } from '~/stores/yjs';
 
 import '@growi/remark-drawio/dist/style.css';
 import styles from './DrawioViewerWithEditButton.module.scss';
 
+import { useIsGuestUser, useIsReadOnlyUser } from '~/states/context';
+
 
 declare global {
   // eslint-disable-next-line vars-on-top, no-var
@@ -30,8 +32,8 @@ export const DrawioViewerWithEditButton = React.memo((props: DrawioViewerProps):
 
   const { bol, eol } = props;
 
-  const { data: isGuestUser } = useIsGuestUser();
-  const { data: isReadOnlyUser } = useIsReadOnlyUser();
+  const [isGuestUser] = useIsGuestUser();
+  const [isReadOnlyUser] = useIsReadOnlyUser();
   const { data: isSharedUser } = useIsSharedUser();
   const { data: shareLinkId } = useShareLinkId();
   const [isRevisionOutdated] = useIsRevisionOutdated();

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

@@ -8,8 +8,9 @@ import type { Element } from 'hast';
 import { useRouter } from 'next/router';
 
 import { NextLink } from '~/components/ReactMarkdownComponents/NextLink';
+import { useIsGuestUser, useIsReadOnlyUser } from '~/states/context';
 import {
-  useIsGuestUser, useIsReadOnlyUser, useIsSharedUser, useShareLinkId,
+  useIsSharedUser, useShareLinkId,
 } from '~/stores-universal/context';
 import { useCurrentPageYjsData } from '~/stores/yjs';
 import loggerFactory from '~/utils/logger';
@@ -64,8 +65,8 @@ export const Header = (props: HeaderProps): JSX.Element => {
     node, id, children,
   } = props;
 
-  const { data: isGuestUser } = useIsGuestUser();
-  const { data: isReadOnlyUser } = useIsReadOnlyUser();
+  const [isGuestUser] = useIsGuestUser();
+  const [isReadOnlyUser] = useIsReadOnlyUser();
   const { data: isSharedUser } = useIsSharedUser();
   const { data: shareLinkId } = useShareLinkId();
   const { data: currentPageYjsData, isLoading: isLoadingCurrentPageYjsData } = useCurrentPageYjsData();

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

@@ -4,9 +4,10 @@ import type EventEmitter from 'events';
 
 import type { Element } from 'hast';
 
+import { useIsGuestUser, useIsReadOnlyUser } from '~/states/context';
 import { useIsRevisionOutdated } from '~/states/page';
 import {
-  useIsGuestUser, useIsReadOnlyUser, useIsSharedUser, useShareLinkId,
+  useIsSharedUser, useShareLinkId,
 } from '~/stores-universal/context';
 import { useCurrentPageYjsData } from '~/stores/yjs';
 
@@ -26,8 +27,8 @@ type TableWithEditButtonProps = {
 const TableWithEditButtonNoMemorized = (props: TableWithEditButtonProps): JSX.Element => {
   const { children, node, className } = props;
 
-  const { data: isGuestUser } = useIsGuestUser();
-  const { data: isReadOnlyUser } = useIsReadOnlyUser();
+  const [isGuestUser] = useIsGuestUser();
+  const [isReadOnlyUser] = useIsReadOnlyUser();
   const { data: isSharedUser } = useIsSharedUser();
   const { data: shareLinkId } = useShareLinkId();
   const [isRevisionOutdated] = useIsRevisionOutdated();

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

@@ -11,8 +11,9 @@ import type { ISelectableAll } from '~/client/interfaces/selectable-all';
 import { toastSuccess } from '~/client/util/toastr';
 import type { IFormattedSearchResult, IPageWithSearchMeta } from '~/interfaces/search';
 import type { OnDeletedFunction } from '~/interfaces/ui';
+import { useIsGuestUser, useIsReadOnlyUser } from '~/states/context';
 import {
-  useIsGuestUser, useIsReadOnlyUser, useIsSearchServiceConfigured, useIsSearchServiceReachable,
+  useIsSearchServiceConfigured, useIsSearchServiceReachable,
 } from '~/stores-universal/context';
 import { usePageDeleteModal } from '~/stores/modal';
 import { mutatePageTree, mutateRecentlyUpdated } from '~/stores/page-listing';
@@ -65,8 +66,8 @@ const SearchPageBaseSubstance: ForwardRefRenderFunction<ISelectableAll & IReturn
 
   const searchResultListRef = useRef<ISelectableAll|null>(null);
 
-  const { data: isGuestUser } = useIsGuestUser();
-  const { data: isReadOnlyUser } = useIsReadOnlyUser();
+  const [isGuestUser] = useIsGuestUser();
+  const [isReadOnlyUser] = useIsReadOnlyUser();
   const { data: isSearchServiceConfigured } = useIsSearchServiceConfigured();
   const { data: isSearchServiceReachable } = useIsSearchServiceReachable();
 

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

@@ -11,7 +11,7 @@ import { useTranslation } from 'next-i18next';
 import type { ISelectable, ISelectableAll } from '~/client/interfaces/selectable-all';
 import { toastSuccess } from '~/client/util/toastr';
 import type { IPageSearchMeta, IPageWithSearchMeta } from '~/interfaces/search';
-import { useIsGuestUser, useIsReadOnlyUser } from '~/stores-universal/context';
+import { useIsGuestUser, useIsReadOnlyUser } from '~/states/context';
 import { mutatePageTree, useSWRxPageInfoForList, mutateRecentlyUpdated } from '~/stores/page-listing';
 import { mutateSearching } from '~/stores/search';
 
@@ -39,8 +39,8 @@ const SearchResultListSubstance: ForwardRefRenderFunction<ISelectableAll, Props>
     .filter(page => (page.meta?.elasticSearchResult?.snippet?.length ?? 0) === 0)
     .map(page => page.data._id);
 
-  const { data: isGuestUser } = useIsGuestUser();
-  const { data: isReadOnlyUser } = useIsReadOnlyUser();
+  const [isGuestUser] = useIsGuestUser();
+  const [isReadOnlyUser] = useIsReadOnlyUser();
   const { data: idToPageInfo } = useSWRxPageInfoForList(pageIdsWithNoSnippet, null, true, true);
 
   const itemsRef = useRef<(ISelectable|null)[]>([]);

+ 4 - 4
apps/app/src/client/components/Sidebar/AppTitle/AppTitle.tsx

@@ -3,7 +3,7 @@ import React, { memo, type JSX } from 'react';
 import Link from 'next/link';
 import { UncontrolledTooltip } from 'reactstrap';
 
-import { useAppTitle, useConfidential, useIsDefaultLogo } from '~/stores-universal/context';
+import { useAppTitle, useConfidential, useIsDefaultLogo } from '~/states/global';
 
 import { SidebarBrandLogo } from '../SidebarBrandLogo';
 
@@ -17,9 +17,9 @@ type Props = {
 
 const AppTitleSubstance = memo(({ className = '', hideAppTitle = false }: Props): JSX.Element => {
 
-  const { data: isDefaultLogo } = useIsDefaultLogo();
-  const { data: appTitle } = useAppTitle();
-  const { data: confidential } = useConfidential();
+  const [isDefaultLogo] = useIsDefaultLogo();
+  const [appTitle] = useAppTitle();
+  const [confidential] = useConfidential();
 
   return (
     <div className={`${styles['grw-app-title']} ${className} d-flex`}>

+ 2 - 2
apps/app/src/client/components/Sidebar/Bookmarks.tsx

@@ -3,13 +3,13 @@ import React, { type JSX } from 'react';
 
 import { useTranslation } from 'react-i18next';
 
-import { useIsGuestUser } from '~/stores-universal/context';
+import { useIsGuestUser } from '~/states/context';
 
 import { BookmarkContents } from './Bookmarks/BookmarkContents';
 
 export const Bookmarks = () : JSX.Element => {
   const { t } = useTranslation();
-  const { data: isGuestUser } = useIsGuestUser();
+  const [isGuestUser] = useIsGuestUser();
 
   return (
     <div className="px-3">

+ 3 - 3
apps/app/src/client/components/Sidebar/PageTree/PageTreeSubstance.tsx

@@ -5,8 +5,8 @@ import React, {
 import { useTranslation } from 'next-i18next';
 import { debounce } from 'throttle-debounce';
 
+import { useIsGuestUser, useIsReadOnlyUser } from '~/states/context';
 import { useCurrentPageId, useCurrentPagePath } from '~/states/page';
-import { useIsGuestUser, useIsReadOnlyUser } from '~/stores-universal/context';
 import {
   mutatePageTree, mutateRecentlyUpdated, useSWRxRootPage, useSWRxV5MigrationStatus,
 } from '~/stores/page-listing';
@@ -95,8 +95,8 @@ type PageTreeContentProps = {
 
 export const PageTreeContent = memo(({ isWipPageShown }: PageTreeContentProps) => {
 
-  const { data: isGuestUser } = useIsGuestUser();
-  const { data: isReadOnlyUser } = useIsReadOnlyUser();
+  const [isGuestUser] = useIsGuestUser();
+  const [isReadOnlyUser] = useIsReadOnlyUser();
   const [currentPath] = useCurrentPagePath();
   const [targetId] = useCurrentPageId();
 

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

@@ -2,8 +2,9 @@ import React, { memo, useMemo } from 'react';
 
 import { AiAssistant } from '~/features/openai/client/components/AiAssistant/Sidebar/AiAssistant';
 import { SidebarContentsType } from '~/interfaces/ui';
+import { useIsGuestUser } from '~/states/context';
 import { useSidebarMode, useCollapsedContentsOpened, useCurrentSidebarContents } from '~/states/ui/sidebar';
-import { useIsAiEnabled, useIsGuestUser } from '~/stores-universal/context';
+import { useIsAiEnabled } from '~/stores-universal/context';
 
 
 import { Bookmarks } from './Bookmarks';
@@ -18,7 +19,7 @@ import styles from './SidebarContents.module.scss';
 
 export const SidebarContents = memo(() => {
   const { isCollapsedMode } = useSidebarMode();
-  const { data: isGuestUser } = useIsGuestUser();
+  const [isGuestUser] = useIsGuestUser();
   const { data: isAiEnabled } = useIsAiEnabled();
 
   const [isCollapsedContentsOpened] = useCollapsedContentsOpened();

+ 4 - 2
apps/app/src/client/components/Sidebar/SidebarNav/PrimaryItems.tsx

@@ -3,13 +3,15 @@ import { memo } from 'react';
 import dynamic from 'next/dynamic';
 
 import { SidebarContentsType } from '~/interfaces/ui';
-import { useIsAiEnabled, useIsGuestUser } from '~/stores-universal/context';
+import { useIsGuestUser } from '~/states/context';
 import { useSidebarMode } from '~/states/ui/sidebar';
+import { useIsAiEnabled } from '~/stores-universal/context';
 
 import { PrimaryItem } from './PrimaryItem';
 
 import styles from './PrimaryItems.module.scss';
 
+
 // Do not SSR Socket.io to make it work
 const PrimaryItemForNotification = dynamic(
   () => import('../InAppNotification/PrimaryItemForNotification').then(mod => mod.PrimaryItemForNotification), { ssr: false },
@@ -24,7 +26,7 @@ export const PrimaryItems = memo((props: Props) => {
 
   const { sidebarMode } = useSidebarMode();
   const { data: isAiEnabled } = useIsAiEnabled();
-  const { data: isGuestUser } = useIsGuestUser();
+  const [isGuestUser] = useIsGuestUser();
 
   if (sidebarMode == null) {
     return <></>;

+ 5 - 4
apps/app/src/client/components/Sidebar/SidebarNav/SecondaryItems.tsx

@@ -4,7 +4,8 @@ import { memo } from 'react';
 import dynamic from 'next/dynamic';
 import Link from 'next/link';
 
-import { useIsGuestUser, useGrowiCloudUri, useIsAdmin } from '~/stores-universal/context';
+import { useIsAdmin, useIsGuestUser } from '~/states/context';
+import { useGrowiCloudUri } from '~/states/global';
 
 import { SkeletonItem } from './SkeletonItem';
 
@@ -41,9 +42,9 @@ const SecondaryItem: FC<SecondaryItemProps> = (props: SecondaryItemProps) => {
 
 export const SecondaryItems: FC = memo(() => {
 
-  const { data: isAdmin } = useIsAdmin();
-  const { data: growiCloudUri } = useGrowiCloudUri();
-  const { data: isGuestUser } = useIsGuestUser();
+  const [isAdmin] = useIsAdmin();
+  const [growiCloudUri] = useGrowiCloudUri();
+  const [isGuestUser] = useIsGuestUser();
 
   return (
     <div className={styles['grw-secondary-items']}>

+ 3 - 3
apps/app/src/client/components/Sidebar/SidebarNav/SidebarNav.tsx

@@ -1,7 +1,7 @@
 import React, { memo, useMemo } from 'react';
 
 import type { SidebarContentsType } from '~/interfaces/ui';
-import { useIsGuestUser, useIsReadOnlyUser } from '~/stores-universal/context';
+import { useIsGuestUser, useIsReadOnlyUser } from '~/states/context';
 
 import { NotAvailableForReadOnlyUser } from '../../NotAvailableForReadOnlyUser';
 import { PageCreateButton } from '../PageCreateButton';
@@ -18,8 +18,8 @@ export type SidebarNavProps = {
 export const SidebarNav = memo((props: SidebarNavProps) => {
   const { onPrimaryItemHover } = props;
 
-  const { data: isGuestUser } = useIsGuestUser();
-  const { data: isReadOnlyUser } = useIsReadOnlyUser();
+  const [isGuestUser] = useIsGuestUser();
+  const [isReadOnlyUser] = useIsReadOnlyUser();
 
   const renderedPageCreateButton = useMemo(() => {
     if (isGuestUser) {

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

@@ -1,6 +1,6 @@
 import React, { type JSX } from 'react';
 
-import { useGrowiVersion } from '~/stores-universal/context';
+import { useGrowiVersion } from '~/states/global';
 import { useShortcutsModal } from '~/stores/modal';
 
 import styles from './SystemVersion.module.scss';
@@ -15,7 +15,7 @@ const SystemVersion = (props: Props): JSX.Element => {
 
   const { open: openShortcutsModal } = useShortcutsModal();
 
-  const { data: growiVersion } = useGrowiVersion();
+  const [growiVersion] = useGrowiVersion();
   // add classes to cmd-key by OS
   const platform = window.navigator.platform.toLowerCase();
   const isMac = (platform.indexOf('mac') > -1);

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

@@ -6,7 +6,8 @@ import dynamic from 'next/dynamic';
 
 import { toastSuccess } from '~/client/util/toastr';
 import type { IPagingResult } from '~/interfaces/paging-result';
-import { useIsReadOnlyUser, useShowPageLimitationXL } from '~/stores-universal/context';
+import { useIsReadOnlyUser } from '~/states/context';
+import { useShowPageLimitationXL } from '~/stores-universal/context';
 import { useEmptyTrashModal } from '~/stores/modal';
 import { useSWRxPageInfoForList, useSWRxPageList } from '~/stores/page-listing';
 
@@ -26,7 +27,7 @@ const useEmptyTrashButton = () => {
 
   const { t } = useTranslation();
   const { data: limit } = useShowPageLimitationXL();
-  const { data: isReadOnlyUser } = useIsReadOnlyUser();
+  const [isReadOnlyUser] = useIsReadOnlyUser();
   const { data: pagingResult, mutate: mutatePageLists } = useSWRxPageList('/trash', 1, limit);
   const { open: openEmptyTrashModal } = useEmptyTrashModal();
 

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

@@ -5,8 +5,8 @@ import { SubscriptionStatusType } from '@growi/core';
 import urljoin from 'url-join';
 
 import type { SyncLatestRevisionBody } from '~/interfaces/yjs';
+import { useIsGuestUser } from '~/states/context';
 import { useCurrentPageId, useFetchCurrentPage } from '~/states/page';
-import { useIsGuestUser } from '~/stores-universal/context';
 import { useEditingMarkdown, usePageTagsForEditors } from '~/stores/editor';
 import {
   useSWRxApplicableGrant, useSWRxTagsInfo,
@@ -105,7 +105,7 @@ export const useUpdateStateAfterSave = (pageId: string|undefined|null, opts?: Up
   const { mutate: mutateTagsInfo } = useSWRxTagsInfo(pageId);
   const { sync: syncTagsInfoForEditor } = usePageTagsForEditors(pageId);
   const { mutate: mutateEditingMarkdown } = useEditingMarkdown();
-  const { data: isGuestUser } = useIsGuestUser();
+  const [isGuestUser] = useIsGuestUser();
   const { mutate: mutateCurrentGrantData } = useSWRxCurrentGrantData(isGuestUser ? null : pageId);
   const { mutate: mutateApplicableGrant } = useSWRxApplicableGrant(isGuestUser ? null : pageId);
 

+ 2 - 2
apps/app/src/components/Layout/NoLoginLayout.tsx

@@ -3,7 +3,7 @@ import React from 'react';
 
 import Image from 'next/image';
 
-import { useAppTitle } from '~/stores-universal/context';
+import { useAppTitle } from '~/states/global';
 
 import GrowiLogo from '../Common/GrowiLogo';
 
@@ -21,7 +21,7 @@ export const NoLoginLayout = ({
   children, className,
 }: Props): JSX.Element => {
 
-  const { data: appTitle } = useAppTitle();
+  const [appTitle] = useAppTitle();
 
   const classNames: string[] = [''];
   if (className != null) {

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

@@ -4,7 +4,7 @@ import { pagePathUtils } from '@growi/core/dist/utils';
 import type { LinkProps } from 'next/link';
 import Link from 'next/link';
 
-import { useSiteUrl } from '~/stores-universal/context';
+import { useSiteUrl } from '~/states/global';
 import loggerFactory from '~/utils/logger';
 
 
@@ -50,7 +50,7 @@ export const NextLink = (props: Props): JSX.Element => {
     id, href, children, className, onClick, ...rest
   } = props;
 
-  const { data: siteUrl } = useSiteUrl();
+  const [siteUrl] = useSiteUrl();
 
   if (href == null) {
     return <a className={className}>{children}</a>;

+ 2 - 2
apps/app/src/features/openai/client/components/AiAssistant/Sidebar/AiAssistant.tsx

@@ -4,13 +4,13 @@ import dynamic from 'next/dynamic';
 import { useTranslation } from 'react-i18next';
 
 import ItemsTreeContentSkeleton from '~/client/components/ItemsTree/ItemsTreeContentSkeleton';
-import { useIsGuestUser } from '~/stores-universal/context';
+import { useIsGuestUser } from '~/states/context';
 
 const AiAssistantContent = dynamic(() => import('./AiAssistantSubstance').then(mod => mod.AiAssistantContent), { ssr: false });
 
 export const AiAssistant = (): JSX.Element => {
   const { t } = useTranslation();
-  const { data: isGuestUser } = useIsGuestUser();
+  const [isGuestUser] = useIsGuestUser();
 
   return (
     <div className="px-3">

+ 3 - 3
apps/app/src/stores-universal/use-next-themes.tsx

@@ -3,7 +3,7 @@ import { isClient } from '@growi/core/dist/utils';
 import { ThemeProvider, useTheme } from 'next-themes';
 import type { ThemeProviderProps, UseThemeProps } from 'next-themes/dist/types';
 
-import { useForcedColorScheme } from './context';
+import { useForcedColorScheme } from '~/states/global';
 
 export const Themes = {
   ...ColorScheme,
@@ -15,7 +15,7 @@ export type Themes = typeof Themes[keyof typeof Themes];
 const ATTRIBUTE = 'data-bs-theme';
 
 export const NextThemesProvider: React.FC<ThemeProviderProps> = (props) => {
-  const { data: forcedColorScheme } = useForcedColorScheme();
+  const [forcedColorScheme] = useForcedColorScheme();
 
   return <ThemeProvider {...props} forcedTheme={forcedColorScheme} attribute={ATTRIBUTE} />;
 };
@@ -31,7 +31,7 @@ type UseThemeExtendedProps = Omit<UseThemeProps, 'theme'|'resolvedTheme'> & {
 
 export const useNextThemes = (): UseThemeProps & UseThemeExtendedProps => {
   const props = useTheme();
-  const { data: forcedColorScheme } = useForcedColorScheme();
+  const [forcedColorScheme] = useForcedColorScheme();
 
   const resolvedTheme = forcedColorScheme ?? props.resolvedTheme as ColorScheme;
 

+ 6 - 6
apps/app/src/stores/editor.tsx

@@ -9,9 +9,9 @@ import useSWRImmutable from 'swr/immutable';
 import { apiGet } from '~/client/util/apiv1-client';
 import { apiv3Get, apiv3Put } from '~/client/util/apiv3-client';
 import type { SlackChannels } from '~/interfaces/user-trigger-notification';
-import {
-  useCurrentUser, useDefaultIndentSize, useIsGuestUser, useIsReadOnlyUser,
-} from '~/stores-universal/context';
+import { useIsGuestUser, useIsReadOnlyUser } from '~/states/context';
+import { useCurrentUser } from '~/states/global';
+import { useDefaultIndentSize } from '~/stores-universal/context';
 
 // import { localStorageMiddleware } from './middlewares/sync-to-storage';
 import { useSWRxTagsInfo } from './page';
@@ -35,9 +35,9 @@ type EditorSettingsOperation = {
 //   - Unabling localStorageMiddleware occurrs a flickering problem when loading theme.
 //   - see: https://github.com/weseek/growi/pull/6781#discussion_r1000285786
 export const useEditorSettings = (): SWRResponseWithUtils<EditorSettingsOperation, EditorSettings, Error> => {
-  const { data: currentUser } = useCurrentUser();
-  const { data: isGuestUser } = useIsGuestUser();
-  const { data: isReadOnlyUser } = useIsReadOnlyUser();
+  const [currentUser] = useCurrentUser();
+  const [isGuestUser] = useIsGuestUser();
+  const [isReadOnlyUser] = useIsReadOnlyUser();
 
   const swrResult = useSWRImmutable(
     (isGuestUser || isReadOnlyUser) ? null : ['/personal-setting/editor-settings', currentUser?.username],

+ 6 - 7
apps/app/src/stores/page.tsx

@@ -18,10 +18,9 @@ import { apiGet } from '~/client/util/apiv1-client';
 import { apiv3Get } from '~/client/util/apiv3-client';
 import type { IPagePathWithDescendantCount } from '~/interfaces/page';
 import type { IRecordApplicableGrant, IResCurrentGrantData } from '~/interfaces/page-grant';
+import { useIsGuestUser, useIsReadOnlyUser } from '~/states/context';
 import { usePageNotFound } from '~/states/page';
-import {
-  useShareLinkId, useIsGuestUser, useIsReadOnlyUser,
-} from '~/stores-universal/context';
+import { useShareLinkId } from '~/stores-universal/context';
 import type { AxiosResponse } from '~/utils/axios';
 
 import type { IPageTagsInfo } from '../interfaces/tag';
@@ -84,7 +83,7 @@ export const useSWRxPageInfo = (
 ): SWRResponse<IPageInfo | IPageInfoForOperation> => {
 
   // Cache remains from guest mode when logging in via the Login lead, so add 'isGuestUser' key
-  const { data: isGuestUser } = useIsGuestUser();
+  const [isGuestUser] = useIsGuestUser();
 
   // assign null if shareLinkId is undefined in order to identify SWR key only by pageId
   const fixedShareLinkId = shareLinkId ?? null;
@@ -118,7 +117,7 @@ export const useSWRMUTxPageInfo = (
 ): SWRMutationResponse<IPageInfo | IPageInfoForOperation> => {
 
   // Cache remains from guest mode when logging in via the Login lead, so add 'isGuestUser' key
-  const { data: isGuestUser } = useIsGuestUser();
+  const [isGuestUser] = useIsGuestUser();
 
   // assign null if shareLinkId is undefined in order to identify SWR key only by pageId
   const fixedShareLinkId = shareLinkId ?? null;
@@ -174,8 +173,8 @@ export const useSWRxCurrentGrantData = (
     pageId: string | null | undefined,
 ): SWRResponse<IResCurrentGrantData, Error> => {
 
-  const { data: isGuestUser } = useIsGuestUser();
-  const { data: isReadOnlyUser } = useIsReadOnlyUser();
+  const [isGuestUser] = useIsGuestUser();
+  const [isReadOnlyUser] = useIsReadOnlyUser();
   const [isNotFound] = usePageNotFound();
 
   const key = !isGuestUser && !isReadOnlyUser && !isNotFound && pageId != null

+ 2 - 2
apps/app/src/stores/personal-settings.tsx

@@ -4,7 +4,7 @@ import type { SWRConfiguration, SWRResponse } from 'swr';
 import useSWR from 'swr';
 
 import type { IExternalAuthProviderType } from '~/interfaces/external-auth-provider';
-import { useIsGuestUser } from '~/stores-universal/context';
+import { useIsGuestUser } from '~/states/context';
 import loggerFactory from '~/utils/logger';
 
 import { apiv3Get, apiv3Put } from '../client/util/apiv3-client';
@@ -16,7 +16,7 @@ const logger = loggerFactory('growi:stores:personal-settings');
 
 
 export const useSWRxPersonalSettings = (config?: SWRConfiguration): SWRResponse<IUser, Error> => {
-  const { data: isGuestUser } = useIsGuestUser();
+  const [isGuestUser] = useIsGuestUser();
 
   const key = !isGuestUser ? '/personal-setting' : null;