Add outstanding events page
This commit is contained in:
parent
fe981c2f5b
commit
63802c409a
85
app/routes/events-team_.outstanding.tsx
Normal file
85
app/routes/events-team_.outstanding.tsx
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
import {
|
||||||
|
Alert,
|
||||||
|
AlertIcon,
|
||||||
|
Button,
|
||||||
|
Table,
|
||||||
|
TableCaption,
|
||||||
|
TableContainer,
|
||||||
|
Tbody,
|
||||||
|
Td,
|
||||||
|
Th,
|
||||||
|
Thead,
|
||||||
|
Tr,
|
||||||
|
} from "@chakra-ui/react";
|
||||||
|
import { useLoaderData } from "@remix-run/react";
|
||||||
|
|
||||||
|
export async function loader({ context }: { context: RequestContext }) {
|
||||||
|
const now = new Date();
|
||||||
|
let month = now.getUTCMonth() + 1;
|
||||||
|
let year = now.getUTCFullYear();
|
||||||
|
|
||||||
|
if (month - 1 === 0) {
|
||||||
|
month = 12;
|
||||||
|
year--;
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = await context.env.D1.prepare(
|
||||||
|
"SELECT day, details, id FROM events WHERE approved = 1 AND month = ? AND year = ? AND (performed_at IS NULL OR reached_minimum_player_count = 0 OR answered_at IS NULL);",
|
||||||
|
)
|
||||||
|
.bind(month, year)
|
||||||
|
.all();
|
||||||
|
|
||||||
|
return {
|
||||||
|
events: data.results as Record<string, string | number>[],
|
||||||
|
past_cutoff: now.getUTCDate() > 7,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function () {
|
||||||
|
const { events, past_cutoff } = useLoaderData<typeof loader>();
|
||||||
|
|
||||||
|
function getStatus(event: { [k: string]: string | number }) {
|
||||||
|
if (!event.performed_at) return "Approved";
|
||||||
|
if (event.type === "rotw" && event.answered_at) return "Solved";
|
||||||
|
if (event.type === "gamenight" && event.areached_minimum_player_count)
|
||||||
|
return "Certified";
|
||||||
|
|
||||||
|
return "Completed";
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Alert display={past_cutoff ? undefined : "none"} status="warning">
|
||||||
|
<AlertIcon />
|
||||||
|
The cutoff period for retroactively actioning events has passed.
|
||||||
|
</Alert>
|
||||||
|
<TableContainer>
|
||||||
|
<Table variant="simple">
|
||||||
|
<TableCaption>
|
||||||
|
Events that are not denied or left pending which need to be actioned
|
||||||
|
</TableCaption>
|
||||||
|
<Thead>
|
||||||
|
<Tr>
|
||||||
|
<Th>Day</Th>
|
||||||
|
<Th>Details</Th>
|
||||||
|
<Th>Current Status</Th>
|
||||||
|
<Th>Action</Th>
|
||||||
|
</Tr>
|
||||||
|
</Thead>
|
||||||
|
<Tbody>
|
||||||
|
{events.map((event) => (
|
||||||
|
<Tr>
|
||||||
|
<Td>{event.day}</Td>
|
||||||
|
<Td>{event.details}</Td>
|
||||||
|
<Td>{getStatus(event)}</Td>
|
||||||
|
<Td>
|
||||||
|
<Button>Action Menu</Button>
|
||||||
|
</Td>
|
||||||
|
</Tr>
|
||||||
|
))}
|
||||||
|
</Tbody>
|
||||||
|
</Table>
|
||||||
|
</TableContainer>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user