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 { Transition } from '@react-spring/web' import bezierEasing from 'bezier-easing' import Overlay from '../../customizer/components/Overlay' import { Dropdown } from '@wordpress/components' 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) const [customPalettes, setCustomPalettes] = useState([]) useEffect(() => { fetch( `${window.ajaxurl}?action=blocksy_get_custom_palettes`, { method: 'POST', headers: { Accept: 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify({}), } ) .then((response) => response.json()) .then((data) => { if (data.data.palettes) { setCustomPalettes(data.data.palettes) } }) }, []) return ( { setCustomPalettes(palettes) fetch( `${window.ajaxurl}?action=blocksy_sync_custom_palettes`, { method: 'POST', headers: { Accept: 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify({ palettes, }), } ) .then((response) => response.json()) .then((data) => {}) }, isEditingPalettes, setIsEditingPalettes, }}> {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