mirror of
https://github.com/ToolJet/ToolJet
synced 2026-05-23 08:58:26 +00:00
[ Bug fixed ] : [Multi-Select widget ] app freezes when we use control component action to control the same multi-select (#5011)
* bug fixed: app freezes * bug fixed : app frezzes when invalid value is provided
This commit is contained in:
parent
6868f94741
commit
60c311296d
1 changed files with 34 additions and 24 deletions
|
|
@ -75,43 +75,53 @@ export const Multiselect = function Multiselect({
|
|||
registerAction(
|
||||
'selectOption',
|
||||
async function (value) {
|
||||
const newSelected = [
|
||||
...selected,
|
||||
...selectOptions.filter(
|
||||
(option) => option.value === value && !selected.map((selectedOption) => selectedOption.value).includes(value)
|
||||
),
|
||||
];
|
||||
setSelected(newSelected);
|
||||
setExposedVariable(
|
||||
'values',
|
||||
newSelected.map((item) => item.value)
|
||||
).then(() => fireEvent('onSelect'));
|
||||
if (
|
||||
selectOptions.some((option) => option.value === value) &&
|
||||
!selected.some((option) => option.value === value)
|
||||
) {
|
||||
const newSelected = [
|
||||
...selected,
|
||||
...selectOptions.filter(
|
||||
(option) =>
|
||||
option.value === value && !selected.map((selectedOption) => selectedOption.value).includes(value)
|
||||
),
|
||||
];
|
||||
setSelected(newSelected);
|
||||
setExposedVariable(
|
||||
'values',
|
||||
newSelected.map((item) => item.value)
|
||||
).then(() => fireEvent('onSelect'));
|
||||
}
|
||||
},
|
||||
[selected, setSelected]
|
||||
);
|
||||
registerAction(
|
||||
'deselectOption',
|
||||
async function (value) {
|
||||
const newSelected = [
|
||||
...selected.filter(function (item) {
|
||||
return item.value !== value;
|
||||
}),
|
||||
];
|
||||
setSelected(newSelected);
|
||||
setExposedVariable(
|
||||
'values',
|
||||
newSelected.map((item) => item.value)
|
||||
).then(() => fireEvent('onSelect'));
|
||||
if (selectOptions.some((option) => option.value === value) && selected.some((option) => option.value === value)) {
|
||||
const newSelected = [
|
||||
...selected.filter(function (item) {
|
||||
return item.value !== value;
|
||||
}),
|
||||
];
|
||||
setSelected(newSelected);
|
||||
setExposedVariable(
|
||||
'values',
|
||||
newSelected.map((item) => item.value)
|
||||
).then(() => fireEvent('onSelect'));
|
||||
}
|
||||
},
|
||||
[selected, setSelected]
|
||||
);
|
||||
registerAction(
|
||||
'clearSelections',
|
||||
async function () {
|
||||
setSelected([]);
|
||||
setExposedVariable('values', []).then(() => fireEvent('onSelect'));
|
||||
if (selected.length >= 1) {
|
||||
setSelected([]);
|
||||
setExposedVariable('values', []).then(() => fireEvent('onSelect'));
|
||||
}
|
||||
},
|
||||
[setSelected]
|
||||
[selected, setSelected]
|
||||
);
|
||||
|
||||
return (
|
||||
|
|
|
|||
Loading…
Reference in a new issue