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

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