2019-07-04 17:31:15 +02:00
|
|
|
// @flow
|
|
|
|
|
import type { Plugin, PluginGroup } from "@scm-manager/ui-types";
|
|
|
|
|
|
|
|
|
|
export default function groupByCategory(
|
|
|
|
|
plugins: Plugin[]
|
|
|
|
|
): PluginGroup[] {
|
|
|
|
|
let groups = {};
|
|
|
|
|
for (let plugin of plugins) {
|
2019-07-25 11:34:16 +02:00
|
|
|
const groupName = plugin.category;
|
2019-07-04 17:31:15 +02:00
|
|
|
|
|
|
|
|
let group = groups[groupName];
|
|
|
|
|
if (!group) {
|
|
|
|
|
group = {
|
|
|
|
|
name: groupName,
|
|
|
|
|
plugins: []
|
|
|
|
|
};
|
|
|
|
|
groups[groupName] = group;
|
|
|
|
|
}
|
|
|
|
|
group.plugins.push(plugin);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let groupArray = [];
|
|
|
|
|
for (let groupName in groups) {
|
|
|
|
|
const group = groups[groupName];
|
|
|
|
|
group.plugins.sort(sortByName);
|
|
|
|
|
groupArray.push(groups[groupName]);
|
|
|
|
|
}
|
|
|
|
|
groupArray.sort(sortByName);
|
|
|
|
|
return groupArray;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function sortByName(a, b) {
|
|
|
|
|
if (a.name < b.name) {
|
|
|
|
|
return -1;
|
|
|
|
|
} else if (a.name > b.name) {
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|