fixed events view

This commit is contained in:
z1glr
2025-01-21 10:54:24 +00:00
parent 8ab76c7afa
commit 8fef9b5318
3 changed files with 29 additions and 15 deletions

View File

@@ -8,10 +8,16 @@ import { Availability } from "./app/admin/(availabilities)/AvailabilityEditor";
export interface EventData { export interface EventData {
id: number; id: number;
date: string; date: string;
tasks: { taskID: number; taskName: string; userName: string | null }[]; tasks: TaskAssignment[];
description: string; description: string;
} }
interface TaskAssignment {
taskID: number;
taskName: string;
userName: string | null;
}
export interface User { export interface User {
userName: string; userName: string;
admin: boolean; admin: boolean;

View File

@@ -6,32 +6,38 @@ import { apiCall } from "@/lib";
import zustand, { EventData } from "@/Zustand"; import zustand, { EventData } from "@/Zustand";
import { Add } from "@carbon/icons-react"; import { Add } from "@carbon/icons-react";
import { Button } from "@heroui/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() { export default function Events() {
const [showAddItemDialogue, setShowAddItemDialogue] = useState(false); const [showAddItemDialogue, setShowAddItemDialogue] = useState(false);
const events = zustand((state) => state.events);
const admin = zustand((state) => state.user?.admin); const admin = zustand((state) => state.user?.admin);
useEffect(() => { const events = useAsyncList<EventData>({
(async () => { async load() {
const data = await apiCall<EventData[]>("GET", "events/assignments"); const result = await apiCall("GET", "events/assignments");
if (data.ok) { if (result.ok) {
zustand.getState().setEvents(await data.json()); const data = await result.json();
console.debug(data);
return {
items: data,
};
} }
return { return {
items: [], items: [],
}; };
})(); },
}, []); });
return ( return (
<div className="relative flex-1"> <div className="relative flex-1">
<h2 className="mb-4 text-center text-4xl">Upcoming Events</h2> <h2 className="mb-4 text-center text-4xl">Upcoming Events</h2>
<div className="flex flex-wrap justify-center gap-4"> <div className="flex flex-wrap justify-center gap-4">
{events.map((ee, ii) => ( {events.items.map((ee, ii) => (
<Event key={ii} event={ee}> <Event key={ii} event={ee}>
<div className="mt-auto"> <div className="mt-auto">
<AssignmentTable tasks={ee.tasks} /> <AssignmentTable tasks={ee.tasks} />

View File

@@ -8,11 +8,13 @@ export default function AssignmentTable({
return ( return (
<table> <table>
<tbody> <tbody>
{Object.entries(tasks).map(([task, person]) => ( {tasks.map((task) => (
<tr key={task}> <tr key={task.taskID}>
<th className="pr-4 text-left">{task}</th> <th className="pr-4 text-left">{task.taskName}</th>
<td> <td>
{person ?? <span className="italic text-highlight">missing</span>} {task.userName ?? (
<span className="italic text-highlight">missing</span>
)}
</td> </td>
</tr> </tr>
))} ))}