ultisuite-client/lib/api/hooks/use-admin-queries.ts
2026-06-07 21:55:42 +02:00

82 lines
2.4 KiB
TypeScript

"use client"
import { useQuery } from "@tanstack/react-query"
import { apiClient } from "@/lib/api/client"
import type {
AdminAuditListResponse,
AdminPublicSharesListResponse,
AdminStatsResponse,
AdminUserDetail,
AdminUsersListResponse,
} from "@/lib/api/admin-types"
import { useAuthReady } from "@/lib/api/use-auth-ready"
export type AdminUsersQueryParams = {
page?: number
page_size?: number
q?: string
status?: string
role?: string
}
export function useAdminStats() {
const { ready, authenticated } = useAuthReady()
return useQuery({
queryKey: ["admin", "stats"],
queryFn: () => apiClient.get<AdminStatsResponse>("/admin/stats"),
enabled: ready && authenticated,
})
}
export function useAdminUsers(params: AdminUsersQueryParams = {}) {
const { ready, authenticated } = useAuthReady()
return useQuery({
queryKey: ["admin", "users", params],
queryFn: () =>
apiClient.get<AdminUsersListResponse>("/admin/users", {
page: params.page?.toString(),
page_size: params.page_size?.toString(),
q: params.q,
status: params.status,
role: params.role,
}),
enabled: ready && authenticated,
})
}
export function useAdminUser(userId: string | null) {
const { ready, authenticated } = useAuthReady()
return useQuery({
queryKey: ["admin", "users", userId],
queryFn: () => apiClient.get<AdminUserDetail>(`/admin/users/${userId}`),
enabled: ready && authenticated && Boolean(userId),
})
}
export function useAdminPublicShares(params: { page?: number; page_size?: number; q?: string } = {}) {
const { ready, authenticated } = useAuthReady()
return useQuery({
queryKey: ["admin", "public-shares", params],
queryFn: () =>
apiClient.get<AdminPublicSharesListResponse>("/admin/public-shares", {
page: params.page?.toString(),
page_size: params.page_size?.toString(),
q: params.q,
}),
enabled: ready && authenticated,
})
}
export function useAdminAuditLogs(params: { page?: number; page_size?: number } = {}) {
const { ready, authenticated } = useAuthReady()
return useQuery({
queryKey: ["admin", "audit", params],
queryFn: () =>
apiClient.get<AdminAuditListResponse>("/admin/audit", {
page: params.page?.toString(),
page_size: params.page_size?.toString(),
}),
enabled: ready && authenticated,
})
}