2026-02-13 15:52:13 +07:00
|
|
|
"use client";
|
|
|
|
|
|
|
|
|
|
import type { NormalServer, ReverseProxyServer } from "@minikura/api";
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
const fetchServers = useCallback(async () => {
|
|
|
|
|
try {
|
|
|
|
|
const [normalRes, proxyRes] = await Promise.all([
|
|
|
|
|
api.api.servers.get(),
|
|
|
|
|
getReverseProxyApi().get(),
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
if (normalRes.data) {
|
|
|
|
|
setNormalServers(normalRes.data as unknown as NormalServer[]);
|
|
|
|
|
}
|
|
|
|
|
if (proxyRes.data) {
|
|
|
|
|
setReverseProxies(proxyRes.data as unknown as ReverseProxyServer[]);
|
|
|
|
|
}
|
2026-02-17 18:12:02 +07:00
|
|
|
} catch (_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") {
|
|
|
|
|
await api.api.servers({ id }).delete();
|
|
|
|
|
} else {
|
|
|
|
|
await getReverseProxyApi()({ id }).delete();
|
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,
|
|
|
|
|
refresh: fetchServers,
|
|
|
|
|
deleteServer,
|
|
|
|
|
};
|
|
|
|
|
}
|