import { createContext, useContext, createElement, createPortal, useRef, Fragment, useState, useEffect, } from '@wordpress/element' import OptionsPanel from '../OptionsPanel' import { __ } from 'ct-i18n' import classnames from 'classnames' import PalettePreview from './color-palettes/PalettePreview' import ColorPalettesModal from './color-palettes/ColorPalettesModal' import usePopoverMaker from '../helpers/usePopoverMaker' import OutsideClickHandler from './react-outside-click-handler' import bezierEasing from 'bezier-easing' import Overlay from '../../customizer/components/Overlay' import { Dropdown } from '@wordpress/components' import storeName, { getStore } from './color-palettes/store' import { useSelect, useDispatch } from '@wordpress/data' export const ColorPalettesContext = createContext({ isEditingPalettes: false, }) const ColorPalettes = ({ option, value, onChange }) => { const { isEditingPalettes, setIsEditingPalettes, customPalettes } = useContext(ColorPalettesContext) const colorPalettesWrapper = useRef() // Dont persist the palettes in the database. const { palettes, current_palette, ...properValue } = value return (
{ onChange(optionValue) }} /> 0, } )} onDismiss={() => setIsEditingPalettes(false)} render={() => ( { onChange(value) }} setIsEditingPalettes={setIsEditingPalettes} value={properValue} option={option} /> )} />
) } ColorPalettes.MetaWrapper = ({ getActualOption }) => { const [isEditingPalettes, setIsEditingPalettes] = useState(false) // Initialize the store lazily const store = getStore() const { fetchCustomPalettes, syncCustomPalettes } = store ? useDispatch(storeName) : { fetchCustomPalettes: () => {}, syncCustomPalettes: () => {} } const { customPalettes } = store ? useSelect((select) => { const s = select(storeName) return { customPalettes: s.getCustomPalettes(), } }, []) : { customPalettes: [] } useEffect(() => { if (store && fetchCustomPalettes) { fetchCustomPalettes() } }, [store]) return ( {getActualOption()} ) } ColorPalettes.LabelToolbar = ({ option, value, onChange }) => { const { setIsEditingPalettes, customPalettes, setCustomPalettes } = useContext(ColorPalettesContext) const canSave = ![...option.palettes, ...(customPalettes || [])].find( (palette) => { const actualColors = Object.keys(value).reduce( (finalValue, currentId) => ({ ...finalValue, ...(currentId.indexOf('color') === 0 ? { [currentId]: value[currentId].color, } : {}), }), {} ) const paletteColors = Object.keys(palette).reduce( (finalValue, currentId) => ({ ...finalValue, ...(currentId.indexOf('color') === 0 ? { [currentId]: palette[currentId].color, } : {}), }), {} ) if ( Object.keys(actualColors).length !== Object.keys(paletteColors).length ) { return false } return Object.keys(actualColors).every((key) => { return actualColors[key] === paletteColors[key] }) } ) return ( ( {__('Advanced', 'blocksy')} )} renderContent={({ onClose }) => (
)} />
) } export default ColorPalettes