[ 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:
Manish Kushare 2023-01-04 14:59:23 +05:30 committed by GitHub
parent 6868f94741
commit 60c311296d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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 (