fix: order menu items before filtering excess separators (#25931)

Co-authored-by: Samuel Attard <sattard@slack-corp.com>
This commit is contained in:
Shelley Vohr
2020-10-15 08:13:55 -07:00
committed by GitHub
parent 04fdfe610c
commit 38d126fb5c
3 changed files with 46 additions and 14 deletions

View File

@@ -160,8 +160,14 @@ function sortGroups (groups) {
}
function sortMenuItems (menuItems) {
const isSeparator = (item) => item.type === 'separator';
const separators = menuItems.filter(i => i.type === 'separator');
const isSeparator = (opts) => {
return opts.type === 'separator' &&
!opts.before &&
!opts.after &&
!opts.beforeGroupContaining &&
!opts.afterGroupContaining;
};
const separators = menuItems.filter(isSeparator);
// Split the items into their implicit groups based upon separators.
const groups = splitArray(menuItems, isSeparator);

View File

@@ -182,11 +182,11 @@ Menu.buildFromTemplate = function (template) {
throw new TypeError('Invalid template for MenuItem: must have at least one of label, role or type');
}
const filtered = removeExtraSeparators(template);
const sorted = sortTemplate(filtered);
const sorted = sortTemplate(template);
const filtered = removeExtraSeparators(sorted);
const menu = new Menu();
sorted.forEach(item => {
filtered.forEach(item => {
if (item instanceof MenuItem) {
menu.append(item);
} else {