import { GetServerSidePropsContext } from "next"; import { TFunction } from "next-i18next"; import { useRouter } from "next/router"; import { useMemo } from "react"; import { useForm, Controller } from "react-hook-form"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import prisma from "@calcom/prisma"; import { trpc } from "@calcom/trpc/react"; import { Button } from "@calcom/ui/v2/core/Button"; import Meta from "@calcom/ui/v2/core/Meta"; import TimezoneSelect from "@calcom/ui/v2/core/TimezoneSelect"; import Select from "@calcom/ui/v2/core/form/Select"; import { Form, Label } from "@calcom/ui/v2/core/form/fields"; import { getLayout } from "@calcom/ui/v2/core/layouts/AdminLayout"; import showToast from "@calcom/ui/v2/core/notifications"; import { withQuery } from "@lib/QueryCell"; import { getSession } from "@lib/auth"; import { nameOfDay } from "@lib/core/i18n/weekday"; import { inferSSRProps } from "@lib/types/inferSSRProps"; interface GeneralViewProps { localeProp: string; t: TFunction; user: { timeZone: string; timeFormat: number | null; weekStart: string; }; } const WithQuery = withQuery(["viewer.public.i18n"], { context: { skipBatch: true } }); const GeneralQueryView = (props: inferSSRProps) => { const { t } = useLocale(); return } />; }; const GeneralView = ({ localeProp, t, user }: GeneralViewProps) => { const router = useRouter(); // const { data: user, isLoading } = trpc.useQuery(["viewer.me"]); const mutation = trpc.useMutation("viewer.updateProfile", { onSuccess: () => { showToast(t("settings_updated_successfully"), "success"); }, onError: () => { showToast(t("error_updating_settings"), "error"); }, }); const localeOptions = useMemo(() => { return (router.locales || []).map((locale) => ({ value: locale, label: new Intl.DisplayNames(localeProp, { type: "language" }).of(locale) || "", })); }, [localeProp, router.locales]); const timeFormatOptions = [ { value: 12, label: t("12_hour") }, { value: 24, label: t("24_hour") }, ]; const weekStartOptions = [ { value: "Sunday", label: nameOfDay(localeProp, 0) }, { value: "Monday", label: nameOfDay(localeProp, 1) }, { value: "Tuesday", label: nameOfDay(localeProp, 2) }, { value: "Wednesday", label: nameOfDay(localeProp, 3) }, { value: "Thursday", label: nameOfDay(localeProp, 4) }, { value: "Friday", label: nameOfDay(localeProp, 5) }, { value: "Saturday", label: nameOfDay(localeProp, 6) }, ]; const formMethods = useForm({ defaultValues: { locale: { value: localeProp || "", label: localeOptions.find((option) => option.value === localeProp)?.label || "", }, timeZone: user?.timeZone || "", timeFormat: { value: user?.timeFormat || 12, label: timeFormatOptions.find((option) => option.value === user?.timeFormat)?.label || 12, }, weekStart: { value: user?.weekStart, label: nameOfDay(localeProp, user?.weekStart === "Sunday" ? 0 : 1), }, }, }); return (
{ mutation.mutate({ ...values, locale: values.locale.value, timeFormat: values.timeFormat.value, weekStart: values.weekStart.value, }); }}> ( <> { if (event) formMethods.setValue("timeFormat", { ...event }); }} /> )} /> ( <>