improved assignments table formatting

This commit is contained in:
z1glr
2025-01-11 19:10:02 +00:00
parent 4f86dce569
commit ac6bf24d57

View File

@@ -2,19 +2,29 @@
import AddEvent from "@/components/Event/AddEvent"; import AddEvent from "@/components/Event/AddEvent";
import LocalDate from "@/components/LocalDate"; import LocalDate from "@/components/LocalDate";
import { apiCall } from "@/lib"; import { apiCall, getTasks } from "@/lib";
import { Availability, EventData, getTasks, Task } from "@/Zustand"; import { EventData } from "@/Zustand";
import { Add, Copy, Edit, TrashCan } from "@carbon/icons-react"; import {
Add,
AddLarge,
Copy,
Edit,
NotAvailable,
TrashCan,
} from "@carbon/icons-react";
import { import {
Button, Button,
ButtonGroup, ButtonGroup,
Chip,
Dropdown,
DropdownItem,
DropdownMenu,
DropdownTrigger,
Modal, Modal,
ModalBody, ModalBody,
ModalContent, ModalContent,
ModalFooter, ModalFooter,
ModalHeader, ModalHeader,
Select,
SelectItem,
Table, Table,
TableBody, TableBody,
TableCell, TableCell,
@@ -131,7 +141,7 @@ export default function AdminPanel() {
</LocalDate> </LocalDate>
); );
case "description": case "description":
return <span className="italic">{event[key]}</span>; return <span className="whitespace-pre-wrap italic">{event[key]}</span>;
case "actions": case "actions":
return ( return (
<div className="flex justify-end"> <div className="flex justify-end">
@@ -164,33 +174,65 @@ export default function AdminPanel() {
// only show the selector, if the task is needed for the event // only show the selector, if the task is needed for the event
if (Object.keys(event.tasks).includes(key as string)) { if (Object.keys(event.tasks).includes(key as string)) {
return ( return (
<Select <Dropdown>
variant="underlined" <DropdownTrigger>
fullWidth {!!event.tasks[key as string] ? (
selectedKeys={new Set([event.tasks[key as Task] ?? ""])} <Chip onClose={() => alert("implement")}>
classNames={{ {event.tasks[key as string]}
popoverContent: "w-fit", </Chip>
value: "mr-6", ) : (
label: "mr-6", <Button isIconOnly size="sm" radius="md" variant="flat">
}} <AddLarge className="mx-auto" />
className="[&_*]:overflow-visible" </Button>
> )}
{Object.entries(event.availabilities).map( </DropdownTrigger>
([volunteer, availability]) => ( <DropdownMenu>
<SelectItem {Object.entries(event.availabilities).map(
key={volunteer} ([volunteer, availability]) => (
// color={availability2Color(availability)} <DropdownItem
className={[ key={volunteer}
// "text-" + availability2Color(availability), // color={availability2Color(availability)}
// availability2Tailwind(availability), className={[
].join(" ")} // "text-" + availability2Color(availability),
> // availability2Tailwind(availability),
{volunteer} ({availability}) ].join(" ")}
</SelectItem> >
), {volunteer} ({availability})
)} </DropdownItem>
</Select> ),
)}
</DropdownMenu>
</Dropdown>
// <Select
// aria-label={`User selection for task ${key} and event ${event.date}`}
// variant="underlined"
// fullWidth
// selectedKeys={new Set([event.tasks[key as string] ?? ""])}
// classNames={{
// popoverContent: "w-fit",
// value: "mr-6",
// label: "mr-6",
// }}
// className="[&_*]:overflow-visible"
// >
// {Object.entries(event.availabilities).map(
// ([volunteer, availability]) => (
// <SelectItem
// key={volunteer}
// // color={availability2Color(availability)}
// className={[
// // "text-" + availability2Color(availability),
// // availability2Tailwind(availability),
// ].join(" ")}
// >
// {volunteer} ({availability})
// </SelectItem>
// ),
// )}
// </Select>
); );
} else {
return <NotAvailable className="mx-auto text-foreground-300" />;
} }
} }
} }
@@ -253,7 +295,11 @@ export default function AdminPanel() {
</TableBody> </TableBody>
</Table> </Table>
<AddEvent isOpen={showAddEvent} onOpenChange={setShowAddEvent} /> <AddEvent
isOpen={showAddEvent}
onOpenChange={setShowAddEvent}
onSuccess={() => events.reload()}
/>
{activeEvent !== undefined ? ( {activeEvent !== undefined ? (
<Modal <Modal