import { FC, useEffect, useState } from 'react'; import { FaSave, FaSpinner, FaTimes, FaTrash } from 'react-icons/fa'; import { LocalizeText } from '../../../../api'; import { useCatalog } from '../../../../hooks'; import { IPageEditData, useCatalogAdmin } from '../../CatalogAdminContext'; const LAYOUT_OPTIONS = [ 'default_3x3', 'frontpage4', 'pets', 'pets2', 'pets3', 'spaces_new', 'soundmachine', 'trophies', 'roomads', 'guild_frontpage', 'guild_forum', 'guild_custom_furni', 'vip_buy', 'marketplace', 'marketplace_own_items', 'recycler', 'recycler_info', 'recycler_prizes', 'info_loyalty', 'badge_display', 'bots', 'single_bundle', 'color_grouping', 'recent_purchases', 'custom_prefix' ]; export const CatalogAdminPageEditView: FC<{}> = () => { const { currentPage = null, activeNodes = [], rootNode = null } = useCatalog(); const catalogAdmin = useCatalogAdmin(); const editingPageData = catalogAdmin?.editingPageData ?? false; const editingRootPage = catalogAdmin?.editingRootPage ?? false; const editingPageNode = catalogAdmin?.editingPageNode ?? null; const loading = catalogAdmin?.loading ?? false; const [ caption, setCaption ] = useState(''); const [ pageLayout, setPageLayout ] = useState('default_3x3'); const [ minRank, setMinRank ] = useState(1); const [ visible, setVisible ] = useState('1'); const [ enabled, setEnabled ] = useState('1'); const [ orderNum, setOrderNum ] = useState(0); // Resolve what we're editing: // 1. editingPageNode (explicit node from sidebar click) // 2. editingRootPage (root button) // 3. current active page (from "Modifica Pagina" in layout) const targetNode = editingPageNode ? editingPageNode : editingRootPage ? rootNode : (activeNodes.length > 0 ? activeNodes[activeNodes.length - 1] : null); const targetPageId = targetNode?.pageId ?? currentPage?.pageId; const isRoot = editingRootPage; const closeForm = () => { catalogAdmin?.setEditingPageData(false); catalogAdmin?.setEditingRootPage(false); catalogAdmin?.setEditingPageNode(null); }; useEffect(() => { if(!editingPageData || !targetNode) return; setCaption(targetNode.localization || ''); setPageLayout(currentPage?.layoutCode || 'default_3x3'); setVisible(targetNode.isVisible ? '1' : '0'); setEnabled('1'); setMinRank(1); setOrderNum(0); }, [ editingPageData, targetNode, currentPage ]); if(!editingPageData || !targetNode) return null; const inputClass = 'text-[11px] border-2 border-card-grid-item-border rounded px-2 py-1 bg-white focus:outline-none focus:border-primary transition-colors'; const handleSave = async () => { if(!catalogAdmin?.savePage) return; const parentNode = targetNode.parent; const data: IPageEditData = { pageId: targetPageId, caption, pageLayout, minRank, visible, enabled, orderNum, parentId: parentNode ? parentNode.pageId : -1, }; const success = await catalogAdmin.savePage(data); if(success) closeForm(); }; const handleDelete = async () => { if(!catalogAdmin?.deletePage || isRoot) return; if(!confirm(LocalizeText('catalog.admin.delete.page.confirm', [ 'name' ], [ targetNode.localization ]))) return; const success = await catalogAdmin.deletePage(targetPageId); if(success) closeForm(); }; return (