UNPKG

@atlaskit/editor-plugin-date

Version:

Date plugin for @atlaskit/editor-core

113 lines (111 loc) 4.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.setDatePickerAt = exports.openDatePicker = exports.focusDateInput = exports.createDate = exports.closeDatePickerWithAnalytics = exports.closeDatePicker = 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 _internal = require("../ui/DatePicker/utils/internal"); var _pluginKey = require("./plugin-key"); var createDate = exports.createDate = function createDate(isQuickInsertAction) { return function (state) { var tr = state.tr; var annotationMarksForPos = (0, _utils.getAnnotationMarksForPos)(tr.selection.$head); var dateNode = state.schema.nodes.date.createChecked({ timestamp: (0, _utils.todayTimestampInUTC)() }, null, annotationMarksForPos); var fragment = _model.Fragment.fromArray([dateNode, state.schema.text(' ', annotationMarksForPos)]); 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.insert(tr.selection.from, fragment).setSelection(_state.NodeSelection.create(tr.doc, tr.selection.from - fragment.size)); } var newPluginState = { isQuickInsertAction: isQuickInsertAction, showDatePickerAt: tr.selection.from, isNew: true, isDateEmpty: false, focusDateInput: false, isInitialised: true }; return tr.setMeta(_pluginKey.pluginKey, newPluginState); }; }; /** Focus input */ var focusDateInput = exports.focusDateInput = function focusDateInput() { return function (state, dispatch) { var pluginState = _pluginKey.pluginKey.getState(state); if (!pluginState || pluginState.showDatePickerAt === null) { return false; } if (!dispatch) { return false; } var tr = state.tr.setMeta(_pluginKey.pluginKey, { focusDateInput: true }); dispatch(tr); return true; }; }; var setDatePickerAt = exports.setDatePickerAt = function setDatePickerAt(showDatePickerAt) { return function (state, dispatch) { dispatch(state.tr.setMeta(_pluginKey.pluginKey, { showDatePickerAt: showDatePickerAt })); return true; }; }; var closeDatePicker = exports.closeDatePicker = function closeDatePicker() { return function (state, dispatch) { var _ref = _pluginKey.pluginKey.getState(state) || {}, showDatePickerAt = _ref.showDatePickerAt; if (!dispatch) { return false; } var tr = showDatePickerAt ? state.tr.setMeta(_pluginKey.pluginKey, { showDatePickerAt: null, isNew: false }).setSelection(_state.Selection.near(state.tr.doc.resolve(showDatePickerAt + 2))) : state.tr.setMeta(_pluginKey.pluginKey, { isNew: false }); dispatch(tr); return false; }; }; var closeDatePickerWithAnalytics = exports.closeDatePickerWithAnalytics = function closeDatePickerWithAnalytics(_ref2) { var _pluginInjectionApi$a; var date = _ref2.date, pluginInjectionApi = _ref2.pluginInjectionApi; 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({ eventType: _analytics.EVENT_TYPE.TRACK, action: _analytics.ACTION.COMMITTED, actionSubject: _analytics.ACTION_SUBJECT.DATE, attributes: { commitMethod: _analytics.INPUT_METHOD.BLUR, isValid: date !== undefined, isToday: (0, _internal.isToday)(date) } }); return closeDatePicker(); }; var openDatePicker = exports.openDatePicker = function openDatePicker() { return function (state, dispatch) { var $from = state.selection.$from; var node = state.doc.nodeAt($from.pos); if (node && node.type.name === state.schema.nodes.date.name) { var showDatePickerAt = $from.pos; if (dispatch) { dispatch(state.tr.setMeta(_pluginKey.pluginKey, { showDatePickerAt: showDatePickerAt }).setSelection(_state.NodeSelection.create(state.doc, showDatePickerAt))); } } return false; }; };