From d590a1e255d95a8fb03a4e9266bdcca4a0bd4e87 Mon Sep 17 00:00:00 2001 From: Anyul Rivas Date: Thu, 20 Mar 2025 09:29:40 +0100 Subject: [PATCH 1/4] refactor: abstract functionality in a hook --- src/hooks/useDateInterval.ts | 40 ++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/hooks/useDateInterval.ts diff --git a/src/hooks/useDateInterval.ts b/src/hooks/useDateInterval.ts new file mode 100644 index 00000000..913c0e2c --- /dev/null +++ b/src/hooks/useDateInterval.ts @@ -0,0 +1,40 @@ +import { isWithinInterval } from "date-fns"; + +type DateInterval = { + tickets:{ + startDay: string, + endDay: string, + }, + cfp:{ + startDay: string, + endDay: string, + }, + sponsors:{ + startDate: string, + endDate: string, + } +} + +export const useDateInterval = (today: Date, edition: DateInterval) => { + const ticketStartDay = new Date(edition.tickets.startDay); + const ticketEndDay = new Date(edition.tickets.endDay); + const CFPStartDay = new Date(edition.cfp.startDay); + const CFPEndDay = new Date(edition.cfp.endDay); + const sponsorStartDay = new Date(edition.sponsors.startDate); + const sponsorEndDay = new Date(edition.sponsors.endDate); + + return { + isTicketsDisabled: !isWithinInterval(today, { + start: ticketStartDay, + end: ticketEndDay, + }), + isCfpDisabled: !isWithinInterval(today, { + start: CFPStartDay, + end: CFPEndDay, + }), + isSponsorDisabled: !isWithinInterval(today, { + start: sponsorStartDay, + end: sponsorEndDay, + }), + }; +}; From fb70409cc47de2ee5179d0a4636df2ba8762a9dc Mon Sep 17 00:00:00 2001 From: Anyul Rivas Date: Thu, 20 Mar 2025 09:33:56 +0100 Subject: [PATCH 2/4] feat: include search params in tickets url link --- .../ActionButtons/ActionButtons.tsx | 55 ++++----- src/2024/Home/components/ActionButtons.tsx | 106 +++++++++--------- .../ActionButtons/ActionButtons.tsx | 57 +++++----- 3 files changed, 99 insertions(+), 119 deletions(-) diff --git a/src/2023/Home/components/ActionButtons/ActionButtons.tsx b/src/2023/Home/components/ActionButtons/ActionButtons.tsx index 64a07e68..6ba1f0a9 100644 --- a/src/2023/Home/components/ActionButtons/ActionButtons.tsx +++ b/src/2023/Home/components/ActionButtons/ActionButtons.tsx @@ -4,6 +4,7 @@ import Button from "../../../../components/UI/Button"; import styled from "styled-components"; import { BIG_BREAKPOINT } from "../../../../constants/BreakPoints"; import { gaEventTracker } from "../../../../components/analytics/Analytics"; +import { useDateInterval } from "../../../../hooks/useDateInterval"; const StyledActionDiv = styled.div` display: flex; @@ -16,16 +17,8 @@ const StyledActionDiv = styled.div` `; const ActionButtons: FC> = () => { - const ticketStartDay = new Date(data.tickets.startDay); - const ticketEndDay = new Date(data.tickets.endDay); - const CFPStartDay = new Date(data.cfp.startDay); - const CFPEndDay = new Date(data.cfp.endDay); - const sponsorshipStartDay = new Date(data.tickets.startDay); - const sponsorshipEndDay = new Date(data.tickets.endDay); - const today = new Date(); - - const isBetween = (startDay: Date, endDay: Date): boolean => - startDay < new Date() && endDay > today; + const { isTicketsDisabled, isSponsorDisabled, isCfpDisabled } = + useDateInterval(new Date(), data); const trackSponsorshipInfo = useCallback(() => { gaEventTracker("sponsorship", "sponsorship"); @@ -41,27 +34,27 @@ const ActionButtons: FC> = () => { return ( - {isBetween(ticketStartDay, ticketEndDay) && ( -