All checks were successful
CI / ci (push) Successful in 15s
Run biome check --write --unsafe to fix tabs, import ordering, and non-null assertions across entire codebase. Disable a11y rules not applicable to this single-user app. Exclude auto-generated routeTree. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
38 lines
926 B
TypeScript
38 lines
926 B
TypeScript
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
import { apiGet, apiPut } from "../lib/api";
|
|
|
|
interface Setting {
|
|
key: string;
|
|
value: string;
|
|
}
|
|
|
|
export function useSetting(key: string) {
|
|
return useQuery({
|
|
queryKey: ["settings", key],
|
|
queryFn: async () => {
|
|
try {
|
|
const result = await apiGet<Setting>(`/api/settings/${key}`);
|
|
return result.value;
|
|
} catch (err: any) {
|
|
if (err?.status === 404) return null;
|
|
throw err;
|
|
}
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useUpdateSetting() {
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: ({ key, value }: { key: string; value: string }) =>
|
|
apiPut<Setting>(`/api/settings/${key}`, { value }),
|
|
onSuccess: (_data, variables) => {
|
|
queryClient.invalidateQueries({ queryKey: ["settings", variables.key] });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useOnboardingComplete() {
|
|
return useSetting("onboardingComplete");
|
|
}
|