129 lines
4.0 KiB
TypeScript
129 lines
4.0 KiB
TypeScript
"use client"
|
|
|
|
import { useMutation, useQueryClient } from "@tanstack/react-query"
|
|
import { apiClient } from "@/lib/api/client"
|
|
import type {
|
|
AdminCreateUserRequest,
|
|
AdminInviteUserRequest,
|
|
AdminSetQuotaRequest,
|
|
AdminSetUserRoleRequest,
|
|
AdminUpdateUserRequest,
|
|
AdminUser,
|
|
AdminUserDetail,
|
|
} from "@/lib/api/admin-types"
|
|
|
|
export function useCreateAdminUser() {
|
|
const queryClient = useQueryClient()
|
|
return useMutation({
|
|
mutationFn: (body: AdminCreateUserRequest) =>
|
|
apiClient.post<AdminUser>("/admin/users", body),
|
|
onSuccess: () => {
|
|
void queryClient.invalidateQueries({ queryKey: ["admin", "users"] })
|
|
void queryClient.invalidateQueries({ queryKey: ["admin", "stats"] })
|
|
},
|
|
})
|
|
}
|
|
|
|
export function useInviteAdminUser() {
|
|
const queryClient = useQueryClient()
|
|
return useMutation({
|
|
mutationFn: (body: AdminInviteUserRequest) =>
|
|
apiClient.post<AdminUser>("/admin/users/invite", body),
|
|
onSuccess: () => {
|
|
void queryClient.invalidateQueries({ queryKey: ["admin", "users"] })
|
|
void queryClient.invalidateQueries({ queryKey: ["admin", "stats"] })
|
|
},
|
|
})
|
|
}
|
|
|
|
export function useUpdateAdminUser(userId: string) {
|
|
const queryClient = useQueryClient()
|
|
return useMutation({
|
|
mutationFn: (body: AdminUpdateUserRequest) =>
|
|
apiClient.put<AdminUserDetail>(`/admin/users/${userId}`, body),
|
|
onSuccess: () => {
|
|
void queryClient.invalidateQueries({ queryKey: ["admin", "users"] })
|
|
void queryClient.invalidateQueries({ queryKey: ["admin", "users", userId] })
|
|
},
|
|
})
|
|
}
|
|
|
|
export function useSetAdminUserRole(userId: string) {
|
|
const queryClient = useQueryClient()
|
|
return useMutation({
|
|
mutationFn: (body: AdminSetUserRoleRequest) =>
|
|
apiClient.put<AdminUserDetail>(`/admin/users/${userId}/role`, body),
|
|
onSuccess: () => {
|
|
void queryClient.invalidateQueries({ queryKey: ["admin", "users"] })
|
|
void queryClient.invalidateQueries({ queryKey: ["admin", "users", userId] })
|
|
void queryClient.invalidateQueries({ queryKey: ["admin", "stats"] })
|
|
},
|
|
})
|
|
}
|
|
|
|
export function useSetAdminUserQuota(userId: string) {
|
|
const queryClient = useQueryClient()
|
|
return useMutation({
|
|
mutationFn: (body: AdminSetQuotaRequest) =>
|
|
apiClient.put<void>(`/admin/users/${userId}/quota`, body),
|
|
onSuccess: () => {
|
|
void queryClient.invalidateQueries({ queryKey: ["admin", "users", userId] })
|
|
void queryClient.invalidateQueries({ queryKey: ["admin", "stats"] })
|
|
},
|
|
})
|
|
}
|
|
|
|
export function useDisableAdminUser() {
|
|
const queryClient = useQueryClient()
|
|
return useMutation({
|
|
mutationFn: (userId: string) =>
|
|
apiClient.post<void>(`/admin/users/${userId}/disable`),
|
|
onSuccess: () => {
|
|
void queryClient.invalidateQueries({ queryKey: ["admin", "users"] })
|
|
void queryClient.invalidateQueries({ queryKey: ["admin", "stats"] })
|
|
},
|
|
})
|
|
}
|
|
|
|
export function useReactivateAdminUser() {
|
|
const queryClient = useQueryClient()
|
|
return useMutation({
|
|
mutationFn: (userId: string) =>
|
|
apiClient.post<void>(`/admin/users/${userId}/reactivate`),
|
|
onSuccess: () => {
|
|
void queryClient.invalidateQueries({ queryKey: ["admin", "users"] })
|
|
void queryClient.invalidateQueries({ queryKey: ["admin", "stats"] })
|
|
},
|
|
})
|
|
}
|
|
|
|
export function useRevokeAdminPublicShare() {
|
|
const queryClient = useQueryClient()
|
|
return useMutation({
|
|
mutationFn: ({
|
|
shareId,
|
|
ownerNcUserId,
|
|
}: {
|
|
shareId: string
|
|
ownerNcUserId: string
|
|
}) =>
|
|
apiClient.delete(
|
|
`/admin/public-shares/${shareId}?owner_nc_user_id=${encodeURIComponent(ownerNcUserId)}`
|
|
),
|
|
onSuccess: () => {
|
|
void queryClient.invalidateQueries({ queryKey: ["admin", "public-shares"] })
|
|
},
|
|
})
|
|
}
|
|
|
|
export function useDeleteAdminUser() {
|
|
const queryClient = useQueryClient()
|
|
return useMutation({
|
|
mutationFn: (userId: string) => apiClient.delete(`/admin/users/${userId}`),
|
|
onSuccess: () => {
|
|
void queryClient.invalidateQueries({ queryKey: ["admin", "users"] })
|
|
void queryClient.invalidateQueries({ queryKey: ["admin", "stats"] })
|
|
},
|
|
})
|
|
}
|