ra-core
Version:
Core components of react-admin, a frontend Framework for building admin applications on top of REST services, using ES6, React
111 lines • 5.2 kB
JavaScript
;
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.ReferenceOneFieldBase = void 0;
var react_1 = __importStar(require("react"));
var useReferenceOneFieldController_1 = require("./useReferenceOneFieldController");
var record_1 = require("../record");
var core_1 = require("../../core");
var ReferenceFieldContext_1 = require("./ReferenceFieldContext");
var routing_1 = require("../../routing");
/**
* 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>
*/
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 = (0, useReferenceOneFieldController_1.useReferenceOneFieldController)({
record: record,
reference: reference,
source: source,
target: target,
sort: sort,
filter: filter,
queryOptions: queryOptions,
});
var path = (0, routing_1.useGetPathForRecord)({
record: controllerProps.referenceRecord,
resource: reference,
link: link,
});
var context = (0, react_1.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 = (0, record_1.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_1.default.createElement(core_1.ResourceContextProvider, { value: reference },
react_1.default.createElement(ReferenceFieldContext_1.ReferenceFieldContextProvider, { value: context },
react_1.default.createElement(record_1.RecordContextProvider, { value: referenceRecord }, shouldRenderLoading
? loading
: shouldRenderOffline
? offline
: shouldRenderError
? error
: shouldRenderEmpty
? empty
: render
? render(controllerProps)
: children))));
};
exports.ReferenceOneFieldBase = ReferenceOneFieldBase;
//# sourceMappingURL=ReferenceOneFieldBase.js.map