UNPKG

@atlaskit/editor-plugin-date

Version:

Date plugin for @atlaskit/editor-core

120 lines (119 loc) 6.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.insertDateCommand = exports.deleteDateCommand = void 0; var _analytics = require("@atlaskit/editor-common/analytics"); var _utils = require("@atlaskit/editor-common/utils"); var _model = require("@atlaskit/editor-prosemirror/model"); var _state = require("@atlaskit/editor-prosemirror/state"); var _utils2 = require("@atlaskit/editor-prosemirror/utils"); var _platformFeatureFlags = require("@atlaskit/platform-feature-flags"); var _internal = require("../ui/DatePicker/utils/internal"); var _pluginKey = require("./plugin-key"); /** Delete the date and close the datepicker */ var deleteDateCommand = exports.deleteDateCommand = function deleteDateCommand(pluginInjectionApi) { return function (_ref) { var _pluginInjectionApi$d, _pluginInjectionApi$d2; var tr = _ref.tr; var _ref2 = (_pluginInjectionApi$d = pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$d2 = pluginInjectionApi.date) === null || _pluginInjectionApi$d2 === void 0 ? void 0 : _pluginInjectionApi$d2.sharedState.currentState()) !== null && _pluginInjectionApi$d !== void 0 ? _pluginInjectionApi$d : {}, showDatePickerAt = _ref2.showDatePickerAt; if (!showDatePickerAt) { return tr; } tr.delete(showDatePickerAt, showDatePickerAt + 1).setMeta(_pluginKey.pluginKey, { showDatePickerAt: null, isNew: false }); return tr; }; }; var insertDateCommand = exports.insertDateCommand = function insertDateCommand(pluginInjectionApi) { return function (_ref3) { var date = _ref3.date, inputMethod = _ref3.inputMethod, commitMethod = _ref3.commitMethod, _ref3$enterPressed = _ref3.enterPressed, enterPressed = _ref3$enterPressed === void 0 ? true : _ref3$enterPressed; return function (_ref4) { var _pluginInjectionApi$d3, _pluginInjectionApi$d4; var tr = _ref4.tr; var schema = tr.doc.type.schema; var timestamp; if (date) { timestamp = Date.UTC(date.year, date.month - 1, date.day).toString(); } else { timestamp = (0, _utils.todayTimestampInUTC)(); } if (inputMethod) { var _pluginInjectionApi$a; var resolvedInputMethod = (0, _platformFeatureFlags.fg)('platform_editor_element_browser_analytic') ? inputMethod : _analytics.INPUT_METHOD.QUICK_INSERT; pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$a = pluginInjectionApi.analytics) === null || _pluginInjectionApi$a === void 0 || (_pluginInjectionApi$a = _pluginInjectionApi$a.actions) === null || _pluginInjectionApi$a === void 0 || _pluginInjectionApi$a.attachAnalyticsEvent({ action: _analytics.ACTION.INSERTED, actionSubject: _analytics.ACTION_SUBJECT.DOCUMENT, actionSubjectId: _analytics.ACTION_SUBJECT_ID.DATE, eventType: _analytics.EVENT_TYPE.TRACK, attributes: { inputMethod: resolvedInputMethod } })(tr); } if (commitMethod) { var _pluginInjectionApi$a2; pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$a2 = pluginInjectionApi.analytics) === null || _pluginInjectionApi$a2 === void 0 || (_pluginInjectionApi$a2 = _pluginInjectionApi$a2.actions) === null || _pluginInjectionApi$a2 === void 0 || _pluginInjectionApi$a2.attachAnalyticsEvent({ eventType: _analytics.EVENT_TYPE.TRACK, action: _analytics.ACTION.COMMITTED, actionSubject: _analytics.ACTION_SUBJECT.DATE, attributes: { commitMethod: commitMethod, isValid: date !== undefined, isToday: (0, _internal.isToday)(date) } })(tr); } var _ref5 = (_pluginInjectionApi$d3 = pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$d4 = pluginInjectionApi.date) === null || _pluginInjectionApi$d4 === void 0 ? void 0 : _pluginInjectionApi$d4.sharedState.currentState()) !== null && _pluginInjectionApi$d3 !== void 0 ? _pluginInjectionApi$d3 : {}, showDatePickerAt = _ref5.showDatePickerAt; if (!showDatePickerAt) { var dateNode = schema.nodes.date.createChecked({ timestamp: timestamp }); var textNode = schema.text(' '); var fragment = _model.Fragment.fromArray([dateNode, textNode]); var _tr$selection = tr.selection, from = _tr$selection.from, to = _tr$selection.to; var insertable = (0, _utils2.canInsert)(tr.selection.$from, fragment); if (!insertable) { var parentSelection = _state.NodeSelection.create(tr.doc, tr.selection.from - tr.selection.$anchor.parentOffset - 1); tr.insert(parentSelection.to, fragment).setSelection(_state.NodeSelection.create(tr.doc, parentSelection.to + 1)); } else { tr.replaceWith(from, to, fragment).setSelection(_state.NodeSelection.create(tr.doc, from)); } if (tr.docChanged) { tr.scrollIntoView().setMeta(_pluginKey.pluginKey, { isNew: true }); } return tr; } if (tr.doc.nodeAt(showDatePickerAt)) { if (enterPressed) { // Setting selection to outside the date node causes showDatePickerAt // to be set to null by the PM plugin (onSelectionChanged), which will // immediately close the datepicker once a valid date is typed in. // Adding this check forces it to stay open until the user presses Enter. tr = tr.setSelection(_state.Selection.near(tr.doc.resolve(showDatePickerAt + 2))); } tr = tr.setNodeMarkup(showDatePickerAt, schema.nodes.date, { timestamp: timestamp }).setMeta(_pluginKey.pluginKey, { isNew: false }).scrollIntoView(); if (!enterPressed) { tr = tr.setSelection(_state.NodeSelection.create(tr.doc, showDatePickerAt)); } } return tr; }; }; };