fix: ability to fetch separators by id (#15299)

This commit is contained in:
Shelley Vohr 2018-10-19 21:58:07 -07:00 committed by GitHub
parent 9349b0a273
commit 02cd96875d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 3 deletions

View file

@ -15,10 +15,15 @@ function splitArray (arr, predicate) {
return result
}
function joinArrays (arrays, joiner) {
function joinArrays (arrays, joinIDs) {
return arrays.reduce((joined, arr, i) => {
if (i > 0 && arr.length) {
joined.push(joiner)
if (joinIDs.length > 0) {
joined.push(joinIDs[0])
joinIDs.splice(0, 1)
} else {
joined.push({ type: 'separator' })
}
}
return joined.concat(arr)
}, [])
@ -154,6 +159,7 @@ function sortGroups (groups) {
function sortMenuItems (menuItems) {
const isSeparator = (item) => item.type === 'separator'
const separators = menuItems.filter(i => i.type === 'separator')
// Split the items into their implicit groups based upon separators.
const groups = splitArray(menuItems, isSeparator)
@ -161,7 +167,7 @@ function sortMenuItems (menuItems) {
const mergedGroupsWithSortedItems = mergedGroups.map(sortItemsInGroup)
const sortedGroups = sortGroups(mergedGroupsWithSortedItems)
const joined = joinArrays(sortedGroups, { type: 'separator' })
const joined = joinArrays(sortedGroups, separators)
return joined
}

View file

@ -570,6 +570,26 @@ describe('Menu module', () => {
const fsc = menu.getMenuItemById('fullScreen')
assert.equal(menu.items[0].submenu.items[0], fsc)
})
it('should return the separator with the given id', () => {
const menu = Menu.buildFromTemplate([
{
label: 'Item 1',
id: 'item_1'
},
{
id: 'separator',
type: 'separator'
},
{
label: 'Item 2',
id: 'item_2'
}
])
const separator = menu.getMenuItemById('separator')
assert.equal(typeof separator, 'object')
assert.equal(separator, menu.items[1])
})
})
describe('Menu.insert', () => {