fiddy/apps/web/hooks/use-user-settings.ts
Nico f8e426542d
Some checks failed
Build & Deploy Fiddy (Dokploy) / build (push) Has been cancelled
Build & Deploy Fiddy (Dokploy) / deploy (push) Has been cancelled
feat: implement schedules pivot, scheduler service, and dokploy deploy flow
2026-02-15 17:10:58 -08:00

42 lines
1.4 KiB
TypeScript

import { useCallback, useEffect, useState } from "react";
import { userSettingsGet, userSettingsUpdate, type UserSettings } from "@/lib/client/user-settings";
import type { ApiResult } from "@/lib/client/fetch-json";
function isError<T>(result: ApiResult<T>): result is { error: { code: string; message: string } } {
return "error" in result;
}
const defaultSettings: UserSettings = { entryPanelPageSize: 10 };
export default function useUserSettings() {
const [settings, setSettings] = useState<UserSettings>(defaultSettings);
const [loading, setLoading] = useState(true);
const [error, setError] = useState("");
const load = useCallback(async () => {
setLoading(true);
setError("");
const result = await userSettingsGet();
if (isError(result)) setError(result.error.message || "");
else setSettings(result.data.settings || defaultSettings);
setLoading(false);
}, []);
const updateSettings = useCallback(async (next: UserSettings) => {
setError("");
const result = await userSettingsUpdate(next);
if (isError(result)) {
setError(result.error.message || "");
return false;
}
setSettings(result.data.settings);
return true;
}, []);
useEffect(() => {
load();
}, [load]);
return { settings, loading, error, updateSettings, reload: load };
}