UNPKG

@sanity/form-builder

Version:
141 lines (140 loc) • 9.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var PathUtils = _interopRequireWildcard(require("@sanity/util/paths")); var _rxjs = require("rxjs"); var _operators = require("rxjs/operators"); var _withValuePath = _interopRequireDefault(require("../../../utils/withValuePath")); var _withDocument = _interopRequireDefault(require("../../../utils/withDocument")); var _ReferenceInputOptions = require("../../contexts/ReferenceInputOptions"); var adapter = _interopRequireWildcard(require("../client-adapters/reference")); var _ReferenceInput = require("../../../inputs/ReferenceInput/ReferenceInput"); var _legacyParts = require("../../../legacyParts"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } // eslint-disable-next-line require-await function resolveUserDefinedFilter(_x, _x2, _x3) { return _resolveUserDefinedFilter.apply(this, arguments); } function _resolveUserDefinedFilter() { _resolveUserDefinedFilter = _asyncToGenerator(function* (options, document, valuePath) { if (!options) { return {}; } if (typeof options.filter === 'function') { var parentPath = valuePath.slice(0, -1); var parent = (0, PathUtils.get)(document, parentPath); return options.filter({ document, parentPath, parent }); } return { filter: options.filter, params: 'filterParams' in options ? options.filterParams : undefined }; }); return _resolveUserDefinedFilter.apply(this, arguments); } function useValueRef(value) { var ref = (0, _react.useRef)(value); ref.current = value; return ref; } var SanityReferenceInput = /*#__PURE__*/(0, _react.forwardRef)(function SanityReferenceInput(props, ref) { var _documentRef$current, _type$options, _props$value; var getValuePath = props.getValuePath, type = props.type, document = props.document; var _useReferenceInputOpt = (0, _ReferenceInputOptions.useReferenceInputOptions)(), EditReferenceLinkComponent = _useReferenceInputOpt.EditReferenceLinkComponent, onEditReference = _useReferenceInputOpt.onEditReference, activePath = _useReferenceInputOpt.activePath, initialValueTemplateItems = _useReferenceInputOpt.initialValueTemplateItems; var documentRef = useValueRef(document); var documentTypeName = (_documentRef$current = documentRef.current) === null || _documentRef$current === void 0 ? void 0 : _documentRef$current._type; var isDocumentLiveEdit = (0, _react.useMemo)(() => { return _legacyParts.schema.get(documentTypeName).liveEdit === true; }, [documentTypeName]); var valuePath = (0, _react.useMemo)(getValuePath, [getValuePath]); var disableNew = ((_type$options = type.options) === null || _type$options === void 0 ? void 0 : _type$options.disableNew) === true; var handleSearch = (0, _react.useCallback)(searchString => (0, _rxjs.from)(resolveUserDefinedFilter(type.options, documentRef.current, getValuePath())).pipe((0, _operators.mergeMap)(_ref => { var filter = _ref.filter, params = _ref.params; return adapter.search(searchString, type, _objectSpread(_objectSpread({}, type.options), {}, { filter, params, tag: 'search.reference' })); }), (0, _operators.catchError)(err => { var _type$options2; var isQueryError = err.details && err.details.type === 'queryParseError'; if ((_type$options2 = type.options) !== null && _type$options2 !== void 0 && _type$options2.filter && isQueryError) { err.message = "Invalid reference filter, please check the custom \"filter\" option"; } return (0, _rxjs.throwError)(err); })), [documentRef, getValuePath, type]); var template = (_props$value = props.value) === null || _props$value === void 0 || (_props$value = _props$value._strengthenOnPublish) === null || _props$value === void 0 ? void 0 : _props$value.template; var EditReferenceLink = (0, _react.useMemo)(() => /*#__PURE__*/(0, _react.forwardRef)(function EditReferenceLink_(_props, forwardedRef) { return EditReferenceLinkComponent ? /*#__PURE__*/_react.default.createElement(EditReferenceLinkComponent, _extends({}, _props, { ref: forwardedRef, parentRefPath: valuePath, template: template })) : null; }), [EditReferenceLinkComponent, valuePath, template]); var handleEditReference = (0, _react.useCallback)(event => { onEditReference === null || onEditReference === void 0 ? void 0 : onEditReference({ parentRefPath: valuePath, id: event.id, type: event.type, template: event.template }); }, [onEditReference, valuePath]); var selectedState = PathUtils.startsWith(valuePath, (activePath === null || activePath === void 0 ? void 0 : activePath.path) || []) ? activePath === null || activePath === void 0 ? void 0 : activePath.state : 'none'; var createOptions = (0, _react.useMemo)(() => { if (disableNew) { return []; } return (initialValueTemplateItems || [] // eslint-disable-next-line max-nested-callbacks ).filter(i => type.to.some(refType => refType.name === i.template.schemaType)).map(item => ({ id: item.id, title: item.title || "".concat(item.template.schemaType, " from template ").concat(item.template.id), type: item.template.schemaType, icon: item.icon, template: { id: item.template.id, params: item.parameters }, permission: { granted: item.granted, reason: item.reason } })); }, [disableNew, initialValueTemplateItems, type.to]); return /*#__PURE__*/_react.default.createElement(_ReferenceInput.ReferenceInput, _extends({}, props, { onSearch: handleSearch, liveEdit: isDocumentLiveEdit, getReferenceInfo: adapter.getReferenceInfo, ref: ref, selectedState: selectedState, editReferenceLinkComponent: EditReferenceLink, createOptions: createOptions, onEditReference: handleEditReference })); }); var _default = (0, _withValuePath.default)((0, _withDocument.default)(SanityReferenceInput)); exports.default = _default;