fix: resolve race conditions during impersonation handoff by reloading directly from dataService
This commit is contained in:
@@ -216,10 +216,7 @@ export const Layout: React.FC<{ children: React.ReactNode }> = ({ children }) =>
|
||||
{localStorage.getItem('ctms_super_admin_token') && (
|
||||
<button
|
||||
onClick={() => {
|
||||
if (returnToSuperAdmin()) {
|
||||
window.location.hash = '#/super-admin';
|
||||
window.location.reload();
|
||||
}
|
||||
returnToSuperAdmin();
|
||||
}}
|
||||
className="w-full flex items-center justify-center gap-2 py-2 px-3 bg-zinc-900 dark:bg-brand-yellow text-white dark:text-zinc-950 rounded-lg text-xs font-bold hover:opacity-90 transition-colors"
|
||||
>
|
||||
|
||||
@@ -100,9 +100,6 @@ export const SuperAdmin: React.FC = () => {
|
||||
return;
|
||||
}
|
||||
await impersonateTenant(tenantId);
|
||||
// Force a full reload to clear any cached context/state in the React app
|
||||
window.location.hash = '#/';
|
||||
window.location.reload();
|
||||
} catch (err: any) {
|
||||
alert(err.message || 'Erro ao tentar entrar na organização.');
|
||||
}
|
||||
|
||||
@@ -410,6 +410,10 @@ export const impersonateTenant = async (tenantId: string): Promise<any> => {
|
||||
localStorage.setItem('ctms_token', data.token);
|
||||
localStorage.setItem('ctms_user_id', data.user.id);
|
||||
localStorage.setItem('ctms_tenant_id', data.user.tenant_id || '');
|
||||
|
||||
window.location.hash = '#/';
|
||||
window.location.reload();
|
||||
|
||||
return data;
|
||||
};
|
||||
|
||||
@@ -434,6 +438,9 @@ export const returnToSuperAdmin = (): boolean => {
|
||||
localStorage.setItem('ctms_user_id', payload.id);
|
||||
localStorage.setItem('ctms_tenant_id', payload.tenant_id || 'system');
|
||||
localStorage.removeItem('ctms_super_admin_token');
|
||||
|
||||
window.location.hash = '#/super-admin';
|
||||
window.location.reload();
|
||||
return true;
|
||||
} catch (e) {
|
||||
console.error("Failed to restore super admin token", e);
|
||||
|
||||
Reference in New Issue
Block a user