UNPKG

ra-core

Version:

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

142 lines 5.99 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.ReferenceArrayInputBase = void 0; var React = __importStar(require("react")); var useReferenceArrayInputController_1 = require("./useReferenceArrayInputController"); var ResourceContextProvider_1 = require("../../core/ResourceContextProvider"); var ChoicesContextProvider_1 = require("../../form/choices/ChoicesContextProvider"); /** * An Input component for fields containing a list of references to another resource. * Useful for 'hasMany' relationship. * * @example * The post object has many tags, so the post resource looks like: * { * id: 1234, * tag_ids: [ "1", "23", "4" ] * } * * ReferenceArrayInputBase component fetches the current resources (using * `dataProvider.getMany()`) as well as possible resources (using * `dataProvider.getList()`) in the reference endpoint. It then * delegates rendering to its child component, to which it makes the possible * choices available through the ChoicesContext. * * Use it with a selector component as child, like `<SelectArrayInput>` * or <CheckboxGroupInput>. * * @example * export const PostEdit = () => ( * <Edit> * <SimpleForm> * <ReferenceArrayInputBase source="tag_ids" reference="tags"> * <SelectArrayInput optionText="name" /> * </ReferenceArrayInputBase> * </SimpleForm> * </Edit> * ); * * By default, restricts the possible values to 25. You can extend this limit * by setting the `perPage` prop. * * @example * <ReferenceArrayInputBase * source="tag_ids" * reference="tags" * perPage={100}> * <SelectArrayInput optionText="name" /> * </ReferenceArrayInputBase> * * By default, orders the possible values by id desc. You can change this order * by setting the `sort` prop (an object with `field` and `order` properties). * * @example * <ReferenceArrayInputBase * source="tag_ids" * reference="tags" * sort={{ field: 'name', order: 'ASC' }}> * <SelectArrayInput optionText="name" /> * </ReferenceArrayInputBase> * * Also, you can filter the query used to populate the possible values. Use the * `filter` prop for that. * * @example * <ReferenceArrayInputBase * source="tag_ids" * reference="tags" * filter={{ is_public: true }}> * <SelectArrayInput optionText="name" /> * </ReferenceArrayInputBase> * * The enclosed component may filter results. ReferenceArrayInputBase create a ChoicesContext which provides * a `setFilters` function. You can call this function to filter the results. */ var ReferenceArrayInputBase = function (props) { var children = props.children, _a = props.filter, filter = _a === void 0 ? defaultFilter : _a, offline = props.offline, reference = props.reference, render = props.render, sort = props.sort; if (children && React.Children.count(children) !== 1) { throw new Error('<ReferenceArrayInputBase> only accepts a single child (like <AutocompleteArrayInput>)'); } if (!render && !children) { throw new Error("<ReferenceArrayInputBase> requires either a 'render' prop or 'children' prop"); } var controllerProps = (0, useReferenceArrayInputController_1.useReferenceArrayInputController)(__assign(__assign({}, props), { sort: sort, filter: filter })); var isPaused = controllerProps.isPaused, isPending = controllerProps.isPending; // isPending is true: there's no cached data and no query attempt was finished yet // isPaused is true: the query was paused (e.g. due to a network issue) // Both true: we're offline and have no data to show var shouldRenderOffline = isPaused && isPending && offline !== undefined && offline !== false; return (React.createElement(ResourceContextProvider_1.ResourceContextProvider, { value: reference }, React.createElement(ChoicesContextProvider_1.ChoicesContextProvider, { value: controllerProps }, shouldRenderOffline ? offline : render ? render(controllerProps) : children))); }; exports.ReferenceArrayInputBase = ReferenceArrayInputBase; var defaultFilter = {}; //# sourceMappingURL=ReferenceArrayInputBase.js.map