diff --git a/frontend/src/pages/wiki2/constant.js b/frontend/src/pages/wiki2/constant.js new file mode 100644 index 0000000000..73cb5508aa --- /dev/null +++ b/frontend/src/pages/wiki2/constant.js @@ -0,0 +1,15 @@ +const FOLDER = 'folder'; +const PAGE = 'page'; + +const WIKI_COVER_LIST = [ + 'wiki-cover-1.jpeg', + 'wiki-cover-2.jpeg', + 'wiki-cover-3.jpeg', + 'wiki-cover-4.jpeg', + 'wiki-cover-5.jpeg', + 'wiki-cover-6.jpeg', + 'wiki-cover-7.jpeg', + 'wiki-cover-8.jpeg', +]; + +export { FOLDER, PAGE, WIKI_COVER_LIST }; diff --git a/frontend/src/pages/wiki2/editor-component/page-header.jsx b/frontend/src/pages/wiki2/editor-component/page-header.jsx index 0258e2f7eb..8a90bc5db4 100644 --- a/frontend/src/pages/wiki2/editor-component/page-header.jsx +++ b/frontend/src/pages/wiki2/editor-component/page-header.jsx @@ -6,8 +6,10 @@ import data from '@emoji-mart/data'; import Picker from '@emoji-mart/react'; import { init } from 'emoji-mart'; import { gettext } from '../../../utils/constants'; +import { WIKI_COVER_LIST } from '../constant'; -init({ data }); // init data for emoji-mart, used in Picker and `getRandomEmoji` method +// init data for emoji-mart, used in Picker and `getRandomEmoji` method +init({ data }); const propTypes = { currentPageConfig: PropTypes.object.isRequired, @@ -19,13 +21,14 @@ const PageHeader = ({ currentPageConfig, onUpdatePage }) => { 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); + const headerWrapperRef = 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); + const getCoverImgUrl = useCallback((imageName) => { + const { serviceUrl, mediaUrl } = window.seafile; + return `${serviceUrl}${mediaUrl}img/wiki/cover/${imageName}`; + }, []); const handleRenameDocument = useCallback((e) => { const { nativeEvent: { isComposing } } = e; @@ -38,9 +41,10 @@ const PageHeader = ({ currentPageConfig, onUpdatePage }) => { onUpdatePage && onUpdatePage(id, pageConfig); }, [currentPageConfig, onUpdatePage]); - const changeControllerDisplayed = useCallback(() => { - setIsShowController(!isShowController); - }, [isShowController]); + const changeControllerDisplayed = useCallback((isShowController) => { + if(isShowCoverPanel) return; + setIsShowController(isShowController); + }, [isShowCoverPanel]); const handleSetIcon = useCallback((emoji, cb) => { onUpdatePage(currentPageConfig.id, { name: currentPageConfig.name, icon: emoji }); @@ -54,29 +58,29 @@ const PageHeader = ({ currentPageConfig, onUpdatePage }) => { handleSetIcon(emoji); }, [handleSetIcon]); - const handleIconPanelDisplayedChange = useCallback(() => { - setIsShowIconPanel(!isShowIconPanel); + const handleIconPanelDisplayedChange = useCallback((isShowIconPanel) => { + setIsShowIconPanel(isShowIconPanel); setIsShowCoverPanel(false); - }, [isShowIconPanel]); + }, []); const handleClickAddIcon = useCallback(() => { setRandomEmoji(); - handleIconPanelDisplayedChange(); + handleIconPanelDisplayedChange(false); }, [handleIconPanelDisplayedChange, setRandomEmoji]); const handleIconPanelListener = useCallback((e) => { const isClickInPopover = iconPanelPopoverRef.current.contains(e.target); - if (!isClickInPopover) handleIconPanelDisplayedChange(); + if (!isClickInPopover) handleIconPanelDisplayedChange(false); }, [handleIconPanelDisplayedChange]); - const handleCoverPanelDisplayedChange = useCallback(() => { - setIsShowCoverPanel(!isShowCoverPanel); + const handleCoverPanelDisplayedChange = useCallback((isShowCoverPanel) => { + setIsShowCoverPanel(isShowCoverPanel); setIsShowIconPanel(false); - }, [isShowCoverPanel]); + }, []); const handleCoverPanelListener = useCallback((e) => { const isClickInPopover = coverPanelPopoverRef.current.contains(e.target); - if (!isClickInPopover) handleCoverPanelDisplayedChange(); + if (!isClickInPopover) handleCoverPanelDisplayedChange(false); }, [handleCoverPanelDisplayedChange]); // Update current page favicon @@ -115,47 +119,59 @@ const PageHeader = ({ currentPageConfig, onUpdatePage }) => { const handleIconRemove = () => { handleSetIcon(''); - handleIconPanelDisplayedChange(); + handleIconPanelDisplayedChange(false); }; - const handleAddCover = useCallback(() => { }, []); + const handleAddCover = useCallback(() => { + const coverName = WIKI_COVER_LIST[Math.floor(Math.random() * WIKI_COVER_LIST.length)]; + const coverImgUrl = `${coverName}`; + onUpdatePage(currentPageConfig.id, { name: currentPageConfig.name, coverImgUrl }); + }, [currentPageConfig.id, currentPageConfig.name, onUpdatePage]); const showCoverController = useCallback(() => { setIsShowCoverController(true); }, []); - const hideCoverController = useCallback(() => { + const hideCoverController = useCallback((e) => { + if(isShowCoverPanel) return; setIsShowCoverController(false); - }, []); + }, [isShowCoverPanel]); + const handleSetCoverImage = (coverName) => { + const coverImgUrl = `${coverName}`; + onUpdatePage(currentPageConfig.id, { name: currentPageConfig.name, coverImgUrl }); + handleCoverPanelDisplayedChange(false); + }; - - const handleSetCoverImage = (e) => { - // TODO set cover image - setCoverImgUrl(e.target.src); - handleCoverPanelDisplayedChange(); + const handleCoverRemove = () => { + onUpdatePage(currentPageConfig.id, { name: currentPageConfig.name, coverImgUrl: '' }); + handleCoverPanelDisplayedChange(false); }; return (