feat: implement user impersonation

This commit is contained in:
giriparus
2026-02-03 11:51:35 +05:30
parent 8f84fbf562
commit bc38dba859
9 changed files with 302 additions and 16 deletions
@@ -1,10 +1,10 @@
import { useUsersList } from "./useUsersList";
import { useUserForm } from "./useUserForm";
import { useUserDialogs } from "./useUserDialogs";
import { useUserOperations } from "./useUserOperations";
import { User } from "@/services/userService";
import { UserFormValues, NewUserFormValues } from "../userForms";
import { useState } from "react";
export const useUserManagement = () => {
const { users, loading, error, fetchUsers } = useUsersList();
@@ -32,6 +32,7 @@ export const useUserManagement = () => {
handleDeleteUser: baseHandleDeleteUser,
onSubmit: baseOnSubmit,
onAddUser: baseOnAddUser,
onImpersonate: baseOnImpersonate,
} = useUserOperations(
fetchUsers,
setIsDialogOpen,
@@ -42,6 +43,9 @@ export const useUserManagement = () => {
newUserForm.reset
);
const [impersonationToken, setImpersonationToken] = useState<string | null>(null);
const [isImpersonationTokenDialogOpen, setIsImpersonationTokenDialogOpen] = useState(false);
// Wrapper functions to provide the needed arguments
const handleEditUser = (user: User) => {
baseHandleEditUser(user, form);
@@ -56,6 +60,15 @@ export const useUserManagement = () => {
baseOnSubmit(data, currentUser);
};
const onImpersonate = async (data: UserFormValues) => {
const token = await baseOnImpersonate(data, currentUser);
if (token) {
setImpersonationToken(token);
setIsImpersonationTokenDialogOpen(true);
}
};
const onAddUser = (data: NewUserFormValues) => {
baseOnAddUser(data);
};
@@ -81,6 +94,10 @@ export const useUserManagement = () => {
handleDeletePrompt,
handleDeleteUser,
onSubmit,
onImpersonate,
onAddUser,
impersonationToken,
isImpersonationTokenDialogOpen,
setIsImpersonationTokenDialogOpen,
};
};