@sanity/form-builder
Version:
Sanity form builder
141 lines (140 loc) • 9.93 kB
JavaScript
;
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 _ArrayItemReferenceInput = require("../../../inputs/ReferenceInput/ArrayItemReferenceInput");
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 valuePath = (0, _react.useMemo)(getValuePath, [getValuePath]);
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;
}, [documentTypeName]);
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(_ArrayItemReferenceInput.ArrayItemReferenceInput, _extends({}, props, {
liveEdit: isDocumentLiveEdit,
onSearch: handleSearch,
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;