@atlaskit/editor-plugin-date
Version:
Date plugin for @atlaskit/editor-core
120 lines (119 loc) • 6.06 kB
JavaScript
"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;
};
};
};