import { isEqual } from "lodash-es"; import { observer } from "mobx-react-lite"; 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 "@/grpcweb"; import useDialog from "@/hooks/useDialog"; import { instanceStore } from "@/store"; import { instanceSettingNamePrefix } from "@/store/common"; import { IdentityProvider } from "@/types/proto/api/v1/idp_service"; import { InstanceSetting_GeneralSetting, InstanceSetting_Key } from "@/types/proto/api/v1/instance_service"; import { useTranslate } from "@/utils/i18n"; import ThemeSelect from "../ThemeSelect"; import UpdateCustomizedProfileDialog from "../UpdateCustomizedProfileDialog"; import SettingGroup from "./SettingGroup"; import SettingRow from "./SettingRow"; import SettingSection from "./SettingSection"; const InstanceSection = observer(() => { const t = useTranslate(); const customizeDialog = useDialog(); const originalSetting = InstanceSetting_GeneralSetting.fromPartial( instanceStore.getInstanceSettingByKey(InstanceSetting_Key.GENERAL)?.generalSetting || {}, ); const [instanceGeneralSetting, setInstanceGeneralSetting] = useState(originalSetting); const [identityProviderList, setIdentityProviderList] = useState([]); useEffect(() => { setInstanceGeneralSetting({ ...instanceGeneralSetting, customProfile: originalSetting.customProfile }); }, [instanceStore.getInstanceSettingByKey(InstanceSetting_Key.GENERAL)]); const handleUpdateCustomizedProfileButtonClick = () => { customizeDialog.open(); }; const updatePartialSetting = (partial: Partial) => { setInstanceGeneralSetting( InstanceSetting_GeneralSetting.fromPartial({ ...instanceGeneralSetting, ...partial, }), ); }; const handleSaveGeneralSetting = async () => { try { await instanceStore.upsertInstanceSetting({ name: `${instanceSettingNamePrefix}${InstanceSetting_Key.GENERAL}`, generalSetting: instanceGeneralSetting, }); } catch (error: any) { toast.error(error.details); console.error(error); return; } toast.success(t("message.update-succeed")); }; useEffect(() => { fetchIdentityProviderList(); }, []); const fetchIdentityProviderList = async () => { const { identityProviders } = await identityProviderServiceClient.listIdentityProviders({}); setIdentityProviderList(identityProviders); }; return ( updatePartialSetting({ theme: value })} className="min-w-fit" />