diff --git a/app/components/MyEvents/MyTicketsList.tsx b/app/components/MyEvents/MyTicketsList.tsx index 0eeffdd..703bd37 100644 --- a/app/components/MyEvents/MyTicketsList.tsx +++ b/app/components/MyEvents/MyTicketsList.tsx @@ -1,7 +1,12 @@ import { formatDistanceToNow, subDays, format } from "date-fns"; import { ArrowRight } from "lucide-react"; +import { useMemo } from "react"; -import { useMyEventsSuspenseQuery } from "~/components/MyEvents/graphql/myEvents.generated"; +import { + MyEventsQuery, + useMyEventsSuspenseQuery, +} from "~/components/MyEvents/graphql/myEvents.generated"; +import { Badge } from "~/components/ui/badge"; import { Button } from "~/components/ui/button"; import { Card, CardTitle } from "~/components/ui/card"; import { urls } from "~/utils/urls"; @@ -33,44 +38,108 @@ export const MyTicketsList = ({ }, }); + const { groupedByDate, orderedDates } = useMemo(() => { + const groupedByDate = data.searchEvents.data.reduce( + (acc, event) => { + const date = event.startDateTime as string; + // const date = format(parsedDate, "cccc - d 'de' MMMM, yyyy"); + + if (!acc[date]) { + acc[date] = []; + } + + acc[date].push(event); + + return acc; + }, + {} as Record, + ); + + const orderedDates = Object.keys(groupedByDate).sort((a, b) => { + const dateA = new Date(a); + const dateB = new Date(b); + + if (dateA > dateB) { + return -1; + } + + if (dateA < dateB) { + return 1; + } + + return 0; + }); + + return { + groupedByDate, + orderedDates, + }; + }, [data.searchEvents.data]); + + // We go over the groupedByDateArray object in order + // to render the events grouped by date + return ( -
+
{!data.searchEvents.data.length && (
No hay eventos
)} - {data.searchEvents.data.map((event) => { - const parsedDate = new Date(event.startDateTime as string); - const isOverAWeekFromNow = parsedDate > subDays(new Date(), 7); - const relativeDate = formatDistanceToNow(parsedDate, { - addSuffix: true, - }); - const formattedDate = format(parsedDate, "cccc - d 'de' MMMM, yyyy"); - const date = isOverAWeekFromNow ? formattedDate : relativeDate; - - const formattedTime = format(parsedDate, "hh:mm aaa"); - + {orderedDates.map((event) => { return ( - -
- {date} - {formattedTime} -
- {event.name} +
- + + {format(event, "d 'de' MMMM, yyyy")} +
- + {groupedByDate[event].map((event) => { + const parsedDate = new Date(event.startDateTime as string); + const isOverAWeekFromNow = parsedDate > subDays(new Date(), 7); + const relativeDate = formatDistanceToNow(parsedDate, { + addSuffix: true, + }); + const formattedDate = format( + parsedDate, + "cccc - d 'de' MMMM, yyyy", + ); + const date = isOverAWeekFromNow ? formattedDate : relativeDate; + + const formattedTime = format(parsedDate, "hh:mm aaa"); + + return ( + +
+ {date} + {formattedTime} +
+ {event.name} +
+ +
+ + {event.community?.name} + +
+
+
+ ); + })} +
); })}
diff --git a/app/components/ui/badge.tsx b/app/components/ui/badge.tsx index 07e5ee8..ceeba6f 100644 --- a/app/components/ui/badge.tsx +++ b/app/components/ui/badge.tsx @@ -1,5 +1,5 @@ -import * as React from "react"; import { cva, type VariantProps } from "class-variance-authority"; +import * as React from "react"; import { cn } from "~/utils/utils";