mirror of
https://gh-proxy.org/https://github.com/klinsmaya/multica.git
synced 2026-11-11 02:46:45 +08:00
69 lines
2.2 KiB
TypeScript
69 lines
2.2 KiB
TypeScript
import { useMutation, useQueryClient } from "@tanstack/react-query";
|
|
import { api } from "../api";
|
|
import { adminKeys } from "./queries";
|
|
import type { AdminActionRequest, AdminCreateWorkspaceRequest, SetPlatformAdminRequest } from "./schemas";
|
|
|
|
// Admin writes are rare, consequential and audited, so none of them patch the
|
|
// cache optimistically: every one awaits the server, then invalidates the
|
|
// whole admin tree (lists, detail, overview counts and the audit log all move).
|
|
function useInvalidateAdmin() {
|
|
const qc = useQueryClient();
|
|
return () => qc.invalidateQueries({ queryKey: adminKeys.all });
|
|
}
|
|
|
|
export function useAdminDisableUser() {
|
|
const invalidate = useInvalidateAdmin();
|
|
return useMutation({
|
|
mutationFn: ({ userId, ...body }: AdminActionRequest & { userId: string }) =>
|
|
api.adminDisableUser(userId, body),
|
|
onSuccess: invalidate,
|
|
});
|
|
}
|
|
|
|
export function useAdminEnableUser() {
|
|
const invalidate = useInvalidateAdmin();
|
|
return useMutation({
|
|
mutationFn: ({ userId, ...body }: AdminActionRequest & { userId: string }) =>
|
|
api.adminEnableUser(userId, body),
|
|
onSuccess: invalidate,
|
|
});
|
|
}
|
|
|
|
export function useAdminRevokeUserToken() {
|
|
const invalidate = useInvalidateAdmin();
|
|
return useMutation({
|
|
mutationFn: ({
|
|
userId,
|
|
tokenId,
|
|
...body
|
|
}: AdminActionRequest & { userId: string; tokenId: string }) =>
|
|
api.adminRevokeUserToken(userId, tokenId, body),
|
|
onSuccess: invalidate,
|
|
});
|
|
}
|
|
|
|
export function useAdminSetPlatformAdmin() {
|
|
const invalidate = useInvalidateAdmin();
|
|
return useMutation({
|
|
mutationFn: (body: SetPlatformAdminRequest) => api.adminSetPlatformAdmin(body),
|
|
onSuccess: invalidate,
|
|
});
|
|
}
|
|
|
|
export function useAdminRemovePlatformAdmin() {
|
|
const invalidate = useInvalidateAdmin();
|
|
return useMutation({
|
|
mutationFn: ({ userId, ...body }: AdminActionRequest & { userId: string }) =>
|
|
api.adminRemovePlatformAdmin(userId, body),
|
|
onSuccess: invalidate,
|
|
});
|
|
}
|
|
|
|
export function useAdminCreateWorkspace() {
|
|
const invalidate = useInvalidateAdmin();
|
|
return useMutation({
|
|
mutationFn: (body: AdminCreateWorkspaceRequest) => api.adminCreateWorkspace(body),
|
|
onSuccess: invalidate,
|
|
});
|
|
}
|