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