import { create } from "@bufbuild/protobuf"; import { isEqual } from "lodash-es"; import { useEffect, useState } from "react"; import { toast } from "react-hot-toast"; import { Button } from "@/components/ui/button"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Switch } from "@/components/ui/switch"; import { Textarea } from "@/components/ui/textarea"; import { identityProviderServiceClient } from "@/connect"; import { useInstance } from "@/contexts/InstanceContext"; import useDialog from "@/hooks/useDialog"; import { handleError } from "@/lib/error"; import { IdentityProvider } from "@/types/proto/api/v1/idp_service_pb"; import { InstanceSetting_GeneralSetting, InstanceSetting_GeneralSettingSchema, InstanceSetting_Key, InstanceSettingSchema, } from "@/types/proto/api/v1/instance_service_pb"; import { useTranslate } from "@/utils/i18n"; import UpdateCustomizedProfileDialog from "../UpdateCustomizedProfileDialog"; import SettingGroup from "./SettingGroup"; import SettingRow from "./SettingRow"; import SettingSection from "./SettingSection"; const InstanceSection = () => { const t = useTranslate(); const customizeDialog = useDialog(); const { generalSetting: originalSetting, profile, updateSetting, fetchSetting } = useInstance(); const [instanceGeneralSetting, setInstanceGeneralSetting] = useState(originalSetting); const [identityProviderList, setIdentityProviderList] = useState([]); useEffect(() => { setInstanceGeneralSetting({ ...instanceGeneralSetting, customProfile: originalSetting.customProfile }); }, [originalSetting]); const handleUpdateCustomizedProfileButtonClick = () => { customizeDialog.open(); }; const updatePartialSetting = (partial: Partial) => { setInstanceGeneralSetting( create(InstanceSetting_GeneralSettingSchema, { ...instanceGeneralSetting, ...partial, }), ); }; const handleSaveGeneralSetting = async () => { try { await updateSetting( create(InstanceSettingSchema, { name: `instance/settings/${InstanceSetting_Key[InstanceSetting_Key.GENERAL]}`, value: { case: "generalSetting", value: instanceGeneralSetting, }, }), ); await fetchSetting(InstanceSetting_Key.GENERAL); } catch (error: unknown) { await handleError(error, toast.error, { context: "Update general settings", }); return; } toast.success(t("message.update-succeed")); }; useEffect(() => { fetchIdentityProviderList(); }, []); const fetchIdentityProviderList = async () => { const { identityProviders } = await identityProviderServiceClient.listIdentityProviders({}); setIdentityProviderList(identityProviders); }; return (