fix: ability to fetch separators by id (#15290)
This commit is contained in:
parent
6d844a0b67
commit
f9f34fd628
2 changed files with 29 additions and 3 deletions
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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', () => {
|
||||||
|
|
Loading…
Reference in a new issue