IKHSAN
ENID Baca dalam Bahasa Indonesia

homeio

Public

Forked from doctor-io/homeio

Branch
main
Latest commit
958d74616 October 2026

useTelemetrySettings.ts

Open 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 }),
  };
}
bytes
1,604
lines
52
Type
ts
Latest commit
16 October 2026