import React, { useState } from 'react'; import { RenameInput } from './RenameInput'; import { PagehandlerMenu } from './PagehandlerMenu'; import { EditModal } from './EditModal'; import { SettingsModal } from './SettingsModal'; import _ from 'lodash'; import SortableList from '@/_components/SortableList'; import { toast } from 'react-hot-toast'; export const PageHandler = ({ darkMode, page, switchPage, deletePage, renamePage, clonePage, hidePage, unHidePage, homePageId, currentPageId, updateHomePage, updatePageHandle, updateOnPageLoadEvents, currentState, apps, pages, components, dataQueries, }) => { const isHomePage = page.id === homePageId; const isSelected = page.id === currentPageId; const isHidden = page?.hidden ?? false; const [isEditingPageName, setIsEditingPageName] = useState(false); const [showEditModal, setShowEditModal] = useState(false); const [showPagehandlerMenu, setShowPagehandlerMenu] = useState(false); const [showSettingsModal, setShowSettingsModal] = useState(false); const [isHovered, setIsHovered] = useState(false); const handleClose = () => { setShowEditModal(false); setShowPagehandlerMenu(true); }; const handleShow = () => { setShowEditModal(true); setShowPagehandlerMenu(false); }; const showSettings = () => { setShowSettingsModal(true); }; const handleCallback = (id) => { setIsHovered(false); switch (id) { case 'delete-page': deletePage(page.id, isHomePage); break; case 'rename-page': setIsEditingPageName(true); break; case 'mark-as-home-page': updateHomePage(page.id); break; case 'edit-page-handle': handleShow(); break; case 'settings': showSettings(); break; case 'duplicate-page': clonePage(page.id); break; case 'hide-page': hidePage(page.id); break; case 'unhide-page': unHidePage(page.id); break; default: break; } }; React.useEffect(() => { if (!isHovered && !isSelected && showPagehandlerMenu) { setShowPagehandlerMenu(false); } if (isHovered && currentPageId !== page.id) { setShowPagehandlerMenu(false); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [isHovered]); if (isEditingPageName) { return ; } const windowUrl = window.location.href; const slug = windowUrl.split(page.handle)[0]; return (
setIsHovered(true)} onMouseLeave={() => setIsHovered(false)} className={`card cursor-pointer ${isSelected ? 'active' : 'non-active-page'}`} onClick={() => page.id != currentPageId && switchPage(page.id)} >
{page.name}
{isHidden && ( )} {(isHovered || isSelected) && isHomePage && ( )}
{(isHovered || isSelected) && ( )} setShowSettingsModal(false)} darkMode={darkMode} updateOnPageLoadEvents={updateOnPageLoadEvents} currentState={currentState} apps={apps} pages={pages} components={components} dataQueries={dataQueries} />
); }; export const AddingPageHandler = ({ addNewPage, setNewPageBeingCreated }) => { const handleAddingNewPage = (pageName) => { if (pageName.trim().length === 0) { toast('Page name should have atleast 1 character', { icon: '⚠️', }); } if (pageName && pageName.trim().length > 0) { addNewPage({ name: pageName, handle: _.kebabCase(pageName.toLowerCase()) }); } setNewPageBeingCreated(false); }; return (
{ const name = event.target.value; handleAddingNewPage(name); event.stopPropagation(); }} onKeyDown={(event) => { if (event.key === 'Enter') { const name = event.target.value; handleAddingNewPage(name); event.stopPropagation(); } }} />
); };