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

This commit is contained in:
Shelley Vohr 2018-10-19 13:09:40 -07:00 committed by GitHub
parent 6d844a0b67
commit f9f34fd628
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 3 deletions

View file

@ -17,10 +17,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)
}, [])
@ -156,6 +161,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)
@ -163,7 +169,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

@ -591,6 +591,26 @@ describe('Menu module', () => {
const fsc = menu.getMenuItemById('fullScreen')
expect(menu.items[0].submenu.items[0]).to.equal(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')
expect(separator).to.be.an('object')
expect(separator).to.equal(menu.items[1])
})
})
describe('Menu.insert', () => {