Browse Source

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

Shelley Vohr 6 years ago
parent
commit
02cd96875d
2 changed files with 29 additions and 3 deletions
  1. 9 3
      lib/browser/api/menu-utils.js
  2. 20 0
      spec/api-menu-spec.js

+ 9 - 3
lib/browser/api/menu-utils.js

@@ -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
 }
 

+ 20 - 0
spec/api-menu-spec.js

@@ -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', () => {