UNPKG

ra-core

Version:

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

55 lines 2.97 kB
import * as React from 'react'; import { useMemo } from 'react'; import { SourceContextProvider, useResourceContext, useSourceContext, } from "../../core/index.js"; import { useSimpleFormIterator } from "./useSimpleFormIterator.js"; import { SimpleFormIteratorItemContext, } from "./SimpleFormIteratorItemContext.js"; export var SimpleFormIteratorItemBase = function (props) { var children = props.children, index = props.index; var resource = useResourceContext(props); if (!resource) { throw new Error('SimpleFormIteratorItem must be used in a ResourceContextProvider or be passed a resource prop.'); } var _a = useSimpleFormIterator(), total = _a.total, reOrder = _a.reOrder, remove = _a.remove; var context = useMemo(function () { return ({ index: index, total: total, reOrder: function (newIndex) { return reOrder(index, newIndex); }, remove: function () { return remove(index); }, }); }, [index, total, reOrder, remove]); var parentSourceContext = useSourceContext(); var sourceContext = useMemo(function () { return ({ getSource: function (source) { if (!source) { // source can be empty for scalar values, e.g. // <ArrayInput source="tags" /> => SourceContext is "tags" // <SimpleFormIterator> => SourceContext is "tags.0" // <TextInput /> => use its parent's getSource so finalSource = "tags.0" // </SimpleFormIterator> // </ArrayInput> return parentSourceContext.getSource("".concat(index)); } else { // Normal input with source, e.g. // <ArrayInput source="orders" /> => SourceContext is "orders" // <SimpleFormIterator> => SourceContext is "orders.0" // <DateInput source="date" /> => use its parent's getSource so finalSource = "orders.0.date" // </SimpleFormIterator> // </ArrayInput> return parentSourceContext.getSource("".concat(index, ".").concat(source)); } }, getLabel: function (source) { // <ArrayInput source="orders" /> => LabelContext is "orders" // <SimpleFormIterator> => LabelContext is ALSO "orders" // <DateInput source="date" /> => use its parent's getLabel so finalLabel = "orders.date" // </SimpleFormIterator> // </ArrayInput> // // we don't prefix with the index to avoid that translation keys contain it return parentSourceContext.getLabel(source); }, }); }, [index, parentSourceContext]); return (React.createElement(SimpleFormIteratorItemContext.Provider, { value: context }, React.createElement(SourceContextProvider, { value: sourceContext }, children))); }; //# sourceMappingURL=SimpleFormIteratorItemBase.js.map