Files
ftb-project-management/apps/web/lib/requirement-grouping.ts
2026-06-26 15:12:24 +08:00

21 lines
655 B
TypeScript

export function orderByRequirementForGrouping<T>(
items: readonly T[],
requirementIds: readonly string[],
getRequirementId: (item: T) => string | undefined,
): T[] {
const rankByRequirement = new Map(requirementIds.map((id, index) => [id, index]));
const trailingRank = requirementIds.length;
return [...items]
.map((item, index) => {
const requirementId = getRequirementId(item);
return {
item,
index,
rank: requirementId ? (rankByRequirement.get(requirementId) ?? trailingRank) : trailingRank,
};
})
.sort((a, b) => a.rank - b.rank || a.index - b.index)
.map(({ item }) => item);
}