diff --git a/src/routes/settings/Gift.tsx b/src/routes/settings/Gift.tsx index 9c87e12..0287ddd 100644 --- a/src/routes/settings/Gift.tsx +++ b/src/routes/settings/Gift.tsx @@ -40,7 +40,7 @@ import { } from "~/components"; import { useI18n } from "~/i18n/context"; import { useMegaStore } from "~/state/megaStore"; -import { eify } from "~/utils"; +import { eify, isFreeGiftingDay } from "~/utils"; import { baseUrlAccountingForNative } from "~/utils/baseUrl"; import { createDeepSignal } from "~/utils/deepSignal"; @@ -203,11 +203,9 @@ export function Gift() { }; const selfHosted = state.settings?.selfhosted === "true"; - const today = new Date(); - // days are 1 indexed, months are 0 indexed - const isChristmas = today.getDate() === 25 && today.getMonth() === 11; + const freeDay = isFreeGiftingDay(); - const canGift = state.mutiny_plus || selfHosted || isChristmas; + const canGift = state.mutiny_plus || selfHosted || freeDay; return ( diff --git a/src/routes/settings/Root.tsx b/src/routes/settings/Root.tsx index 80fdc48..54b6216 100644 --- a/src/routes/settings/Root.tsx +++ b/src/routes/settings/Root.tsx @@ -17,6 +17,7 @@ import { } from "~/components"; import { useI18n } from "~/i18n/context"; import { useMegaStore } from "~/state/megaStore"; +import { isFreeGiftingDay } from "~/utils"; function SettingsLinkList(props: { header: string; @@ -74,9 +75,7 @@ export function Settings() { const COMMIT_HASH = import.meta.env.__COMMIT_HASH__; const selfHosted = state.settings?.selfhosted === "true"; - const today = new Date(); - // days are 1 indexed, months are 0 indexed - const isChristmas = today.getDate() === 25 && today.getMonth() === 11; + const freeDay = isFreeGiftingDay(); const ios = Capacitor.getPlatform() === "ios"; @@ -138,13 +137,13 @@ export function Settings() { disabled: !( state.mutiny_plus || selfHosted || - isChristmas + freeDay ), text: i18n.t("settings.gift.title"), caption: !( state.mutiny_plus || selfHosted || - isChristmas + freeDay ) ? i18n.t("settings.gift.no_plus_caption") : undefined diff --git a/src/utils/subscriptions.ts b/src/utils/subscriptions.ts index 0cc9cfe..14802a4 100644 --- a/src/utils/subscriptions.ts +++ b/src/utils/subscriptions.ts @@ -5,3 +5,27 @@ export function subscriptionValid(subscriptionExpiresTimestamp?: number) { return subscriptionExpiresTimestamp + GRACE > Math.ceil(Date.now() / 1000); } + +export function isFreeGiftingDay() { + const today = new Date(); + // days are 1 indexed, months are 0 indexed + const isChristmas = today.getDate() === 25 && today.getMonth() === 11; + + return isChristmas || isThanksgiving(today); +} + +function isThanksgiving(today: Date) { + if (today.getMonth() !== 10) return false; + + const year = today.getFullYear(); + const thanksgivingDay = new Date(year, 10, 1); + + // Find out what day of the week Nov 1 is + const dayOfWeek = thanksgivingDay.getDay(); + + // Calculate the date of the fourth Thursday in November + thanksgivingDay.setDate(1 + ((4 - dayOfWeek) % 7) + 3 * 7); + + // Compare the current date with Thanksgiving date + return today.getDate() === thanksgivingDay.getDate(); +}