Files
Minikura/apps/web/hooks/use-server-list.ts
T

66 lines
1.8 KiB
TypeScript
Raw Normal View History

2026-02-13 15:52:13 +07:00
"use client";
import type { NormalServer, ReverseProxyServer } from "@minikura/api";
2026-08-13 03:29:33 +07:00
import { getErrorMessage } from "@minikura/shared/errors";
2026-02-13 15:52:13 +07:00
import { useCallback, useEffect, useState } from "react";
2026-02-17 18:12:02 +07:00
import { api } from "@/lib/api-client";
2026-02-13 15:52:13 +07:00
import { getReverseProxyApi } from "@/lib/api-helpers";
export function useServerList() {
const [normalServers, setNormalServers] = useState<NormalServer[]>([]);
const [reverseProxies, setReverseProxies] = useState<ReverseProxyServer[]>([]);
const [loading, setLoading] = useState(true);
2026-08-13 01:58:15 +07:00
const [error, setError] = useState<string | null>(null);
2026-02-13 15:52:13 +07:00
const fetchServers = useCallback(async () => {
2026-08-13 01:58:15 +07:00
setError(null);
2026-02-13 15:52:13 +07:00
try {
const [normalRes, proxyRes] = await Promise.all([
api.api.servers.get(),
getReverseProxyApi().get(),
]);
2026-08-13 03:29:33 +07:00
if (normalRes.error) throw normalRes.error;
if (proxyRes.error) throw proxyRes.error;
2026-02-13 15:52:13 +07:00
if (normalRes.data) {
setNormalServers(normalRes.data as unknown as NormalServer[]);
}
if (proxyRes.data) {
setReverseProxies(proxyRes.data as unknown as ReverseProxyServer[]);
}
2026-08-13 01:58:15 +07:00
} catch (error) {
2026-08-13 03:29:33 +07:00
setError(getErrorMessage(error));
2026-02-13 15:52:13 +07:00
} finally {
setLoading(false);
}
}, []);
const deleteServer = useCallback(
async (id: string, type: "normal" | "proxy") => {
2026-02-17 18:12:02 +07:00
if (type === "normal") {
2026-08-13 03:29:33 +07:00
const response = await api.api.servers({ id }).delete();
if (response.error) throw response.error;
2026-02-17 18:12:02 +07:00
} else {
2026-08-13 03:29:33 +07:00
const response = await getReverseProxyApi()({ id }).delete();
if (response.error) throw response.error;
2026-02-13 15:52:13 +07:00
}
2026-02-17 18:12:02 +07:00
await fetchServers();
2026-02-13 15:52:13 +07:00
},
[fetchServers]
);
useEffect(() => {
fetchServers();
}, [fetchServers]);
return {
normalServers,
reverseProxies,
loading,
2026-08-13 01:58:15 +07:00
error,
2026-02-13 15:52:13 +07:00
refresh: fetchServers,
deleteServer,
};
}