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

View file

@ -570,6 +570,26 @@ describe('Menu module', () => {
const fsc = menu.getMenuItemById('fullScreen') const fsc = menu.getMenuItemById('fullScreen')
assert.equal(menu.items[0].submenu.items[0], fsc) 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', () => { describe('Menu.insert', () => {