UNPKG

ra-core

Version:

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

74 lines 3.62 kB
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); }; import React, { useMemo } from 'react'; import { useReferenceOneFieldController, } from "./useReferenceOneFieldController.js"; import { useRecordContext, RecordContextProvider } from "../record/index.js"; import { ResourceContextProvider } from "../../core/index.js"; import { ReferenceFieldContextProvider } from "./ReferenceFieldContext.js"; import { useGetPathForRecord } from "../../routing/index.js"; /** * Render the related record in a one-to-one relationship * * Expects a single field as child * * @example // display the bio of the current author * <ReferenceOneFieldBase reference="bios" target="author_id"> * <TextField source="body" /> * </ReferenceOneFieldBase> */ export var ReferenceOneFieldBase = function (props) { var children = props.children, render = props.render, record = props.record, reference = props.reference, _a = props.source, source = _a === void 0 ? 'id' : _a, target = props.target, empty = props.empty, error = props.error, loading = props.loading, sort = props.sort, filter = props.filter, link = props.link, offline = props.offline, queryOptions = props.queryOptions; var controllerProps = useReferenceOneFieldController({ record: record, reference: reference, source: source, target: target, sort: sort, filter: filter, queryOptions: queryOptions, }); var path = useGetPathForRecord({ record: controllerProps.referenceRecord, resource: reference, link: link, }); var context = useMemo(function () { return (__assign(__assign({}, controllerProps), { link: path })); }, [controllerProps, path]); if (!render && !children) { throw new Error("<ReferenceOneFieldBase> requires either a 'render' prop or 'children' prop"); } var recordFromContext = useRecordContext(props); var controllerError = controllerProps.error, isPending = controllerProps.isPending, isPaused = controllerProps.isPaused, referenceRecord = controllerProps.referenceRecord; var shouldRenderLoading = !isPaused && isPending && loading !== false && loading !== undefined; var shouldRenderOffline = isPaused && isPending && offline !== false && offline !== undefined; var shouldRenderError = !!controllerError && error !== false && error !== undefined; var shouldRenderEmpty = (!recordFromContext || (!isPaused && referenceRecord == null && !controllerError && !isPending)) && empty !== false && empty !== undefined; return (React.createElement(ResourceContextProvider, { value: reference }, React.createElement(ReferenceFieldContextProvider, { value: context }, React.createElement(RecordContextProvider, { value: referenceRecord }, shouldRenderLoading ? loading : shouldRenderOffline ? offline : shouldRenderError ? error : shouldRenderEmpty ? empty : render ? render(controllerProps) : children)))); }; //# sourceMappingURL=ReferenceOneFieldBase.js.map