diff --git a/web/core/layouts/auth-layout/workspace-wrapper.tsx b/web/core/layouts/auth-layout/workspace-wrapper.tsx index 18717adc2bc..f52dfba81ee 100644 --- a/web/core/layouts/auth-layout/workspace-wrapper.tsx +++ b/web/core/layouts/auth-layout/workspace-wrapper.tsx @@ -40,7 +40,7 @@ export const WorkspaceAuthWrapper: FC = observer((props) } = useMember(); const { workspaces } = useWorkspace(); const { isMobile } = usePlatformOS(); - const { workspaceInfoBySlug, fetchUserWorkspaceInfo, fetchUserProjectPermissions, allowPermissions } = + const { loader, workspaceInfoBySlug, fetchUserWorkspaceInfo, fetchUserProjectPermissions, allowPermissions } = useUserPermissions(); // derived values const canPerformWorkspaceMemberActions = allowPermissions( @@ -102,7 +102,7 @@ export const WorkspaceAuthWrapper: FC = observer((props) const currentWorkspaceInfo = workspaceSlug && workspaceInfoBySlug(workspaceSlug.toString()); // if list of workspaces are not there then we have to render the spinner - if (allWorkspaces === undefined) { + if (allWorkspaces === undefined || loader) { return (
diff --git a/web/core/store/user/permissions.store.ts b/web/core/store/user/permissions.store.ts index 0fd89af8e80..581d65bdd81 100644 --- a/web/core/store/user/permissions.store.ts +++ b/web/core/store/user/permissions.store.ts @@ -23,6 +23,7 @@ import { CoreRootStore } from "@/store/root.store"; const workspaceService = new WorkspaceService(); export interface IUserPermissionStore { + loader: boolean; // observables workspaceUserInfo: Record; // workspaceSlug -> IWorkspaceMemberMe projectUserInfo: Record>; // workspaceSlug -> projectId -> IProjectMember @@ -52,6 +53,7 @@ export interface IUserPermissionStore { } export class UserPermissionStore implements IUserPermissionStore { + loader: boolean = false; // constants workspaceUserInfo: Record = {}; projectUserInfo: Record> = {}; @@ -61,6 +63,7 @@ export class UserPermissionStore implements IUserPermissionStore { constructor(private store: CoreRootStore) { makeObservable(this, { // observables + loader: observable.ref, workspaceUserInfo: observable, projectUserInfo: observable, workspaceProjectsPermissions: observable, @@ -156,15 +159,18 @@ export class UserPermissionStore implements IUserPermissionStore { */ fetchUserWorkspaceInfo = async (workspaceSlug: string): Promise => { try { + this.loader = true; const response = await workspaceService.workspaceMemberMe(workspaceSlug); if (response) { runInAction(() => { set(this.workspaceUserInfo, [workspaceSlug], response); + this.loader = false; }); } return response; } catch (error) { console.error("Error fetching user workspace information", error); + this.loader = false; throw error; } };