"use client"; import { zodResolver } from "@hookform/resolvers/zod"; import { Settings2Icon } from "lucide-react"; import { useTranslations } from "next-intl"; import { ReactNode } from "react"; import { UseFormReturn, useForm } from "react-hook-form"; import { showToast } from "../../../../utils/toast"; import z from "zod"; import { EditorSheet } from "../../../../components"; import { Modules } from "../../../../core"; import { getRoleId } from "../../../../roles"; import { Button } from "../../../../shadcnui"; import { UserInterface } from "../../../user"; import { useCurrentUserContext } from "../../../user/contexts"; import { UserService } from "../../../user/data/user.service"; import { CompanyInput, CompanyInterface } from "../../data"; import { CompanyService } from "../../data/company.service"; type CompanyConfigurationEditorProps = { company: CompanyInterface; formSchema: z.ZodObject; defaultValues: Record; buildPayload: (values: Record) => Partial; children: (form: UseFormReturn) => ReactNode; }; function CompanyConfigurationEditorInternal({ company, formSchema, defaultValues, buildPayload, children, }: CompanyConfigurationEditorProps) { const t = useTranslations(); const { setUser } = useCurrentUserContext(); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: defaultValues, shouldUnregister: false, }); return ( } nativeButton={false} size="sm" variant="ghost" className="cursor-pointer"> } onSubmit={async (values) => { const payload: CompanyInput = { id: company.id, configurations: buildPayload(values), }; await CompanyService.updateConfigurations(payload); const fullUser = await UserService.findFullUser(); if (fullUser) { setUser(fullUser); } }} onSuccess={async () => { showToast(t("features.configuration.updated_title"), { description: t("features.configuration.updated_description"), }); }} onReset={() => defaultValues} >

{t(`features.configuration.warning_description`)}

{children(form)}
); } export function CompanyConfigurationEditor(props: CompanyConfigurationEditorProps) { const { hasRole } = useCurrentUserContext(); if (hasRole(getRoleId().Administrator)) return ; return ; }