import type { FC } from 'react'; import React from 'react'; import { DevidedPagePath } from '@growi/core/dist/models'; import { pagePathUtils } from '@growi/core/dist/utils'; import dynamic from 'next/dynamic'; import Sticky from 'react-stickynode'; import { useIsNotFound } from '~/stores/page'; import LinkedPagePath from '../../../models/linked-page-path'; import { PagePathHierarchicalLink } from '../PagePathHierarchicalLink'; import { CollapsedParentsDropdown } from '../PagePathHierarchicalLink/CollapsedParentsDropdown'; import styles from './PagePathNav.module.scss'; const { isTrashPage } = pagePathUtils; type Props = { pagePath: string, pageId?: string | null, isWipPage?: boolean, isSingleLineMode?: boolean, isCollapseParents?: boolean, formerLinkClassName?: string, latterLinkClassName?: string, } const CopyDropdown = dynamic(() => import('../CopyDropdown').then(mod => mod.CopyDropdown), { ssr: false }); const RootSlash = (): JSX.Element => { return /; }; const Separator = (): JSX.Element => { return /; }; export const PagePathNav: FC = (props: Props) => { const { pageId, pagePath, isWipPage, isSingleLineMode, isCollapseParents, formerLinkClassName, latterLinkClassName, } = props; const dPagePath = new DevidedPagePath(pagePath, false, true); const { data: isNotFound } = useIsNotFound(); const isInTrash = isTrashPage(pagePath); let formerLink; let latterLink; // one line if (dPagePath.isRoot || dPagePath.isFormerRoot || (!isCollapseParents && isSingleLineMode)) { const linkedPagePath = new LinkedPagePath(pagePath); latterLink = ; } // collapse parents else if (isCollapseParents) { const linkedPagePathFormer = new LinkedPagePath(dPagePath.former); const linkedPagePathLatter = new LinkedPagePath(dPagePath.latter); latterLink = ( <> ); } // two line else { const linkedPagePathFormer = new LinkedPagePath(dPagePath.former); const linkedPagePathLatter = new LinkedPagePath(dPagePath.latter); formerLink = ( <> ); latterLink = ( <> ); } const copyDropdownId = `copydropdown-${pageId}`; return (
{formerLink}

{latterLink}

{ pageId != null && !isNotFound && (
{ isWipPage && ( WIP )}
) }
); }; type PagePathNavStickyProps = Omit; export const PagePathNavSticky = (props: PagePathNavStickyProps): JSX.Element => { return ( // Controlling pointer-events // 1. disable pointer-events with 'pe-none' {({ status }: { status: boolean }) => { const isCollapseParents = status === Sticky.STATUS_FIXED; return ( // Controlling pointer-events // 2. enable pointer-events with 'pe-auto' only against the children // which width is minimized by 'd-inline-block'
); }}
); };