agent-ecosystem/src/features/running-teams/renderer/adapters/RunningTeamsSectionAdapter.ts

55 lines
1.5 KiB
TypeScript

import { getTeamColorSet } from '@renderer/constants/teamColors';
import { getBaseName } from '@renderer/utils/pathUtils';
import { nameColorSet } from '@renderer/utils/projectColor';
import type { RunningTeamDashboardEntry } from '../../core/domain/policies/buildRunningTeamsDashboard';
import type { TaskStatusCounts } from '@renderer/utils/pathNormalize';
export interface RunningTeamRowModel {
id: string;
teamName: string;
displayName: string;
projectPath?: string;
projectLabel: string;
status: RunningTeamDashboardEntry['status'];
statusLabel: string;
accentColor: string;
taskCounts?: TaskStatusCounts;
}
function getStatusLabel(status: RunningTeamDashboardEntry['status']): string {
switch (status) {
case 'active':
return 'Active';
case 'provisioning':
return 'Launching';
case 'idle':
return 'Running';
}
}
function getProjectLabel(projectPath?: string): string {
if (!projectPath) {
return 'No project';
}
return getBaseName(projectPath) || projectPath;
}
export function adaptRunningTeamsSection(
teams: RunningTeamDashboardEntry[]
): RunningTeamRowModel[] {
return teams.map((team) => ({
id: team.teamName,
teamName: team.teamName,
displayName: team.displayName,
projectPath: team.projectPath,
projectLabel: getProjectLabel(team.projectPath),
status: team.status,
statusLabel: getStatusLabel(team.status),
accentColor: team.color
? getTeamColorSet(team.color).border
: nameColorSet(team.displayName).border,
taskCounts: team.taskCounts,
}));
}