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 { identityProviderServiceClient } from "@/connect"; import { useInstance } from "@/contexts/InstanceContext"; import useDialog from "@/hooks/useDialog"; 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 { SettingCodeEditor, SettingList, SettingListItem } from "./SettingList"; import SettingSection from "./SettingSection"; import useInstanceSettingUpdater, { buildInstanceSettingName } from "./useInstanceSettingUpdater"; const InstanceSection = () => { const t = useTranslate(); const customizeDialog = useDialog(); const saveInstanceSetting = useInstanceSettingUpdater(); const { generalSetting: originalSetting, profile } = useInstance(); const [instanceGeneralSetting, setInstanceGeneralSetting] = useState(originalSetting); const [identityProviderList, setIdentityProviderList] = useState([]); useEffect(() => { setInstanceGeneralSetting(originalSetting); }, [originalSetting]); const fetchIdentityProviderList = async () => { const { identityProviders } = await identityProviderServiceClient.listIdentityProviders({}); setIdentityProviderList(identityProviders); }; useEffect(() => { fetchIdentityProviderList(); }, []); const updatePartialSetting = (partial: Partial) => { setInstanceGeneralSetting( create(InstanceSetting_GeneralSettingSchema, { ...instanceGeneralSetting, ...partial, }), ); }; const handleSaveGeneralSetting = async () => { await saveInstanceSetting({ key: InstanceSetting_Key.GENERAL, setting: create(InstanceSettingSchema, { name: buildInstanceSettingName(InstanceSetting_Key.GENERAL), value: { case: "generalSetting", value: instanceGeneralSetting, }, }), errorContext: "Update general settings", }); }; return ( updatePartialSetting({ additionalStyle })} /> updatePartialSetting({ additionalScript })} /> updatePartialSetting({ disallowUserRegistration: checked })} /> updatePartialSetting({ disallowPasswordAuth: checked })} /> updatePartialSetting({ disallowChangeUsername: checked })} /> updatePartialSetting({ disallowChangeNickname: checked })} />
{ toast.success(t("message.update-succeed")); }} />
); }; export default InstanceSection;