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}
);