UNPKG

@sanity/form-builder

Version:
96 lines (95 loc) • 7.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _paths = require("@sanity/util/paths"); var _client = _interopRequireDefault(require("part:@sanity/base/client")); var _react = _interopRequireWildcard(require("react")); var _rxjs = require("rxjs"); var _operators = require("rxjs/operators"); var _CrossDatasetReferenceInput = require("../../../inputs/CrossDatasetReferenceInput"); var _withDocument = _interopRequireDefault(require("../../../utils/withDocument")); var _withValuePath = _interopRequireDefault(require("../../../utils/withValuePath")); var _getReferenceInfo = require("./datastores/getReferenceInfo"); var _search = require("./datastores/search"); 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 _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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, _paths.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 SanityCrossDatasetReferenceInput = /*#__PURE__*/(0, _react.forwardRef)(function SanityCrossDatasetReferenceInput(props, ref) { var getValuePath = props.getValuePath, type = props.type, document = props.document; var crossDatasetClient = (0, _react.useMemo)(() => { return _client.default.withConfig({ dataset: type.dataset, apiVersion: '2022-03-07', ignoreBrowserTokenWarning: true }) // seems like this is required to prevent this client from sometimes magically get mutated with a new projectId and dataset .clone(); }, [type.dataset]); var documentRef = useValueRef(document); 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 (0, _search.search)(crossDatasetClient, searchString, type, _objectSpread(_objectSpread({}, type.options), {}, { filter, params, tag: 'search.cross-dataset-reference' })); }), (0, _operators.catchError)(err => { var _type$options; var isQueryError = err.details && err.details.type === 'queryParseError'; if ((_type$options = type.options) !== null && _type$options !== void 0 && _type$options.filter && isQueryError) { err.message = "Invalid reference filter, please check the custom \"filter\" option"; } return (0, _rxjs.throwError)(err); })), [crossDatasetClient, documentRef, getValuePath, type]); var getReferenceInfo = (0, _react.useMemo)(() => (0, _getReferenceInfo.createGetReferenceInfo)(crossDatasetClient), [crossDatasetClient]); return /*#__PURE__*/_react.default.createElement(_CrossDatasetReferenceInput.CrossDatasetReferenceInput, _extends({}, props, { onSearch: handleSearch, getReferenceInfo: getReferenceInfo, ref: ref })); }); var _default = (0, _withValuePath.default)((0, _withDocument.default)(SanityCrossDatasetReferenceInput)); exports.default = _default;