assigment and reports groundwork
This commit is contained in:
1 parent
74f0d0dbed
commit
06973ccfb2
9 files changed
+299
-49
No files matched your search
@@ -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>
|
||||
|
||||
Reference in new issue
Block a user