UNPKG

@sanity/form-builder

Version:
117 lines (114 loc) 4.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _propTypes = _interopRequireDefault(require("prop-types")); var _react = _interopRequireDefault(require("react")); var _nanoPubsub = _interopRequireDefault(require("nano-pubsub")); var _fallbackInputs = require("./fallbackInputs"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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); } var RESOLVE_NULL = arg => null; function resolve(type) { var providedResolve = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : RESOLVE_NULL; var itType = type; while (itType) { var resolved = providedResolve(itType); if (resolved) { return resolved; } itType = itType.type; } return undefined; } // Memoize return values from a method that takes a single arg // memoized as a map of argument => return value function memoizeMap(method) { var map = new WeakMap(); return function memoizedMap(arg) { if (map.has(arg)) { return map.get(arg); } var val = method.call(this, arg); if (arg) { map.set(arg, val); } return val; }; } // Memoize return value from method that takes no args function memoize(method) { var called = false; var val; return function memoized() { if (called) { return val; } val = method.call(this); called = true; return val; }; } class FormBuilderContext extends _react.default.Component { constructor() { super(...arguments); _defineProperty(this, "getDocument", () => { return this.props.value; }); _defineProperty(this, "resolveInputComponent", memoizeMap(type => { var resolveInputComponent = this.props.resolveInputComponent; return resolve(type, resolveInputComponent) || _fallbackInputs.fallbackInputs[type.jsonType]; })); _defineProperty(this, "resolvePreviewComponent", memoizeMap(type => { var resolvePreviewComponent = this.props.resolvePreviewComponent; return resolve(type, resolvePreviewComponent); })); _defineProperty(this, "getChildContext", memoize(() => { var _this$props = this.props, schema = _this$props.schema, filterField = _this$props.filterField, patchChannel = _this$props.patchChannel; return { filterField: filterField, getValuePath: () => [], formBuilder: { onPatch: patchChannel ? patchChannel.onPatch : () => { // eslint-disable-next-line no-console console.warn('No patch channel provided to form-builder. If you need input based patch updates, please provide one'); return () => { // no-op }; }, schema, resolveInputComponent: this.resolveInputComponent, resolvePreviewComponent: this.resolvePreviewComponent, getDocument: this.getDocument } }; })); } render() { return this.props.children; } } exports.default = FormBuilderContext; _defineProperty(FormBuilderContext, "createPatchChannel", () => { var channel = (0, _nanoPubsub.default)(); return { onPatch: channel.subscribe, receivePatches: channel.publish }; }); _defineProperty(FormBuilderContext, "childContextTypes", { getValuePath: _propTypes.default.func, onPatch: _propTypes.default.func, filterField: _propTypes.default.func, formBuilder: _propTypes.default.shape({ schema: _propTypes.default.object, resolveInputComponent: _propTypes.default.func, document: _propTypes.default.any }) });