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,20 +174,22 @@ 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>
> )}
</DropdownTrigger>
<DropdownMenu>
{Object.entries(event.availabilities).map( {Object.entries(event.availabilities).map(
([volunteer, availability]) => ( ([volunteer, availability]) => (
<SelectItem <DropdownItem
key={volunteer} key={volunteer}
// color={availability2Color(availability)} // color={availability2Color(availability)}
className={[ className={[
@@ -186,11 +198,41 @@ export default function AdminPanel() {
].join(" ")} ].join(" ")}
> >
{volunteer} ({availability}) {volunteer} ({availability})
</SelectItem> </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