fixed events view
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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} />
|
||||||
|
|||||||
@@ -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>
|
||||||
))}
|
))}
|
||||||
|
|||||||
Reference in New Issue
Block a user