import { useEffect, useState, useContext } from '@wordpress/element'; import WidthIcon from 'blockbite-icons/dist/Width'; import HeightIcon from 'blockbite-icons/dist/Height'; import StopIcon from 'blockbite-icons/dist/Stop'; import MetricsControl from '@components/ui/MetricsControl'; import { optionsToDimensions, dimensionsToOptions, } from '@components/DesignPanel/DynamicControls/DimensionHelpers'; import { ModifierPanelProps } from '@components/DesignPanel/types'; import { useActiveOptionValues } from '@components/DesignPanel/hooks/useActiveOptionvalue'; import { useStore } from 'zustand'; import { DesignContext } from '@components/DesignPanel/DesignStore'; const modifierIds = [ 'width', 'minwidth', 'maxwidth', 'height', 'minheight', 'maxheight', ]; export const Dimension: React.FC = ({ emitOptions }) => { const [values, setValues] = useState({ width: { value: '', unit: 'arbitrary' }, minwidth: { value: '', unit: 'arbitrary' }, maxwidth: { value: '', unit: 'arbitrary' }, height: { value: '', unit: 'arbitrary' }, minheight: { value: '', unit: 'arbitrary' }, maxheight: { value: '', unit: 'arbitrary' }, }); const store = useStore(useContext(DesignContext)); const activeOptionValues = useActiveOptionValues(modifierIds, store); // set initial values useEffect(() => { const options = optionsToDimensions(activeOptionValues); setValues({ ...options }); }, [activeOptionValues]); // update options useEffect(() => { const options = dimensionsToOptions(values); emitOptions(options); }, [values]); const handleUnitChange = ( modifier: | 'width' | 'minwidth' | 'maxwidth' | 'height' | 'minheight' | 'maxheight', unit: string ) => { setValues({ ...values, [modifier]: { value: values[modifier].value, unit }, }); }; const widthModifiers = [ { icon: , label: 'Width', value: 'width', }, { icon: , label: 'Min Width', value: 'minwidth', }, { icon: , label: 'Max Width', value: 'maxwidth', }, ]; const heightModifiers = [ { icon: , label: 'Height', value: 'height', }, { icon: , label: 'Min Height', value: 'minheight', }, { icon: , label: 'Max Height', value: 'maxheight', }, ]; return (
{widthModifiers.map((modifier) => (
{modifier.label} setValues({ ...values, [modifier.value]: { value, unit: values.width.unit }, }) } onUnitChange={(unit) => handleUnitChange('width', unit)} />
))}
{heightModifiers.map((modifier) => (
{modifier.label} setValues({ ...values, [modifier.value]: { value, unit: values.height.unit }, }) } onUnitChange={(unit) => handleUnitChange('height', unit)} />
))}
); }; export default Dimension;