import { useState, } from '@wordpress/element'; import { Flex, FlexItem, ColorPicker, Popover, Button, } from '@wordpress/components'; import { useControlSettingSet } from '../_hooks'; import { __ } from '@wordpress/i18n'; type PaletteOverride = { slug: string, color: string, }; type Props = { controlSetting: any, values: PaletteOverride[], palette: paletteColor[], title: string, description?: string, } function mergePalette(palette: paletteColor[], overrides: PaletteOverride[]) { const overrideMap = new Map((overrides || []).map((item) => [item.slug, item.color])); return palette.map((item) => ({ ...item, color: overrideMap.get(item.slug) || item.color, })); } function buildOverrides(palette: paletteColor[], defaults: paletteColor[]) { return palette.reduce((result, item, index) => { if (item.color !== defaults[index]?.color) { result.push({ slug: item.slug, color: item.color, }); } return result; }, []); } export default function ApuraPaletteOverrides({controlSetting, values, palette: defaults, title, description}: Props) { const [isVisible, setIsVisible] = useState(-1); const [palette, setPalette] = useState(mergePalette(defaults || [], values || [])); useControlSettingSet({ controlSetting, value: buildOverrides(palette, defaults || []) }); if (!defaults?.length) { return null; } const toggleVisible = (index:number) => { setIsVisible( index ); }; const handleColorChange = (newColor: string, index: number) => { setPalette((prevPalette) => prevPalette.map((item, i) => i === index ? { ...item, color: newColor } : item ) ); } const handleResetClick = (index:number) => { setPalette((prevPalette) => prevPalette.map((item, i) => i === index ? defaults[i] : item ) ); } return (
{description &&

{description}

} {palette.length > 0 && palette.map((paletteColor, index) => { return (
{isVisible === index && setIsVisible( -1 ) } >
handleColorChange(color, index)} />
}
) }) }
); }