UNPKG

@atlaskit/editor-plugin-date

Version:

Date plugin for @atlaskit/editor-core

85 lines (82 loc) 3.49 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.DateNodeView = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _model = require("@atlaskit/editor-prosemirror/model"); var _actions = require("../pm-plugins/actions"); var _dateNodeSpec = require("./dateNodeSpec"); /** * */ var DateNodeView = exports.DateNodeView = /*#__PURE__*/function () { /** * * @param node * @param view * @param getPos * @param intl * @param decorations * @example */ function DateNodeView(node, view, getPos, intl, decorations) { var _this = this; (0, _classCallCheck2.default)(this, DateNodeView); (0, _defineProperty2.default)(this, "parentTaskState", ''); this.node = node; this.intl = intl; this.view = view; this.getPos = getPos; var spec = (0, _dateNodeSpec.dateToDOM)(node, this.view.state, this.getPos, this.intl); var _DOMSerializer$render = _model.DOMSerializer.renderSpec(document, spec), dom = _DOMSerializer$render.dom; this.dom = dom; // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners dom.addEventListener('click', function (event) { event.stopImmediatePropagation(); var _this$view = _this.view, state = _this$view.state, dispatch = _this$view.dispatch; (0, _actions.setDatePickerAt)(state.selection.from)(state, dispatch); }); this.parentTaskState = DateNodeView.getParentTaskState(decorations); } /** * * @param node * @param decorations * @example */ return (0, _createClass2.default)(DateNodeView, [{ key: "update", value: function update(node, decorations) { // we're only interested in two scenarios to trigger a DOM update: // 1. the date value (timestamp) has changed // 2. A wrapping taskitem state (if present) has changed // in all other cases, we tell prosemirror to ignore DOM updates // if new changes are added to the DOM structure, they will need to be // coded here var hasDateChanged = node.attrs.timestamp !== this.node.attrs.timestamp; var parentTaskState = DateNodeView.getParentTaskState(decorations); var parentTaskStateChanged = parentTaskState !== this.parentTaskState; // update local state after comparisons ... this.parentTaskState = parentTaskState; this.node = node; var skipProseMirrorDomUpdate = !hasDateChanged && !parentTaskStateChanged; return skipProseMirrorDomUpdate; } }], [{ key: "getParentTaskState", value: function getParentTaskState(decorations) { var _parentTaskDecoration, _parentTaskDecoration2; var parentTaskDecoration = decorations.find(function (d) { return d.spec.dataTaskNodeCheckState !== undefined; }); return (_parentTaskDecoration = parentTaskDecoration === null || parentTaskDecoration === void 0 || (_parentTaskDecoration2 = parentTaskDecoration.spec) === null || _parentTaskDecoration2 === void 0 ? void 0 : _parentTaskDecoration2.dataTaskNodeCheckState) !== null && _parentTaskDecoration !== void 0 ? _parentTaskDecoration : ''; } }]); }();