feat: add user management components including header, loading states, and table with pagination
This commit is contained in:
@@ -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> {
|
||||
|
||||
Reference in New Issue
Block a user