export function groupByArea()

in src/common/pr-utils/grouping.ts [20:40]


export function groupByArea(prs: PrItem[], { areas }: Config): GroupedByArea {
  // TODO: How to handle/track PRs in multiple areas.
  const grouped = prs.reduce<{ unknown: PrItem[]; areas: { [title: string]: PrItem[] } }>(
    (grouped, pr) => {
      const matchingAreas = areas.filter(
        ({ labels }) => labels && pr.labels.some(({ name }) => name && labels.includes(name))
      );

      if (matchingAreas.length === 0) {
        grouped.unknown.push(pr);
      } else {
        const [area] = matchingAreas.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
        grouped.areas[area.title] = grouped.areas[area.title] ?? [];
        grouped.areas[area.title].push(pr);
      }
      return grouped;
    },
    { unknown: [], areas: {} }
  );
  return [grouped.areas, grouped.unknown];
}