From 3e13ed58301693fc04e7f0ba079c67d6cd7325b0 Mon Sep 17 00:00:00 2001 From: Joao Ramos Date: Mon, 26 Feb 2024 19:09:42 +0000 Subject: [PATCH] Added Approach to accept ticket source --- src/pages/tickets.tsx | 55 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 44 insertions(+), 11 deletions(-) diff --git a/src/pages/tickets.tsx b/src/pages/tickets.tsx index 1a80b7f8..3296c52c 100644 --- a/src/pages/tickets.tsx +++ b/src/pages/tickets.tsx @@ -75,10 +75,26 @@ const TypesClassNames: { [key in TicketType]: string } = { help: "bg-mti-blue-light", }; +const escapedURL = process.env.NEXT_PUBLIC_WEBSITE_URL || ''.replace( + /[.*+?^${}()|[\]\\]/g, + "\\$&" +); +const fromHomepage = [new RegExp(`^${escapedURL}`), /\/contact$/]; + +type Source = "webpage" | "platform" | ""; + +const SOURCE_OPTIONS = [ + { value: "", label: "All" }, + { value: "webpage", label: "Webpage" }, + { value: "platform", label: "Platform" }, +] + export default function Tickets() { const [filteredTickets, setFilteredTickets] = useState([]); const [selectedTicket, setSelectedTicket] = useState(); const [assigneeFilter, setAssigneeFilter] = useState(); + const [sourceFilter, setSourceFilter] = useState(""); + const [dateSorting, setDateSorting] = useState<"asc" | "desc">("desc"); const [typeFilter, setTypeFilter] = useState(); @@ -90,7 +106,7 @@ export default function Tickets() { const sortByDate = (a: Ticket, b: Ticket) => { return moment((dateSorting === "desc" ? b : a).date).diff( - moment((dateSorting === "desc" ? a : b).date), + moment((dateSorting === "desc" ? a : b).date) ); }; @@ -102,11 +118,16 @@ export default function Tickets() { if (statusFilter) filters.push((x: Ticket) => x.status === statusFilter); if (assigneeFilter) filters.push((x: Ticket) => x.assignedTo === assigneeFilter); - + if (sourceFilter) { + if (sourceFilter === "webpage") + filters.push((x: Ticket) => fromHomepage.some((r) => r.test(x.reportedFrom))); + if (sourceFilter === "platform") + filters.push((x: Ticket) => !fromHomepage.some((r) => r.test(x.reportedFrom))); + } setFilteredTickets( - [...filters.reduce((d, f) => d.filter(f), tickets)].sort(sortByDate), + [...filters.reduce((d, f) => d.filter(f), tickets)].sort(sortByDate) ); - }, [tickets, typeFilter, statusFilter, assigneeFilter, dateSorting, user]); + }, [tickets, typeFilter, statusFilter, assigneeFilter, dateSorting, user, sourceFilter]); const columns = [ columnHelper.accessor("id", { @@ -119,7 +140,7 @@ export default function Tickets() { {TicketTypeLabel[info.getValue()]} @@ -162,7 +183,7 @@ export default function Tickets() { {TicketStatusLabel[info.getValue()]} @@ -288,7 +309,7 @@ export default function Tickets() { { value: "me", label: "Assigned to me" }, ...users .filter((x) => - ["admin", "developer", "agent"].includes(x.type), + ["admin", "developer", "agent"].includes(x.type) ) .map((u) => ({ value: u.id, @@ -300,7 +321,7 @@ export default function Tickets() { onChange={(value) => value ? setAssigneeFilter( - value.value === "me" ? user.id : value.value, + value.value === "me" ? user.id : value.value ) : setAssigneeFilter(undefined) } @@ -308,6 +329,18 @@ export default function Tickets() { isClearable /> +
+ +