From 8fef9b5318991a29bf2aa64809f2dc6929198164 Mon Sep 17 00:00:00 2001 From: z1glr Date: Tue, 21 Jan 2025 10:54:24 +0000 Subject: [PATCH] fixed events view --- client/src/Zustand.ts | 8 +++++- client/src/app/events/page.tsx | 26 ++++++++++++------- .../src/components/Event/AssignmentTable.tsx | 10 ++++--- 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/client/src/Zustand.ts b/client/src/Zustand.ts index c01ae3e..b6aab91 100644 --- a/client/src/Zustand.ts +++ b/client/src/Zustand.ts @@ -8,10 +8,16 @@ import { Availability } from "./app/admin/(availabilities)/AvailabilityEditor"; export interface EventData { id: number; date: string; - tasks: { taskID: number; taskName: string; userName: string | null }[]; + tasks: TaskAssignment[]; description: string; } +interface TaskAssignment { + taskID: number; + taskName: string; + userName: string | null; +} + export interface User { userName: string; admin: boolean; diff --git a/client/src/app/events/page.tsx b/client/src/app/events/page.tsx index c422379..8dda70e 100644 --- a/client/src/app/events/page.tsx +++ b/client/src/app/events/page.tsx @@ -6,32 +6,38 @@ import { apiCall } from "@/lib"; import zustand, { EventData } from "@/Zustand"; import { Add } from "@carbon/icons-react"; import { Button } from "@heroui/react"; -import { useEffect, useState } from "react"; +import { useAsyncList } from "@react-stately/data"; +import { useState } from "react"; export default function Events() { const [showAddItemDialogue, setShowAddItemDialogue] = useState(false); - const events = zustand((state) => state.events); const admin = zustand((state) => state.user?.admin); - useEffect(() => { - (async () => { - const data = await apiCall("GET", "events/assignments"); + const events = useAsyncList({ + async load() { + const result = await apiCall("GET", "events/assignments"); - if (data.ok) { - zustand.getState().setEvents(await data.json()); + if (result.ok) { + const data = await result.json(); + + console.debug(data); + + return { + items: data, + }; } return { items: [], }; - })(); - }, []); + }, + }); return (

Upcoming Events

- {events.map((ee, ii) => ( + {events.items.map((ee, ii) => (
diff --git a/client/src/components/Event/AssignmentTable.tsx b/client/src/components/Event/AssignmentTable.tsx index d196be4..2e3f8a5 100644 --- a/client/src/components/Event/AssignmentTable.tsx +++ b/client/src/components/Event/AssignmentTable.tsx @@ -8,11 +8,13 @@ export default function AssignmentTable({ return ( - {Object.entries(tasks).map(([task, person]) => ( - - + {tasks.map((task) => ( + + ))}
{task}
{task.taskName} - {person ?? missing} + {task.userName ?? ( + missing + )}