@atlaskit/editor-plugin-status
Version:
Status plugin for @atlaskit/editor-core
79 lines (77 loc) • 4.2 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getSuggestedStatuses = exports.MAX_SUGGESTED_STATUSES_OLD = exports.MAX_SUGGESTED_STATUSES = void 0;
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _statusColors = require("@atlaskit/status/status-colors");
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 = 20;
// Remove when cleaning up `platform_editor_status_popup_suggestions_patch_1`.
var MAX_SUGGESTED_STATUSES_OLD = exports.MAX_SUGGESTED_STATUSES_OLD = 7;
// `color` may be a legacy name or a hex value that render the same hue (e.g. `green` and
// `#D3F1A7` both resolve to `accent-lime`), so the key is built from the resolved appearance
// rather than the raw attribute value — otherwise both variants would surface as suggestions.
var getStatusKey = function getStatusKey(_ref) {
var color = _ref.color,
text = _ref.text;
return "".concat((0, _statusColors.getLozengeAppearance)(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;
});
};