bananas-commerce-admin
Version:
What's this, an admin for apes?
36 lines (34 loc) • 1.04 kB
text/typescript
import { ContribComponentListItem, ContribComponentMap } from "../types";
/**
* Filters and organizes UI component contributions by tags.
*
* @param {ContribComponentMap} map - Component map as imported/exported from BCOM
* @param {string[]} filter - Optional tags to filter and order components
* @returns {ContribComponentListItem[]}
*
* @example
* // Get all contribs
* contribute(Bananas.subscription.contrib.dashboard);
*
* @example
* // Get specific contribs in order
* contribute(Bananas.subscription.contrib.dashboard, "dashboard:stats:subscription:events", "dashboard:stats:subscription:count");
*/
export const contribute = (
map: ContribComponentMap | null | undefined,
...filter: string[]
): ContribComponentListItem[] => {
if (map == null) return [];
if (filter && filter.length > 0) {
return filter
.filter((tag) => tag in map)
.map((tag) => ({
tag,
contrib: map[tag],
}));
}
return Object.entries(map).map(([tag, contrib]) => ({
tag,
contrib,
}));
};