2019-08-09 10:17:04 +00:00
|
|
|
import { MultiAutocompleteChoiceType } from "@saleor/components/MultiAutocompleteSelectField";
|
|
|
|
import { ChangeEvent, FormChange } from "@saleor/hooks/useForm";
|
2022-01-24 13:58:27 +00:00
|
|
|
import { combinedMultiAutocompleteChoices } from "@saleor/misc";
|
2020-04-23 15:43:08 +00:00
|
|
|
import { toggle } from "@saleor/utils/lists";
|
2019-08-09 10:17:04 +00:00
|
|
|
|
2020-04-23 15:43:08 +00:00
|
|
|
/**
|
|
|
|
* @param change Use toggleValue callback delivered by form
|
|
|
|
*/
|
2019-08-09 10:17:04 +00:00
|
|
|
function createMultiAutocompleteSelectHandler(
|
|
|
|
change: FormChange,
|
|
|
|
setSelected: (choices: MultiAutocompleteChoiceType[]) => void,
|
|
|
|
selected: MultiAutocompleteChoiceType[],
|
|
|
|
choices: MultiAutocompleteChoiceType[]
|
|
|
|
): FormChange {
|
|
|
|
return (event: ChangeEvent) => {
|
|
|
|
change(event);
|
|
|
|
|
2022-01-24 13:58:27 +00:00
|
|
|
const combinedChoices = combinedMultiAutocompleteChoices(selected, choices);
|
|
|
|
|
2019-08-09 10:17:04 +00:00
|
|
|
const id = event.target.value;
|
2022-01-24 13:58:27 +00:00
|
|
|
const choice = combinedChoices.find(choice => choice.value === id);
|
2019-08-09 10:17:04 +00:00
|
|
|
|
|
|
|
setSelected(toggle(choice, selected, (a, b) => a.value === b.value));
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
export default createMultiAutocompleteSelectHandler;
|