UNPKG

@atlaskit/editor-plugin-editor-disabled

Version:

Editor disabled plugin for @atlaskit/editor-core

144 lines (141 loc) 5.58 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.pluginKey = exports.editorDisabledPlugin = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _rafSchd = _interopRequireDefault(require("raf-schd")); var _safePlugin = require("@atlaskit/editor-common/safe-plugin"); var _utils = require("@atlaskit/editor-common/utils"); var _state = require("@atlaskit/editor-prosemirror/state"); var _reducer = require("./pm-plugins/reducer"); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var pluginKey = exports.pluginKey = new _state.PluginKey('editorDisabledPlugin'); var _pluginFactory = (0, _utils.pluginFactory)(pluginKey, _reducer.reducer), getPluginState = _pluginFactory.getPluginState; /* Stores the state of the editor enabled/disabled for panel and floating toolbar to subscribe to through useSharedPluginState. Otherwise the NodeViews won't re-render when it changes. */ function createPlugin(dispatch, options) { var scheduleEditorDisabledUpdate = (0, _rafSchd.default)(function (view) { if (getPluginState(view.state).editorDisabled !== !view.editable) { var disabledMeta = { editorDisabled: !view.editable, disabledByPlugin: getPluginState(view.state).disabledByPlugin }; var tr = view.state.tr.setMeta(pluginKey, disabledMeta).setMeta('editorDisabledPlugin', disabledMeta); tr.setMeta('isLocal', true); view.dispatch(tr); } }); return new _safePlugin.SafePlugin({ key: pluginKey, state: { init: function init() { var _options$initialDisab; return { editorDisabled: (_options$initialDisab = options === null || options === void 0 ? void 0 : options.initialDisabledState) !== null && _options$initialDisab !== void 0 ? _options$initialDisab : false, disabledByPlugin: false }; }, apply: function apply(tr, pluginState) { var meta = tr.getMeta(pluginKey); if (meta) { if ('action' in meta) { return (0, _reducer.reducer)(pluginState, meta); } return pluginState.editorDisabled !== meta.editorDisabled ? _objectSpread(_objectSpread({}, pluginState), meta) : pluginState; } return pluginState; } }, props: { // If we set to undefined it respects the previous value. // Prosemirror doesn't have this typed correctly for this type of behaviour // @ts-expect-error editable: function editable(state) { var _pluginKey$getState; var _ref = (_pluginKey$getState = pluginKey.getState(state)) !== null && _pluginKey$getState !== void 0 ? _pluginKey$getState : { disabledByPlugin: false }, disabledByPlugin = _ref.disabledByPlugin; return disabledByPlugin ? false : undefined; } }, view: function view(_view) { // schedule on mount scheduleEditorDisabledUpdate(_view); return { update: function update(view) { scheduleEditorDisabledUpdate(view); }, destroy: function destroy() { scheduleEditorDisabledUpdate.cancel(); } }; } }); } /** * Editor disabled plugin to be added to an `EditorPresetBuilder` and used with `ComposableEditor` * from `@atlaskit/editor-core`. * * @param options - Plugin configuration options * @returns EditorDisabledPlugin * * @example * ```typescript * // Basic usage * .add(editorDisabledPlugin) * * // With initial disabled state * .add(editorDisabledPlugin, { initialDisabledState: true }) * ``` */ var editorDisabledPlugin = exports.editorDisabledPlugin = function editorDisabledPlugin(_ref2) { var _ref2$config = _ref2.config, options = _ref2$config === void 0 ? {} : _ref2$config; return { name: 'editorDisabled', getSharedState: function getSharedState(editorState) { if (!editorState) { return { editorDisabled: false }; } var pluginState = pluginKey.getState(editorState); if (!pluginState) { return { editorDisabled: false }; } return { editorDisabled: pluginState.disabledByPlugin || pluginState.editorDisabled }; }, pmPlugins: function pmPlugins() { return [{ name: 'editorDisabled', plugin: function plugin(_ref3) { var dispatch = _ref3.dispatch; return createPlugin(dispatch, options); } }]; }, commands: { toggleDisabled: function toggleDisabled(disabled) { return function (_ref4) { var tr = _ref4.tr; return tr.setMeta(pluginKey, { action: _reducer.ACTION.TOGGLE_DISABLED, disabled: disabled }); }; } } }; };