import { createElement, Fragment } from '@wordpress/element' import OptionsPanel from '../OptionsPanel' import { capitalizeFirstLetter, optionWithDefault } from '../GenericOptionType' import { useDeviceManagerState, useDeviceManagerActions, } from '../../customizer/components/useDeviceManager' import ResponsiveControls from '../../customizer/components/responsive-controls' import { getValueFromInput } from '../helpers/get-value-from-input' import deepEqual from 'deep-equal' const Group = ({ renderingChunk, value, onChange, onChangeMultiple, purpose, }) => renderingChunk.map((groupOption) => { const { label, options, id, attr = {}, wrapperAttr = {}, responsive = false, hasRevertButton, hasGroupRevertButton = false, } = groupOption const { currentView } = useDeviceManagerState() const { setDevice } = useDeviceManagerActions() const groupContents = ( ) const handleRevert = () => { const defaults = getValueFromInput(options, {}) if (onChangeMultiple) { onChangeMultiple(defaults) return } // In customizer, the logic is prone to race conditions due to // multiple updates happening in sequence. Object.keys(defaults).reduce((previousPromise, nextChoice) => { return previousPromise.then(() => { return new Promise((r) => { setTimeout(() => { onChange(nextChoice, defaults[nextChoice]) r() }) }) }) }, Promise.resolve()) } return (
{label && (
{hasGroupRevertButton && ( )} {responsive && ( )}
)}
{groupContents}
) }) export default Group