import React, { memo, useCallback } from 'react'; import { useTranslation } from 'next-i18next'; import { ItemsTree } from '~/features/page-tree/components'; import { usePageTreeInformationUpdate } from '~/features/page-tree/states/page-tree-update'; import { useIsGuestUser, useIsReadOnlyUser } from '~/states/context'; import { useCurrentPageId, useCurrentPagePath } from '~/states/page'; import { useSidebarScrollerElem } from '~/states/ui/sidebar'; import { mutatePageTree, mutateRecentlyUpdated, useSWRxRootPage, useSWRxV5MigrationStatus, } from '~/stores/page-listing'; import loggerFactory from '~/utils/logger'; import { PageTreeItem, pageTreeItemSize } from '../PageTreeItem'; import { SidebarHeaderReloadButton } from '../SidebarHeaderReloadButton'; import { PrivateLegacyPagesLink } from './PrivateLegacyPagesLink'; const logger = loggerFactory('growi:cli:PageTreeSubstance'); type HeaderProps = { isWipPageShown: boolean; onWipPageShownChange?: () => void; }; export const PageTreeHeader = memo( ({ isWipPageShown, onWipPageShownChange }: HeaderProps) => { const { t } = useTranslation(); const { mutate: mutateRootPage } = useSWRxRootPage({ suspense: true }); useSWRxV5MigrationStatus({ suspense: true }); const { notifyUpdateAllTrees } = usePageTreeInformationUpdate(); const mutate = useCallback(() => { mutateRootPage(); mutatePageTree(); mutateRecentlyUpdated(); // Notify headless-tree to rebuild with fresh data notifyUpdateAllTrees(); }, [mutateRootPage, notifyUpdateAllTrees]); return ( <> mutate()} />
); }, ); PageTreeHeader.displayName = 'PageTreeHeader'; const PageTreeUnavailable = () => { const { t } = useTranslation(); return (

{t('v5_page_migration.page_tree_not_avaliable')}

{t('v5_page_migration.go_to_settings')}
); }; type PageTreeContentProps = { isWipPageShown: boolean; }; export const PageTreeContent = memo( ({ isWipPageShown }: PageTreeContentProps) => { const isGuestUser = useIsGuestUser(); const isReadOnlyUser = useIsReadOnlyUser(); const currentPath = useCurrentPagePath(); const targetId = useCurrentPageId(); const { data: migrationStatus } = useSWRxV5MigrationStatus({ suspense: true, }); const targetPathOrId = targetId || currentPath; const path = currentPath || '/'; const sidebarScrollerElem = useSidebarScrollerElem(); const estimateTreeItemSize = useCallback(() => pageTreeItemSize, []); if (!migrationStatus?.isV5Compatible) { return ; } /* * dependencies */ if (isGuestUser == null) { return null; } return (
{!isGuestUser && !isReadOnlyUser && migrationStatus?.migratablePagesCount != null && migrationStatus.migratablePagesCount !== 0 && (
)}
); }, ); PageTreeContent.displayName = 'PageTreeContent';