assigment and reports groundwork

This commit is contained in:
dimitar committed 2026-03-19 04:36:35 +01:00
1 parent 74f0d0dbed
commit 06973ccfb2
9 files changed
+299 -49

No files matched your search

+27 -33
View File
@@ -12,7 +12,7 @@ import {
SelectValue,
} from "@/components/ui/select";
import { Badge } from "@/components/ui/badge";
import { Plus, Trash2, UserCheck, UserX } from "lucide-react";
import { Plus, UserCheck, UserX } from "lucide-react";
export default function TrainerClientsPage() {
const [trainers, setTrainers] = useState<User[]>([]);
@@ -32,37 +32,34 @@ export default function TrainerClientsPage() {
try {
setLoading(true);
// Fetch trainers
const trainersRes = await fetch("/api/users?role=trainer");
if (trainersRes.ok) {
const trainersData = await trainersRes.json();
setTrainers(trainersData.users || []);
}
const [trainersRes, clientsRes, assignmentsRes] = await Promise.all([
fetch("/api/users?role=trainer"),
fetch("/api/users?role=client"),
fetch("/api/trainer-client"),
]);
// Fetch clients
const clientsRes = await fetch("/api/users?role=client");
if (clientsRes.ok) {
const clientsData = await clientsRes.json();
setClients(clientsData.users || []);
}
const fetchedTrainers: User[] = trainersRes.ok
? (await trainersRes.json()).data?.users || []
: [];
const fetchedClients: User[] = clientsRes.ok
? (await clientsRes.json()).data?.users || []
: [];
setTrainers(fetchedTrainers);
setClients(fetchedClients);
// Fetch all assignments
const assignmentsRes = await fetch("/api/trainer-client");
if (assignmentsRes.ok) {
const assignmentsData = await assignmentsRes.json();
// Enrich assignments with user data
const enrichedAssignments = await Promise.all(
(assignmentsData.assignments || []).map(
async (assignment: TrainerClientAssignment) => {
const trainer = trainers.find(
(t: User) => t.id === assignment.trainerId,
);
const client = clients.find(
(c: User) => c.id === assignment.clientId,
);
return { ...assignment, trainer, client };
},
),
const enrichedAssignments = (assignmentsData.assignments || []).map(
(assignment: TrainerClientAssignment) => {
return {
...assignment,
trainer: fetchedTrainers.find(
(t) => t.id === assignment.trainerId,
),
client: fetchedClients.find((c) => c.id === assignment.clientId),
};
},
);
setAssignments(enrichedAssignments);
}
@@ -93,7 +90,7 @@ export default function TrainerClientsPage() {
alert("Assignment created successfully!");
setSelectedTrainer("");
setSelectedClient("");
fetchData(); // Refresh
fetchData();
} else {
const error = await response.json();
alert(error.error || "Failed to create assignment");
@@ -116,7 +113,7 @@ export default function TrainerClientsPage() {
if (response.ok) {
alert("Assignment removed successfully!");
fetchData(); // Refresh
fetchData();
} else {
const error = await response.json();
alert(error.error || "Failed to remove assignment");
@@ -151,7 +148,6 @@ export default function TrainerClientsPage() {
</h1>
</div>
{/* Create Assignment Form */}
<Card>
<CardHeader>
<CardTitle>Assign Trainer to Client</CardTitle>
@@ -206,7 +202,6 @@ export default function TrainerClientsPage() {
</CardContent>
</Card>
{/* Active Assignments */}
<Card>
<CardHeader>
<div className="flex justify-between items-center">
@@ -260,7 +255,6 @@ export default function TrainerClientsPage() {
</CardContent>
</Card>
{/* Inactive Assignments */}
{getInactiveAssignments().length > 0 && (
<Card>
<CardHeader>