82 lines
2.4 KiB
TypeScript
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,
|
|
})
|
|
}
|