Files
gridpilot.gg/apps/website/lib/presenters/TeamJoinRequestsPresenter.ts
2025-12-11 21:06:25 +01:00

38 lines
1.1 KiB
TypeScript

import type {
ITeamJoinRequestsPresenter,
TeamJoinRequestViewModel,
TeamJoinRequestsViewModel,
TeamJoinRequestsResultDTO,
} from '@gridpilot/racing/application/presenters/ITeamJoinRequestsPresenter';
export class TeamJoinRequestsPresenter implements ITeamJoinRequestsPresenter {
private viewModel: TeamJoinRequestsViewModel | null = null;
reset(): void {
this.viewModel = null;
}
present(input: TeamJoinRequestsResultDTO): void {
const requestItems: TeamJoinRequestViewModel[] = input.requests.map((request) => ({
requestId: request.id,
driverId: request.driverId,
driverName: input.driverNames[request.driverId] ?? 'Unknown Driver',
teamId: request.teamId,
status: 'pending',
requestedAt: request.requestedAt.toISOString(),
avatarUrl: input.avatarUrls[request.driverId] ?? '',
}));
const pendingCount = requestItems.filter((r) => r.status === 'pending').length;
this.viewModel = {
requests: requestItems,
pendingCount,
totalCount: requestItems.length,
};
}
getViewModel(): TeamJoinRequestsViewModel | null {
return this.viewModel;
}
}