import { useRouter } from "next/router"; import { Controller, useForm } from "react-hook-form"; import { getLayout } from "@calcom/features/settings/layouts/SettingsLayout"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { nameOfDay } from "@calcom/lib/weekday"; import { MembershipRole } from "@calcom/prisma/enums"; import type { RouterOutputs } from "@calcom/trpc/react"; import { trpc } from "@calcom/trpc/react"; import { Button, Form, Label, Meta, Select, showToast, SkeletonButton, SkeletonContainer, SkeletonText, TimezoneSelect, } from "@calcom/ui"; const SkeletonLoader = ({ title, description }: { title: string; description: string }) => { return (
); }; interface GeneralViewProps { currentOrg: RouterOutputs["viewer"]["organizations"]["listCurrent"]; isAdminOrOwner: boolean; localeProp: string; } const OrgGeneralView = () => { const { t } = useLocale(); const router = useRouter(); const { data: currentOrg, isLoading } = trpc.viewer.organizations.listCurrent.useQuery(undefined, { onError: () => { router.push("/settings"); }, }); const { data: user } = trpc.viewer.me.useQuery(); if (isLoading) return ; if (!currentOrg) { return null; } const isAdminOrOwner = currentOrg.user.role === MembershipRole.OWNER || currentOrg.user.role === MembershipRole.ADMIN; return ( ); }; const GeneralView = ({ currentOrg, isAdminOrOwner, localeProp }: GeneralViewProps) => { const { t } = useLocale(); const mutation = trpc.viewer.organizations.update.useMutation({ onSuccess: async () => { reset(getValues()); showToast(t("settings_updated_successfully"), "success"); }, onError: () => { showToast(t("error_updating_settings"), "error"); }, }); 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: { timeZone: currentOrg.timeZone || "", timeFormat: { value: currentOrg.timeFormat || 12, label: timeFormatOptions.find((option) => option.value === currentOrg.timeFormat)?.label || 12, }, weekStart: { value: currentOrg.weekStart, label: weekStartOptions.find((option) => option.value === currentOrg.weekStart)?.label || nameOfDay(localeProp, 0), }, }, }); const { formState: { isDirty, isSubmitting }, reset, getValues, } = formMethods; const isDisabled = isSubmitting || !isDirty || !isAdminOrOwner; return (
{ mutation.mutate({ ...values, timeFormat: values.timeFormat.value, weekStart: values.weekStart.value, }); }}> ( <> { if (event) formMethods.setValue("timeZone", event.value, { shouldDirty: true }); }} /> )} /> ( <> { if (event) formMethods.setValue("weekStart", { ...event }, { shouldDirty: true }); }} /> )} /> ); }; OrgGeneralView.getLayout = getLayout; export default OrgGeneralView;