Fixed Console user lockout and unlock implementation

This commit is contained in:
2026-10-24 14:38:55 +02:00
parent d912c5c6c3
commit c43e18f184
6 changed files with 78 additions and 26 deletions
@@ -237,16 +237,26 @@ export const UserSecurityModal: React.FC<UserSecurityModalProps> = ({
onError: (err: unknown) => toastError('Logout Failed', err),
});
const lockoutMutation = useMutation({
mutationFn: (disableLock: boolean) => setUserLockout(userId, disableLock),
onSuccess: (_, disableLock) => {
success(
disableLock ? 'Account Unlocked' : 'Account Locked',
`User account lockout status successfully modified.`
);
const lockUserMutation = useMutation({
mutationFn: () => setUserLockout(userId, true),
onSuccess: () => {
success('Account Locked', 'User account lockout enabled (disable = true).');
refetchUser();
queryClient.invalidateQueries({ queryKey: ['users'] });
queryClient.invalidateQueries({ queryKey: ['user-detail', userId] });
},
onError: (err: unknown) => toastError('Lockout Update Failed', err),
onError: (err: unknown) => toastError('Lock User Failed', err),
});
const unlockUserMutation = useMutation({
mutationFn: () => setUserLockout(userId, false),
onSuccess: () => {
success('Account Unlocked', 'User account lockout disabled (disable = false).');
refetchUser();
queryClient.invalidateQueries({ queryKey: ['users'] });
queryClient.invalidateQueries({ queryKey: ['user-detail', userId] });
},
onError: (err: unknown) => toastError('Unlock User Failed', err),
});
const statusMutation = useMutation({
@@ -643,19 +653,27 @@ export const UserSecurityModal: React.FC<UserSecurityModalProps> = ({
<div className="flex items-center gap-2">
<button
type="button"
onClick={() => lockoutMutation.mutate(false)}
disabled={lockoutMutation.isPending || !canManageSessions}
onClick={(e) => {
e.preventDefault();
e.stopPropagation();
lockUserMutation.mutate();
}}
disabled={lockUserMutation.isPending || unlockUserMutation.isPending || !canManageSessions}
className="px-3 py-1.5 bg-rose-500/10 hover:bg-rose-500/20 text-rose-400 border border-rose-500/20 rounded-xl font-semibold transition cursor-pointer disabled:opacity-50"
>
Lock User
{lockUserMutation.isPending ? 'Locking...' : 'Lock User'}
</button>
<button
type="button"
onClick={() => lockoutMutation.mutate(true)}
disabled={lockoutMutation.isPending || !canManageSessions}
onClick={(e) => {
e.preventDefault();
e.stopPropagation();
unlockUserMutation.mutate();
}}
disabled={unlockUserMutation.isPending || lockUserMutation.isPending || !canManageSessions}
className="px-3 py-1.5 bg-emerald-500/10 hover:bg-emerald-500/20 text-emerald-400 border border-emerald-500/20 rounded-xl font-semibold transition cursor-pointer disabled:opacity-50"
>
Unlock User
{unlockUserMutation.isPending ? 'Unlocking...' : 'Unlock User'}
</button>
</div>
</div>