CEC-4564: use Set for unique values (#408)
* add TrieSelect * setup menu button * CEC-4564: add trie select component * CEC-4564: fix possible duplicate with set
This commit is contained in:
@@ -58,7 +58,7 @@ const TrieSelectList = ({
|
|||||||
{selected.map((signal) => {
|
{selected.map((signal) => {
|
||||||
return (
|
return (
|
||||||
<li key={signal}>
|
<li key={signal}>
|
||||||
<Chip label={signal} onDelete={() => remove(signal)} />
|
<Chip label={signal} onDelete={() => remove([signal])} />
|
||||||
</li>
|
</li>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
@@ -89,12 +89,10 @@ const TrieSelectLevel = ({
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleCheck = (names = [], checked) => {
|
const handleCheck = (names = [], checked) => {
|
||||||
for (let i = 0; i < names.length; i++) {
|
if (checked) {
|
||||||
if (checked) {
|
remove(names);
|
||||||
remove(names[i]);
|
} else {
|
||||||
} else {
|
add(names)
|
||||||
add(names[i])
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,17 +12,26 @@ export const useTrieSelect = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const TrieSelectProvider = ({ children, onChange }) => {
|
export const TrieSelectProvider = ({ children, onChange }) => {
|
||||||
const [selected, setSelected] = useState([]);
|
const [selected, setSelected] = useState(new Set());
|
||||||
|
|
||||||
const add = (id) => setSelected(prev => [...prev, id]);
|
const add = (ids) => setSelected(prev => new Set([...prev, ...ids]));
|
||||||
const remove = (id) => setSelected(prev => prev.filter(select => select !== id));
|
const remove = (ids) => setSelected(prev => {
|
||||||
|
for (const id of ids) {
|
||||||
|
prev.delete(id);
|
||||||
|
}
|
||||||
|
return new Set(prev);
|
||||||
|
});
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
onChange(selected);
|
onChange(Array.from(selected));
|
||||||
}, [onChange, selected]);
|
}, [onChange, selected]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<TrieSelectContext.Provider value={{ selected, setSelected, add, remove }}>
|
<TrieSelectContext.Provider value={{
|
||||||
|
selected: Array.from(selected),
|
||||||
|
add,
|
||||||
|
remove
|
||||||
|
}}>
|
||||||
{children}
|
{children}
|
||||||
</TrieSelectContext.Provider>
|
</TrieSelectContext.Provider>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user