2026-03-06 17:22:59 +02:00
|
|
|
import React from 'react';
|
|
|
|
|
import type { SessionGroup } from '../types';
|
|
|
|
|
|
|
|
|
|
export const useGroupOrdering = (groupOrderByProject: Map<string, string[]>) => {
|
|
|
|
|
const getOrderedGroups = React.useCallback(
|
|
|
|
|
(projectId: string, groups: SessionGroup[]) => {
|
|
|
|
|
const preferredOrder = groupOrderByProject.get(projectId);
|
|
|
|
|
if (!preferredOrder || preferredOrder.length === 0) {
|
2026-03-20 01:01:03 +02:00
|
|
|
return groups;
|
2026-03-06 17:22:59 +02:00
|
|
|
}
|
2026-03-20 01:01:03 +02:00
|
|
|
const groupById = new Map(groups.map((group) => [group.id, group]));
|
2026-03-06 17:22:59 +02:00
|
|
|
const ordered: SessionGroup[] = [];
|
|
|
|
|
preferredOrder.forEach((id) => {
|
|
|
|
|
const group = groupById.get(id);
|
|
|
|
|
if (group) {
|
|
|
|
|
ordered.push(group);
|
|
|
|
|
groupById.delete(id);
|
|
|
|
|
}
|
|
|
|
|
});
|
2026-03-20 01:01:03 +02:00
|
|
|
groups.forEach((group) => {
|
2026-03-06 17:22:59 +02:00
|
|
|
if (groupById.has(group.id)) {
|
|
|
|
|
ordered.push(group);
|
|
|
|
|
}
|
|
|
|
|
});
|
2026-03-20 01:01:03 +02:00
|
|
|
return ordered;
|
2026-03-06 17:22:59 +02:00
|
|
|
},
|
|
|
|
|
[groupOrderByProject],
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return { getOrderedGroups };
|
|
|
|
|
};
|