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