saleor-dashboard/src/utils/handlers/multiAutocompleteSelectChangeHandler.ts

28 lines
955 B
TypeScript
Raw Normal View History

2019-08-09 10:17:04 +00:00
import { MultiAutocompleteChoiceType } from "@saleor/components/MultiAutocompleteSelectField";
import { ChangeEvent, FormChange } from "@saleor/hooks/useForm";
import { combinedMultiAutocompleteChoices } from "@saleor/misc";
import { toggle } from "@saleor/utils/lists";
2019-08-09 10:17:04 +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[],
2019-08-09 10:17:04 +00:00
): FormChange {
return (event: ChangeEvent) => {
change(event);
const combinedChoices = combinedMultiAutocompleteChoices(selected, choices);
2019-08-09 10:17:04 +00:00
const id = event.target.value;
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;