IKHSAN
EN Read in EnglishID

homeio

Publik

Fork dari doctor-io/homeio

Branch
main
Commit terakhir
958d74616 Oktober 2026

useTelemetrySettings.ts

Buka raw
"use client";

import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import { queryKeys } from "@/lib/shared/query-keys";
import type {
  TelemetrySettings,
  TelemetrySettingsUpdateRequest,
} from "@/lib/shared/contracts/telemetry";

async function fetchTelemetrySettings(): Promise<TelemetrySettings> {
  const res = await fetch("/api/v1/settings/telemetry");
  if (!res.ok) throw new Error("Failed to fetch telemetry settings");
  const json = (await res.json()) as { data: TelemetrySettings };
  return json.data;
}

async function updateTelemetrySettings(
  payload: TelemetrySettingsUpdateRequest,
): Promise<TelemetrySettings> {
  const res = await fetch("/api/v1/settings/telemetry", {
    method: "PUT",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(payload),
  });
  const json = (await res.json()) as { data?: TelemetrySettings; error?: string };
  if (!res.ok || !json.data) throw new Error(json.error ?? "Failed to save");
  return json.data;
}

export function useTelemetrySettings() {
  const queryClient = useQueryClient();
  const query = useQuery({
    queryKey: queryKeys.telemetrySettings,
    queryFn: fetchTelemetrySettings,
    refetchOnWindowFocus: false,
  });

  const mutation = useMutation({
    mutationFn: updateTelemetrySettings,
    onSuccess: (data) => {
      queryClient.setQueryData(queryKeys.telemetrySettings, data);
    },
  });

  return {
    settings: query.data,
    isLoading: query.isLoading,
    isSaving: mutation.isPending,
    setEnabled: (enabled: boolean) => mutation.mutate({ enabled }),
  };
}
byte
1.604
baris
52
Jenis
ts
Commit terakhir
16 Oktober 2026