grok2api / frontend /src /features /settings /use-settings.ts
fromozuzhouzzz
Deploy grok2api v3.0.11 to HF Spaces
f1dd159
Raw
History Blame Contribute Delete
1.59 kB
import { zodResolver } from "@hookform/resolvers/zod";
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import { useEffect } from "react";
import { useForm } from "react-hook-form";
import { useTranslation } from "react-i18next";
import { toast } from "sonner";
import { getSettings, updateSettings } from "@/features/settings/settings-api";
import { settingsSchema, toSettingsDTO, toSettingsForm, type SettingsForm } from "@/features/settings/settings-model";
export function useSettings() {
const { t } = useTranslation();
const queryClient = useQueryClient();
const settingsQuery = useQuery({ queryKey: ["settings"], queryFn: getSettings });
const form = useForm<SettingsForm>({ resolver: zodResolver(settingsSchema) });
const updateMutation = useMutation({
mutationFn: (config: SettingsForm) => updateSettings(settingsQuery.data?.revision ?? "0", toSettingsDTO(config)),
onSuccess: (snapshot) => {
queryClient.setQueryData(["settings"], snapshot);
void queryClient.invalidateQueries({ queryKey: ["system-info"] });
form.reset(toSettingsForm(snapshot.config));
toast.success(t("settings.saved"));
},
onError: (error) => toast.error(error instanceof Error ? error.message : t("errors.generic")),
});
useEffect(() => {
if (settingsQuery.data) form.reset(toSettingsForm(settingsQuery.data.config));
}, [form, settingsQuery.data]);
return {
form,
settingsQuery,
updateMutation,
reset: () => { if (settingsQuery.data) form.reset(toSettingsForm(settingsQuery.data.config)); },
};
}