UNPKG

@atlaskit/editor-plugin-extension

Version:

editor-plugin-extension plugin for @atlaskit/editor-core

205 lines (202 loc) 9.04 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = _interopRequireWildcard(require("react")); var _reactIntl = require("react-intl"); var _extensions = require("@atlaskit/editor-common/extensions"); var _form = require("@atlaskit/form"); var _select = require("@atlaskit/select"); var _FieldMessages = _interopRequireDefault(require("../FieldMessages")); var _utils = require("../utils"); var _SelectItem = require("./SelectItem"); var _UnhandledType = _interopRequireDefault(require("./UnhandledType")); function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } function FieldError(_ref) { var name = _ref.name, field = _ref.field; var type = field.options.resolver.type; return /*#__PURE__*/_react.default.createElement(_UnhandledType.default, { key: name, field: field, errorMessage: "Field \"".concat(name, "\" can't be rendered. Missing resolver for \"").concat(type, "\".") }); } function CustomSelect(_ref2) { var name = _ref2.name, autoFocus = _ref2.autoFocus, extensionManifest = _ref2.extensionManifest, placeholder = _ref2.placeholder, field = _ref2.field, onFieldChange = _ref2.onFieldChange, parameters = _ref2.parameters, intl = _ref2.intl; var fieldDefaultValue = field.defaultValue, description = field.description, isMultiple = field.isMultiple, isRequired = field.isRequired, label = field.label, options = field.options, isDisabled = field.isDisabled; var _useState = (0, _react.useState)(true), _useState2 = (0, _slicedToArray2.default)(_useState, 2), loading = _useState2[0], setLoading = _useState2[1]; var _useState3 = (0, _react.useState)(null), _useState4 = (0, _slicedToArray2.default)(_useState3, 2), resolver = _useState4[0], setResolver = _useState4[1]; var _useState5 = (0, _react.useState)([]), _useState6 = (0, _slicedToArray2.default)(_useState5, 2), defaultOptions = _useState6[0], setDefaultOptions = _useState6[1]; var _useState7 = (0, _react.useState)(undefined), _useState8 = (0, _slicedToArray2.default)(_useState7, 2), defaultValue = _useState8[0], setDefaultValue = _useState8[1]; (0, _react.useEffect)(function () { var cancel = false; function fetchResolver() { return _fetchResolver.apply(this, arguments); } function _fetchResolver() { _fetchResolver = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() { var _resolver, _options; return _regenerator.default.wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: setLoading(true); _context.prev = 1; _resolver = (0, _extensions.getCustomFieldResolver)(extensionManifest, field.options.resolver); if (!cancel) { _context.next = 5; break; } return _context.abrupt("return"); case 5: setResolver(function () { return _resolver; }); // fetch the default values _context.next = 8; return _resolver(undefined, fieldDefaultValue, parameters); case 8: _options = _context.sent; setDefaultOptions(_options); if (!cancel) { _context.next = 12; break; } return _context.abrupt("return"); case 12: // filter returned values to match the defaultValue if (fieldDefaultValue && isMultiple) { setDefaultValue(_options.filter(function (option) { return fieldDefaultValue.includes(option.value); })); } if (fieldDefaultValue && !isMultiple) { setDefaultValue(_options.find(function (option) { return fieldDefaultValue === option.value; })); } _context.next = 19; break; case 16: _context.prev = 16; _context.t0 = _context["catch"](1); // eslint-disable-next-line no-console console.error(_context.t0); case 19: setLoading(false); case 20: case "end": return _context.stop(); } }, _callee, null, [[1, 16]]); })); return _fetchResolver.apply(this, arguments); } fetchResolver(); return function () { cancel = true; }; }, [extensionManifest, field.options.resolver, fieldDefaultValue, isMultiple, parameters]); function _formatCreateLabel(value) { if (!value) { return null; } var message = intl.formatMessage(_extensions.configPanelMessages.createOption); return "".concat(message, " \"").concat(value, "\""); } var isCreatable = options.isCreatable, customFormatCreateLabel = options.formatCreateLabel; return /*#__PURE__*/_react.default.createElement(_form.Field, { name: name, label: label, isRequired: isRequired, defaultValue: defaultValue // eslint-disable-next-line @atlassian/perf-linting/no-unstable-inline-props -- Ignored via go/ees017 (to be fixed) , validate: function validate(value) { return (0, _utils.validate)(field, value); }, testId: "config-panel-custom-select-".concat(name), isDisabled: isDisabled }, function (_ref3) { var fieldProps = _ref3.fieldProps, error = _ref3.error; return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, resolver && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_select.AsyncCreatableSelect // Ignored via go/ees005 // eslint-disable-next-line react/jsx-props-no-spreading , (0, _extends2.default)({}, fieldProps, { // eslint-disable-next-line @atlassian/perf-linting/no-unstable-inline-props -- Ignored via go/ees017 (to be fixed) onChange: function onChange(value) { fieldProps.onChange(value); // We assume onChange is called whenever values actually changed // for isDirty onFieldChange(name, true); } // add type cast to avoid adding a "IsMulti" generic prop (TODO: ED-12072) , isMulti: isMultiple || false, isClearable: true // eslint-disable-next-line @atlassian/perf-linting/no-unstable-inline-props -- Ignored via go/ees017 (to be fixed) , isValidNewOption: function isValidNewOption(value) { return !!(isCreatable && value); }, validationState: error ? 'error' : 'default', defaultOptions: defaultOptions // eslint-disable-next-line @atlassian/perf-linting/no-unstable-inline-props -- Ignored via go/ees017 (to be fixed) , formatCreateLabel: function formatCreateLabel(value) { return customFormatCreateLabel ? customFormatCreateLabel(value) : _formatCreateLabel(value); }, formatOptionLabel: _SelectItem.formatOptionLabel // eslint-disable-next-line @atlassian/perf-linting/no-unstable-inline-props -- Ignored via go/ees017 (to be fixed) , loadOptions: function loadOptions(searchTerm) { return resolver(searchTerm, fieldDefaultValue, parameters); }, autoFocus: autoFocus, placeholder: placeholder })), /*#__PURE__*/_react.default.createElement(_FieldMessages.default, { error: error, description: description })), !loading && !resolver && /*#__PURE__*/_react.default.createElement(FieldError, { name: name, field: field })); }); } // eslint-disable-next-line @typescript-eslint/ban-types var _default_1 = (0, _reactIntl.injectIntl)(CustomSelect); var _default = exports.default = _default_1;