diff --git a/src/components/Controls/TrieSelect/TrieSelect.jsx b/src/components/Controls/TrieSelect/TrieSelect.jsx index a62df9e..b607fc3 100644 --- a/src/components/Controls/TrieSelect/TrieSelect.jsx +++ b/src/components/Controls/TrieSelect/TrieSelect.jsx @@ -58,7 +58,7 @@ const TrieSelectList = ({ {selected.map((signal) => { return (
  • - remove(signal)} /> + remove([signal])} />
  • ); })} @@ -89,12 +89,10 @@ const TrieSelectLevel = ({ }; const handleCheck = (names = [], checked) => { - for (let i = 0; i < names.length; i++) { - if (checked) { - remove(names[i]); - } else { - add(names[i]) - } + if (checked) { + remove(names); + } else { + add(names) } } diff --git a/src/components/Controls/TrieSelect/TrieSelectContext.js b/src/components/Controls/TrieSelect/TrieSelectContext.js index 91885c8..8011c8f 100644 --- a/src/components/Controls/TrieSelect/TrieSelectContext.js +++ b/src/components/Controls/TrieSelect/TrieSelectContext.js @@ -12,17 +12,26 @@ export const useTrieSelect = () => { } export const TrieSelectProvider = ({ children, onChange }) => { - const [selected, setSelected] = useState([]); + const [selected, setSelected] = useState(new Set()); - const add = (id) => setSelected(prev => [...prev, id]); - const remove = (id) => setSelected(prev => prev.filter(select => select !== id)); + const add = (ids) => setSelected(prev => new Set([...prev, ...ids])); + const remove = (ids) => setSelected(prev => { + for (const id of ids) { + prev.delete(id); + } + return new Set(prev); + }); useEffect(() => { - onChange(selected); + onChange(Array.from(selected)); }, [onChange, selected]); return ( - + {children} );