@teambit/workspace
Version:
82 lines (80 loc) • 2.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useWorkspaceAggregation = useWorkspaceAggregation;
function _react() {
const data = require("react");
_react = function () {
return data;
};
return data;
}
function _namespaceSort() {
const data = require("./namespace-sort");
_namespaceSort = function () {
return data;
};
return data;
}
function _filterUtils() {
const data = require("./filter-utils");
_filterUtils = function () {
return data;
};
return data;
}
function useWorkspaceAggregation(items, aggregation, filters) {
const filtered = (0, _react().useMemo)(() => (0, _filterUtils().filterItems)(items, filters), [items, filters]);
if (aggregation === 'none') {
return {
groups: [{
name: 'all',
displayName: '',
items: (0, _namespaceSort().sortItemsByNamespace)(filtered)
}],
groupType: 'none',
availableAggregations: ['namespaces', 'scopes', 'none'],
filteredCount: filtered.length
};
}
if (aggregation === 'namespaces') {
const map = new Map();
for (const item of filtered) {
const ns = item.component.id.namespace || '/';
if (!map.has(ns)) map.set(ns, []);
map.get(ns).push(item);
}
const sortedKeys = (0, _namespaceSort().sortNamespacesAdvanced)([...map.keys()]);
const groups = sortedKeys.map(ns => ({
name: ns,
displayName: ns,
items: (0, _namespaceSort().sortItemsByNamespace)(map.get(ns))
}));
return {
groups,
groupType: 'namespaces',
availableAggregations: ['namespaces', 'scopes', 'none'],
filteredCount: filtered.length
};
}
const map = new Map();
for (const item of filtered) {
const scope = item.component.id.scope;
if (!map.has(scope)) map.set(scope, []);
map.get(scope).push(item);
}
const sortedScopes = [...map.keys()].sort();
const groups = sortedScopes.map(sc => ({
name: sc,
displayName: sc,
items: (0, _namespaceSort().sortItemsByNamespace)(map.get(sc))
}));
return {
groups,
groupType: 'scopes',
availableAggregations: ['namespaces', 'scopes', 'none'],
filteredCount: filtered.length
};
}
//# sourceMappingURL=use-workspace-aggregation.js.map