41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
'use client';
|
|
|
|
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
|
|
import * as api from '../api/platform-staff';
|
|
import type { PlatformRole } from '@horux/shared';
|
|
|
|
export function useStaff() {
|
|
return useQuery({
|
|
queryKey: ['platform-staff'],
|
|
queryFn: api.listStaff,
|
|
staleTime: 60 * 1000,
|
|
});
|
|
}
|
|
|
|
export function useSearchUsers(q: string) {
|
|
return useQuery({
|
|
queryKey: ['platform-staff-search', q],
|
|
queryFn: () => api.searchUsers(q),
|
|
enabled: q.length >= 2,
|
|
staleTime: 30 * 1000,
|
|
});
|
|
}
|
|
|
|
export function useGrantRole() {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: ({ userId, role }: { userId: string; role: PlatformRole }) =>
|
|
api.grantRole(userId, role),
|
|
onSuccess: () => qc.invalidateQueries({ queryKey: ['platform-staff'] }),
|
|
});
|
|
}
|
|
|
|
export function useRevokeRole() {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: ({ userId, role }: { userId: string; role: PlatformRole }) =>
|
|
api.revokeRole(userId, role),
|
|
onSuccess: () => qc.invalidateQueries({ queryKey: ['platform-staff'] }),
|
|
});
|
|
}
|