diff --git a/src/pages/admin/events/index.tsx b/src/pages/admin/events/index.tsx index d20cb54..c9461e3 100644 --- a/src/pages/admin/events/index.tsx +++ b/src/pages/admin/events/index.tsx @@ -1,4 +1,4 @@ -import React from "react"; +import React, { useState, useEffect } from "react"; import { NextPage } from "next"; import useSWR from "swr"; import { formatRelative } from "date-fns"; @@ -21,6 +21,14 @@ const StyledButton = styled(Button) <{ $colorOverride: "red" }>` font-weight: bold; `; +const StyledSelect = styled.select` + padding: 0.25rem; +`; + +const SelectWrapper = styled.div` + padding: 0.25rem; +`; + const confirmDelete = async (event: Event) => { if (window.confirm(`Delete: ${event.id}: ${event.title_fi}/${event.title_en}; Are you sure?`) === true) { try { @@ -37,42 +45,126 @@ const Renderer: React.FC = () => { const api: API = { path: APIPath.EVENTS, authenticated: true }; const { data: events, error } = useSWR(api, fetcher); + const [sort, setSort] = useState("start_time"); + const [order, setOrder] = useState("descending"); + const [filter, setFilter] = useState("all"); + + const [processedEvents, setProcessedEvents] = useState([]); + + useEffect(() => { + console.log("hook call"); + + const eventSort = (a, b) => { + let result = 0; + + console.log(order); + console.log(sort); + + if (order === "ascending") { + if (sort in ["start_time", "end_time"]) { + result = new Date(b[sort]).getTime() - new Date(a[sort]).getTime(); + } else if (sort === "id") { + result = b[sort] - a[sort]; + } + } else if (order === "descending") { + if (sort in ["start_time", "end_time"]) { + result = new Date(a[sort]).getTime() - new Date(b[sort]).getTime(); + } else if (sort === "id") { + result = a[sort] - b[sort]; + } + } + + return result; + }; + + const checkDate = (a) => { + let result = true; + + if (filter === "upcoming") { + result = new Date(a.end_time).getTime() > Date.now(); + } else if (filter === "past") { + result = new Date(a.end_time).getTime() < Date.now(); + console.log(`Past ${result}`); + } + return result; + }; + + if (events) { + setProcessedEvents(events.sort(eventSort).filter(checkDate)); + } + }, [sort, order, filter, events]); + + function handleSortChange(e) { + setSort(e.target.value); + } + + function handleOrderChange(e) { + setOrder(e.target.value); + } + + function handleFilterChange(e) { + setFilter(e.target.value); + } + if (error) { console.error(error); return (
- Failed loading events + Failed loading events.
); } + if (!events?.length) { return
No events.
; } return ( - - - - - - - - - - {events.map((event) => ( - - - - - +
+
+ Sort by: + + Order: + + Filter: + +
+
TitleStart timeEnd time
{event.title_fi}{formatRelative(new Date(event.start_time), new Date())}{formatRelative(new Date(event.end_time), new Date())} - confirmDelete(event)}> - Delete - -
+ + + + + - ))} - -
TitleStart timeEnd time
+ + + {processedEvents + .map((event) => ( + + {event.title_fi} + {formatRelative(new Date(event.start_time), new Date())} + {formatRelative(new Date(event.end_time), new Date())} + + confirmDelete(event)}> + Delete + + + + ))} + + + ); };