import { useState, useEffect, } from '@wordpress/element'; import { Flex, FlexItem, FlexBlock, ColorPicker, Popover, Button, Modal, TextControl, ButtonGroup, } from '@wordpress/components'; import { useControlSettingSet } from '../_hooks'; import { __, sprintf, _x } from '@wordpress/i18n'; type Props = { controlSetting: any, values: paletteColor[], resetDefaults: paletteColor[], title: string, description?: string, } export default function ApuraCustomPalette({controlSetting, values, resetDefaults, title, description}: Props) { const [isColorPickerOpen, setIsColorPickerOpen] = useState(-1); const [items, setItems] = useState(values || []); const [isDeleteMsgOpen, setDeleteMsgOpen] = useState(-1); const [nameEdit, setNameEdit] = useState<{index:number, name:string}|null>(null); useControlSettingSet({ controlSetting, value: items }); const handleAddItem = () => { let lastNum = 0; if (items.length > 0) { lastNum = parseInt(items[items.length - 1].slug.replace(/[^0-9]/g, '')); } const newItem: paletteColor = { name: `Custom ${lastNum + 1}`, slug: `ap-custom-${lastNum + 1}`, color: '#ffffff' }; setItems([...items, newItem]); }; const handleRemoveItem = (index: number) => { const newItems = items.filter((_, i) => i !== index); setItems(newItems); setDeleteMsgOpen(-1); } const openDeleteMsg = (index: number) => setDeleteMsgOpen(index); const closeDeleteMsg = () => setDeleteMsgOpen(-1); const handleNameEditClick = (index: number) => { setNameEdit({index, name: ''}); }; const handleNameEditCancelClick = (index: number) => { setNameEdit(null); }; const handleNameChange = (index: number, name: string) => { setNameEdit({index, name}); } const handleNameSaveClick = (index: number) => { if (nameEdit?.index !== index || !nameEdit?.name) return; const newItems = items.map((item, i) => i === index ? { ...item, name: nameEdit.name } : item ); setItems(newItems); setNameEdit(null); } const handleItemChange = (index:number, field:string, fieldValue:string) => { const newItems = items.map((item, i) => i === index ? { ...item, [field]: fieldValue } : item ); setItems(newItems); }; const handleColorPickerVisible = (index:number) => { setIsColorPickerOpen( index ); }; return (
{description &&

{description}

} {items.map((item, index) => (
{handleNameChange(index, e.target.value) }} /> {nameEdit?.index === index ? (
)}
))}
); }