UNPKG

@atlaskit/editor-plugin-status

Version:

Status plugin for @atlaskit/editor-core

72 lines (71 loc) 3.62 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.getSuggestedStatuses = exports.MAX_SUGGESTED_STATUSES = void 0; var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _excluded = ["distance"]; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var MAX_SUGGESTED_STATUSES = exports.MAX_SUGGESTED_STATUSES = 7; var getStatusKey = function getStatusKey(_ref) { var color = _ref.color, text = _ref.text; return "".concat(color, ":").concat(text.trim().toLowerCase()); }; var getDisplayText = function getDisplayText(status, shouldUppercaseText) { return shouldUppercaseText && status.style !== 'mixedCase' ? status.text.toUpperCase() : status.text; }; var getSuggestedStatuses = exports.getSuggestedStatuses = function getSuggestedStatuses(_ref2) { var currentPos = _ref2.currentPos, currentStatus = _ref2.currentStatus, doc = _ref2.doc, _ref2$limit = _ref2.limit, limit = _ref2$limit === void 0 ? MAX_SUGGESTED_STATUSES : _ref2$limit, _ref2$shouldUppercase = _ref2.shouldUppercaseText, shouldUppercaseText = _ref2$shouldUppercase === void 0 ? false : _ref2$shouldUppercase; var closestStatusesByKey = new Map(); var currentStatusKey = getStatusKey(currentStatus); doc.descendants(function (node, pos) { if (node.type.name !== 'status' || pos === currentPos) { return; } var text = typeof node.attrs.text === 'string' ? node.attrs.text.trim() : ''; if (!text) { return; } var status = { color: node.attrs.color, localId: node.attrs.localId, style: node.attrs.style, text: text }; var statusKey = getStatusKey(status); if (status.localId === currentStatus.localId || statusKey === currentStatusKey) { return; } var existingStatus = closestStatusesByKey.get(statusKey); var nextStatus = _objectSpread(_objectSpread({}, status), {}, { distance: Math.abs(pos - currentPos), displayText: getDisplayText(status, shouldUppercaseText) }); if (!existingStatus || nextStatus.distance < existingStatus.distance) { closestStatusesByKey.set(statusKey, nextStatus); } }); return Array.from(closestStatusesByKey.values()).sort(function (statusA, statusB) { if (statusA.distance !== statusB.distance) { return statusA.distance - statusB.distance; } if (statusA.displayText !== statusB.displayText) { return statusA.displayText.localeCompare(statusB.displayText); } return statusA.color.localeCompare(statusB.color); }).slice(0, limit).map(function (_ref3) { var _distance = _ref3.distance, status = (0, _objectWithoutProperties2.default)(_ref3, _excluded); return status; }); };