import { FC, useEffect, useMemo, useState, } 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 } from './TextInputForPageTitleAndPath'; import { usePagePathRenameHandler } from './page-header-utils'; type Props = { currentPagePath: string currentPage: IPagePopulatedToShowRevision } export const PagePathHeader: FC = (props) => { const { currentPagePath, currentPage } = props; const [isRenameInputShown, setRenameInputShown] = useState(false); const [isButtonsShown, setButtonShown] = useState(false); const [inputText, setInputText] = useState(''); const { data: editorMode } = useEditorMode(); const { data: PageSelectModalData, open: openPageSelectModal } = usePageSelectModal(); 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) => { setInputText(inputText); }; const handleEditButtonClick = () => { if (isRenameInputShown) { pagePathRenameHandler(inputText); } 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 && ( )}
); };