/** * WordPress dependencies */ import { Button, CheckboxControl, Modal } from '@safe-wordpress/components'; import { useSelect } from '@safe-wordpress/data'; import { _x } from '@safe-wordpress/i18n'; /** * External dependencies */ import { isEqual, omit, uniqWith, without } from 'lodash'; import { store as NC_DATA } from '@nelio-content/data'; import type { Maybe, TaskPreset } from '@nelio-content/types'; /** * Internal dependencies */ import './style.scss'; export type TaskPresetLoaderProps = { readonly state: Maybe< 'selection' | 'replacing' | 'merging' >; readonly actions: 'add' | 'replace-or-merge'; readonly selection: ReadonlyArray< TaskPreset[ 'id' ] >; readonly onUpdate: ( selection: ReadonlyArray< TaskPreset[ 'id' ] > ) => void; readonly onCancel: () => void; readonly onReplace: ( tasks: TaskPreset[ 'tasks' ] ) => void; readonly onMerge: ( tasks: TaskPreset[ 'tasks' ] ) => void; }; export const TaskPresetLoader = ( { actions, state, selection: selectedIds, onUpdate, onCancel, onReplace, onMerge, }: TaskPresetLoaderProps ): JSX.Element | null => { const presets = useTaskPresets(); if ( ! state ) { return null; } const selection = presets.filter( ( p ) => selectedIds.includes( p.id ) ); const tasks = uniqWith( selection.flatMap( ( p ) => p.tasks ), ( a, b ) => isEqual( omit( a, 'color' ), omit( b, 'color' ) ) ); return ( void null } >
{ presets.map( ( p ) => ( onUpdate( selected ? [ ...selectedIds, p.id ] : without( selectedIds, p.id ) ) } /> ) ) }
{ actions === 'add' ? ( ) : ( <> ) }
); }; // ===== // HOOKS // ===== const useTaskPresets = (): ReadonlyArray< TaskPreset > => useSelect( ( select ) => select( NC_DATA ).getTaskPresets(), [] );