Added date sorting to the ticket list

This commit is contained in:
Tiago Ribeiro
2024-01-30 18:02:21 +00:00
parent 4e40dc9c8c
commit bcad5b5646

View File

@@ -25,6 +25,7 @@ import { withIronSessionSsr } from "iron-session/next";
import moment from "moment"; import moment from "moment";
import Head from "next/head"; import Head from "next/head";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { BsArrowDown, BsArrowUp } from "react-icons/bs";
import { ToastContainer } from "react-toastify"; import { ToastContainer } from "react-toastify";
const columnHelper = createColumnHelper<Ticket>(); const columnHelper = createColumnHelper<Ticket>();
@@ -75,6 +76,7 @@ export default function Tickets() {
const [filteredTickets, setFilteredTickets] = useState<Ticket[]>([]); const [filteredTickets, setFilteredTickets] = useState<Ticket[]>([]);
const [selectedTicket, setSelectedTicket] = useState<Ticket>(); const [selectedTicket, setSelectedTicket] = useState<Ticket>();
const [assigneeFilter, setAssigneeFilter] = useState<string>(); const [assigneeFilter, setAssigneeFilter] = useState<string>();
const [dateSorting, setDateSorting] = useState<"asc" | "desc">("desc");
const [typeFilter, setTypeFilter] = useState<TicketType>(); const [typeFilter, setTypeFilter] = useState<TicketType>();
const [statusFilter, setStatusFilter] = useState<TicketStatus>(); const [statusFilter, setStatusFilter] = useState<TicketStatus>();
@@ -83,6 +85,12 @@ export default function Tickets() {
const { users } = useUsers(); const { users } = useUsers();
const { tickets, reload } = useTickets(); const { tickets, reload } = useTickets();
const sortByDate = (a: Ticket, b: Ticket) => {
return moment((dateSorting === "desc" ? b : a).date).diff(
moment((dateSorting === "desc" ? a : b).date),
);
};
useEffect(() => { useEffect(() => {
const filters = []; const filters = [];
if (typeFilter) filters.push((x: Ticket) => x.type === typeFilter); if (typeFilter) filters.push((x: Ticket) => x.type === typeFilter);
@@ -90,8 +98,10 @@ export default function Tickets() {
if (assigneeFilter) if (assigneeFilter)
filters.push((x: Ticket) => x.assignedTo === assigneeFilter); filters.push((x: Ticket) => x.assignedTo === assigneeFilter);
setFilteredTickets(filters.reduce((d, f) => d.filter(f), tickets)); setFilteredTickets(
}, [tickets, typeFilter, statusFilter, assigneeFilter]); [...filters.reduce((d, f) => d.filter(f), tickets)].sort(sortByDate),
);
}, [tickets, typeFilter, statusFilter, assigneeFilter, dateSorting]);
const columns = [ const columns = [
columnHelper.accessor("id", { columnHelper.accessor("id", {
@@ -120,7 +130,19 @@ export default function Tickets() {
cell: (info) => info.getValue(), cell: (info) => info.getValue(),
}), }),
columnHelper.accessor("date", { columnHelper.accessor("date", {
header: "Date", id: "date",
header: (
<button
className="flex items-center gap-2"
onClick={() =>
setDateSorting((prev) => (prev === "asc" ? "desc" : "asc"))
}
>
<span>Date</span>
{dateSorting === "desc" && <BsArrowDown />}
{dateSorting === "asc" && <BsArrowUp />}
</button>
) as any,
cell: (info) => moment(info.getValue()).format("DD/MM/YYYY - HH:mm"), cell: (info) => moment(info.getValue()).format("DD/MM/YYYY - HH:mm"),
}), }),
columnHelper.accessor("subject", { columnHelper.accessor("subject", {