UNPKG

ra-core

Version:

Core components of react-admin, a frontend Framework for building admin applications on top of REST services, using ES6, React

57 lines 2.37 kB
import * as React from 'react'; import { useMemo } from 'react'; import { useFormContext } from 'react-hook-form'; import { useWrappedSource } from "../../core/useWrappedSource.js"; import { useEvent } from "../../util/index.js"; import { useArrayInput } from "./useArrayInput.js"; import { SimpleFormIteratorContext } from "./SimpleFormIteratorContext.js"; var DefaultGetItemDefaults = function (item) { return item; }; export var SimpleFormIteratorBase = function (props) { var children = props.children, _a = props.getItemDefaults, getItemDefaultsProp = _a === void 0 ? DefaultGetItemDefaults : _a; var getItemDefaults = useEvent(getItemDefaultsProp); var finalSource = useWrappedSource(''); if (!finalSource) { throw new Error('SimpleFormIterator can only be called within an iterator input like ArrayInput'); } var _b = useArrayInput(props), append = _b.append, fields = _b.fields, move = _b.move, remove = _b.remove; var _c = useFormContext(), trigger = _c.trigger, getValues = _c.getValues; var removeField = useEvent(function (index) { remove(index); var isScalarArray = getValues(finalSource).every(function (value) { return typeof value !== 'object'; }); if (isScalarArray) { // Trigger validation on the Array to avoid ghost errors. // Otherwise, validation errors on removed fields might still be displayed trigger(finalSource); } }); var addField = useEvent(function (item) { if (item === void 0) { item = undefined; } append(getItemDefaults(item)); }); var handleReorder = useEvent(function (origin, destination) { move(origin, destination); }); var handleArrayClear = useEvent(function () { remove(); }); var context = useMemo(function () { return ({ total: fields.length, add: addField, clear: handleArrayClear, remove: removeField, reOrder: handleReorder, source: finalSource, }); }, [ addField, fields.length, handleArrayClear, handleReorder, removeField, finalSource, ]); if (!fields) { return null; } return (React.createElement(SimpleFormIteratorContext.Provider, { value: context }, children)); }; //# sourceMappingURL=SimpleFormIteratorBase.js.map