@atlaskit/editor-plugin-floating-toolbar
Version:
Floating toolbar plugin for @atlaskit/editor-core
42 lines (40 loc) • 1.73 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.consolidateOverflowDropdownItems = void 0;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
// if there are more than 1 item with type `overflow-dropdown`, we should only show one and combine the options
var consolidateOverflowDropdownItems = exports.consolidateOverflowDropdownItems = function consolidateOverflowDropdownItems(overflowDropdowns) {
if (overflowDropdowns.length <= 1) {
return overflowDropdowns[0];
}
var combinedItems = overflowDropdowns.reduce(function (acc, item) {
if (item.options) {
acc.push.apply(acc, (0, _toConsumableArray2.default)(item.options));
}
return acc;
}, []);
// To filter out items that have a rank property, sort them by rank in descending order (highest rank first)
var rankedItems = combinedItems.filter(function (item) {
return 'rank' in item && typeof item.rank === 'number';
}).sort(function (a, b) {
return (b.rank || 0) - (a.rank || 0);
});
var unrankedItems = combinedItems.filter(function (item) {
return !('rank' in item && typeof item.rank === 'number');
});
var sortedItems = [].concat((0, _toConsumableArray2.default)(rankedItems), (0, _toConsumableArray2.default)(unrankedItems));
var largestDropdownWidth = overflowDropdowns.reduce(function (acc, item) {
if (item.dropdownWidth && item.dropdownWidth > acc) {
return item.dropdownWidth;
}
return acc;
}, 0);
return {
type: 'overflow-dropdown',
dropdownWidth: largestDropdownWidth,
options: sortedItems
};
};