From 416f26437ff6ed516de577c7ec1e0192245ff830 Mon Sep 17 00:00:00 2001 From: liuhongbo <916196375@qq.com> Date: Thu, 20 Jun 2024 11:37:11 +0800 Subject: [PATCH] icon and cover --- .../wiki2/editor-component/page-header.jsx | 104 ++++++++++++++++-- frontend/src/pages/wiki2/wiki.css | 73 ++++++++++-- 2 files changed, 155 insertions(+), 22 deletions(-) diff --git a/frontend/src/pages/wiki2/editor-component/page-header.jsx b/frontend/src/pages/wiki2/editor-component/page-header.jsx index 8382a7562e..0258e2f7eb 100644 --- a/frontend/src/pages/wiki2/editor-component/page-header.jsx +++ b/frontend/src/pages/wiki2/editor-component/page-header.jsx @@ -17,7 +17,13 @@ const propTypes = { const PageHeader = ({ currentPageConfig, onUpdatePage }) => { const [isShowController, setIsShowController] = useState(false); const [isShowIconPanel, setIsShowIconPanel] = useState(false); + const [isShowCoverController, setIsShowCoverController] = useState(false); + const [isShowCoverPanel, setIsShowCoverPanel] = useState(false); + const [coverImgUrl, setCoverImgUrl] = useState(''); const iconPanelPopoverRef = useRef(null); + const coverPanelPopoverRef = useRef(null); + + // currentPageConfig.coverImgUrl = 'https://img2.baidu.com/it/u=2061573580,1495285204&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500'; console.log('currentPageConfig', currentPageConfig); @@ -50,6 +56,7 @@ const PageHeader = ({ currentPageConfig, onUpdatePage }) => { const handleIconPanelDisplayedChange = useCallback(() => { setIsShowIconPanel(!isShowIconPanel); + setIsShowCoverPanel(false); }, [isShowIconPanel]); const handleClickAddIcon = useCallback(() => { @@ -62,6 +69,16 @@ const PageHeader = ({ currentPageConfig, onUpdatePage }) => { if (!isClickInPopover) handleIconPanelDisplayedChange(); }, [handleIconPanelDisplayedChange]); + const handleCoverPanelDisplayedChange = useCallback(() => { + setIsShowCoverPanel(!isShowCoverPanel); + setIsShowIconPanel(false); + }, [isShowCoverPanel]); + + const handleCoverPanelListener = useCallback((e) => { + const isClickInPopover = coverPanelPopoverRef.current.contains(e.target); + if (!isClickInPopover) handleCoverPanelDisplayedChange(); + }, [handleCoverPanelDisplayedChange]); + // Update current page favicon useEffect(() => { let faviconUrl = ''; @@ -82,35 +99,97 @@ const PageHeader = ({ currentPageConfig, onUpdatePage }) => { }, 0); } if (!isShowIconPanel) removeEventListener('click', handleIconPanelListener); + if (isShowCoverPanel) { + setTimeout(() => { + // Avoid open behavior closing popover + addEventListener('click', handleCoverPanelListener); + }, 0); + } + if (!isShowCoverPanel) removeEventListener('click', handleCoverPanelListener); return () => { removeEventListener('click', handleIconPanelListener); + removeEventListener('click', handleCoverPanelListener); }; - }, [handleIconPanelListener, isShowIconPanel]); + }, [handleCoverPanelListener, handleIconPanelListener, isShowCoverPanel, isShowIconPanel]); const handleIconRemove = () => { handleSetIcon(''); handleIconPanelDisplayedChange(); - }; const handleAddCover = useCallback(() => { }, []); + const showCoverController = useCallback(() => { + setIsShowCoverController(true); + }, []); + const hideCoverController = useCallback(() => { + setIsShowCoverController(false); + }, []); + + + + const handleSetCoverImage = (e) => { + // TODO set cover image + setCoverImgUrl(e.target.src); + handleCoverPanelDisplayedChange(); + }; return (