import classNames from 'classnames'; import { useState } from '@wordpress/element'; import TrashIcon from 'blockbite-icons/dist/Trash'; import StarIcon from 'blockbite-icons/dist/Star'; import StarFilledIcon from 'blockbite-icons/dist/StarFilled'; import { useSelect, useDispatch } from '@wordpress/data'; import { ButtonToggleGroup } from '@components/ui/ButtonToggle'; import { ItemProps, PresetContent } from '@components/DesignPanel/types'; import { ScrollList } from '@components/ui/ScrollList'; import { Notification } from '@components/ui/Notification'; import { Button, TextControl } from '@wordpress/components'; import { findPresetById } from './useDefaultPreset'; import has from 'lodash/has'; import capitalize from 'lodash/capitalize'; export const PresetPanel = (props: any) => { const { name, attributes, setAttributes } = props; const picked = [ 'biteStyle', 'biteMotionStyle', 'flexStyle', 'mediaStyle', 'biteClass', 'biteMotionClass', 'flexClass', 'mediaClass', ]; const saveProps = {} as any; picked.forEach((prop) => { if (has(attributes, prop)) { saveProps[prop] = attributes[prop]; } }); const [newPresetName, setNewPresetName] = useState(''); const [key, setKey] = useState(0); const [error, setError] = useState(''); const [platform, setPlatform] = useState('site'); const presets = useSelect( (select) => { // @ts-ignore const results = select('biteStore/presets').getFiltered(platform, name); return results.filter((item: ItemProps) => item.blockname === name); }, [platform, name] ); const { upsertItem, deleteItem, toggleDefaultItem } = useDispatch('biteStore/presets'); const addPreset = async () => { if (newPresetName !== '') { try { await upsertItem({ title: newPresetName, handle: 'preset', platform: platform, blockname: name, version: '1.0.0', is_default: false, content: JSON.stringify(saveProps), }); setNewPresetName(''); setError(''); } catch (error) { setError('Error adding preset'); } } }; return (
{ setPlatform(value); }} size="default" options={['site', 'blockbite'].map((option: string) => ({ value: option, icon: null, label: capitalize(option), }))} defaultPressed={platform} >
{`Presets for ${name}`}
{platform === 'site' && ( <> { setNewPresetName(value); }} /> )} {error !== '' && platform !== 'blockbite' && {error}} {presets.map((item: ItemProps) => { return ( ); })} {presets.length === 0 && ( No Presets Available )}
); }; export default PresetPanel;