@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
JavaScript
;
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;