feat: add user management components including header, loading states, and table with pagination

This commit is contained in:
JSC
2025-08-17 11:44:08 +02:00
parent 75ecd26e06
commit 46bfcad271
5 changed files with 515 additions and 130 deletions

View File

@@ -23,6 +23,23 @@ export interface MessageResponse {
message: string
}
export interface GetUsersParams {
page?: number
limit?: number
search?: string
sort_by?: string
sort_order?: string
status_filter?: string
}
export interface GetUsersResponse {
users: User[]
total: number
page: number
limit: number
total_pages: number
}
export interface ScanResults {
added: number
updated: number
@@ -54,10 +71,32 @@ export interface NormalizationResponse {
}
export class AdminService {
async listUsers(limit = 100, offset = 0): Promise<User[]> {
return apiClient.get<User[]>(`/api/v1/admin/users/`, {
params: { limit, offset },
})
async listUsers(params?: GetUsersParams): Promise<GetUsersResponse> {
const searchParams = new URLSearchParams()
if (params?.page) {
searchParams.append('page', params.page.toString())
}
if (params?.limit) {
searchParams.append('limit', params.limit.toString())
}
if (params?.search) {
searchParams.append('search', params.search)
}
if (params?.sort_by) {
searchParams.append('sort_by', params.sort_by)
}
if (params?.sort_order) {
searchParams.append('sort_order', params.sort_order)
}
if (params?.status_filter) {
searchParams.append('status_filter', params.status_filter)
}
const url = searchParams.toString()
? `/api/v1/admin/users/?${searchParams.toString()}`
: '/api/v1/admin/users/'
return apiClient.get<GetUsersResponse>(url)
}
async getUser(userId: number): Promise<User> {