@atlaskit/editor-plugin-date
Version:
Date plugin for @atlaskit/editor-core
85 lines (82 loc) • 3.49 kB
JavaScript
;
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 : '';
}
}]);
}();