UNPKG

@open-tender/utils

Version:

A library of utils for use with Open Tender applications that utilize our cloud-based Order API.

61 lines (60 loc) 2.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useAllergenForm = void 0; const react_1 = require("react"); const utils_1 = require("../utils"); const useAllergenForm = (allergens, selectedAllergens, isLoading = false, error, setAllergens, updateAllergens, callback) => { const submitRef = (0, react_1.useRef)(null); const [data, setData] = (0, react_1.useState)([]); const [errors, setErrors] = (0, react_1.useState)({}); const [submitting, setSubmitting] = (0, react_1.useState)(false); const allergenIds = data.map(i => i.allergen_id); // const formError = error ? error.detail || error.message : null (0, react_1.useEffect)(() => { // uses isLoading boolean because loading state is based on // both brand allergens and customer allergens loading if (!isLoading) { setSubmitting(false); if (error) { setErrors((0, utils_1.makeFormErrors)(error)); } } }, [isLoading, error]); (0, react_1.useEffect)(() => { if (!isLoading) setData(selectedAllergens); }, [isLoading, selectedAllergens]); const handleChange = (allergenId, checked) => { const allergen = allergens.find(i => i.allergen_id === allergenId); if (!allergen) return; const newData = checked ? [...data, allergen] : data.filter(i => i.allergen_id !== allergenId); setData(newData); }; const handleSubmit = (evt) => { var _a, _b; evt === null || evt === void 0 ? void 0 : evt.preventDefault(); setSubmitting(updateAllergens !== null); if (updateAllergens) { const newData = data.map(i => ({ allergen_id: i.allergen_id })); updateAllergens(newData); } else { setAllergens(data); } if (callback) callback(); ((_a = submitRef.current) === null || _a === void 0 ? void 0 : _a.blur) && ((_b = submitRef.current) === null || _b === void 0 ? void 0 : _b.blur()); }; return { submitRef, submitting, allergenIds, errors, handleChange, handleSubmit }; }; exports.useAllergenForm = useAllergenForm;