From 70803e890cf9f237573b3109fe68e43a7ea0099a Mon Sep 17 00:00:00 2001 From: Jared Pereira Date: Mon, 27 Oct 2025 15:04:04 -0400 Subject: [PATCH] add language and time-zone to provider --- app/layout.tsx | 11 ++++--- .../Blocks/RSVPBlock/ContactDetailsForm.tsx | 6 ++-- components/Providers/IPLocationProvider.tsx | 14 --------- .../Providers/RequestHeadersProvider.tsx | 29 +++++++++++++++++++ 4 files changed, 39 insertions(+), 21 deletions(-) delete mode 100644 components/Providers/IPLocationProvider.tsx create mode 100644 components/Providers/RequestHeadersProvider.tsx diff --git a/app/layout.tsx b/app/layout.tsx index 8e347040..85156b6c 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -7,7 +7,7 @@ import localFont from "next/font/local"; import { PopUpProvider } from "components/Toast"; import { IdentityProviderServer } from "components/IdentityProviderServer"; import { headers } from "next/headers"; -import { IPLocationProvider } from "components/Providers/IPLocationProvider"; +import { RequestHeadersProvider } from "components/Providers/RequestHeadersProvider"; import { RouteUIStateManager } from "components/RouteUIStateManger"; export const metadata = { @@ -55,7 +55,10 @@ export default async function RootLayout( children: React.ReactNode; } ) { - let ipLocation = (await headers()).get("X-Vercel-IP-Country"); + let headersList = await headers(); + let ipLocation = headersList.get("X-Vercel-IP-Country"); + let acceptLanguage = headersList.get("accept-language"); + let ipTimezone = headersList.get("X-Vercel-IP-Timezone"); return ( @@ -77,10 +80,10 @@ export default async function RootLayout( - + {children} - + diff --git a/components/Blocks/RSVPBlock/ContactDetailsForm.tsx b/components/Blocks/RSVPBlock/ContactDetailsForm.tsx index cd63720f..a1a01222 100644 --- a/components/Blocks/RSVPBlock/ContactDetailsForm.tsx +++ b/components/Blocks/RSVPBlock/ContactDetailsForm.tsx @@ -12,7 +12,7 @@ import { ButtonPrimary, ButtonTertiary } from "components/Buttons"; import { Separator } from "components/Layout"; import { createPhoneAuthToken } from "actions/phone_auth/request_phone_auth_token"; import { Input, InputWithLabel } from "components/Input"; -import { IPLocationContext } from "components/Providers/IPLocationProvider"; +import { RequestHeadersContext } from "components/Providers/RequestHeadersProvider"; import { Popover } from "components/Popover"; import { theme } from "tailwind.config"; import { InfoSmall } from "components/Icons/InfoSmall"; @@ -41,10 +41,10 @@ export function ContactDetailsForm(props: { data.authToken.phone_number === rsvp.phone_number, )?.plus_ones || 0, ); - let ipLocation = useContext(IPLocationContext) || "US"; + let requestHeaders = useContext(RequestHeadersContext); const [formState, setFormState] = useState({ country_code: - countryCodes.find((c) => c[1].toUpperCase() === ipLocation)?.[2] || "1", + countryCodes.find((c) => c[1].toUpperCase() === (requestHeaders.country || "US"))?.[2] || "1", phone_number: "", confirmationCode: "", }); diff --git a/components/Providers/IPLocationProvider.tsx b/components/Providers/IPLocationProvider.tsx deleted file mode 100644 index 7b142ca1..00000000 --- a/components/Providers/IPLocationProvider.tsx +++ /dev/null @@ -1,14 +0,0 @@ -"use client"; -import { createContext } from "react"; - -export const IPLocationContext = createContext(null); -export const IPLocationProvider = (props: { - country: string | null; - children: React.ReactNode; -}) => { - return ( - - {props.children} - - ); -}; diff --git a/components/Providers/RequestHeadersProvider.tsx b/components/Providers/RequestHeadersProvider.tsx new file mode 100644 index 00000000..f85a374a --- /dev/null +++ b/components/Providers/RequestHeadersProvider.tsx @@ -0,0 +1,29 @@ +"use client"; +import { createContext } from "react"; + +export type RequestHeaders = { + country: string | null; + language: string | null; + timezone: string | null; +}; + +export const RequestHeadersContext = createContext({ + country: null, + language: null, + timezone: null, +}); + +export const RequestHeadersProvider = (props: { + country: string | null; + language: string | null; + timezone: string | null; + children: React.ReactNode; +}) => { + return ( + + {props.children} + + ); +}; -- 2.51.2