import type { FC } from 'react'; import { useMemo, useState, useEffect } from 'react'; import type { IPagePopulatedToShowRevision } from '@growi/core'; import { usePageSelectModal } from '~/stores/modal'; import { EditorMode, useEditorMode } from '~/stores/ui'; import { PagePathNav } from '../Common/PagePathNav'; import { PageSelectModal } from '../PageSelectModal/PageSelectModal'; import { TextInputForPageTitleAndPath, type editingPagePathHandler } from './TextInputForPageTitleAndPath'; import { usePagePathRenameHandler } from './page-header-utils'; export type Props = { currentPagePath: string currentPage: IPagePopulatedToShowRevision editingPagePathHandler: editingPagePathHandler } export const PagePathHeader: FC = (props) => { const { currentPagePath, currentPage, editingPagePathHandler } = props; const [isRenameInputShown, setRenameInputShown] = useState(false); const [isButtonsShown, setButtonShown] = useState(false); const { data: editorMode } = useEditorMode(); const { data: PageSelectModalData, open: openPageSelectModal } = usePageSelectModal(); const { editingPagePath, setEditingPagePath } = editingPagePathHandler; const onRenameFinish = () => { setRenameInputShown(false); }; const onRenameFailure = () => { setRenameInputShown(true); }; const pagePathRenameHandler = usePagePathRenameHandler(currentPage, onRenameFinish, onRenameFailure); const stateHandler = { isRenameInputShown, setRenameInputShown }; const isOpened = PageSelectModalData?.isOpened ?? false; const isViewMode = editorMode === EditorMode.View; const isEditorMode = !isViewMode; const PagePath = useMemo(() => ( <> {currentPagePath != null && ( )} ), [currentPage._id, currentPagePath, isEditorMode]); const handleInputChange = (inputText: string) => { setEditingPagePath(inputText); }; const handleEditButtonClick = () => { if (isRenameInputShown) { pagePathRenameHandler(editingPagePath); } else { setRenameInputShown(true); } }; const buttonStyle = isButtonsShown ? '' : 'd-none'; const clickOutSideHandler = (e) => { const container = document.getElementById('page-path-header'); if (container && !container.contains(e.target)) { setRenameInputShown(false); } }; useEffect(() => { document.addEventListener('click', clickOutSideHandler); return () => { document.removeEventListener('click', clickOutSideHandler); }; }, []); return (
setButtonShown(false)} >
setButtonShown(true)} >
{isOpened && ( )}
); };