fix: not authorized flicker (#5593)

This commit is contained in:
Anmol Singh Bhatia 2024-09-12 16:26:57 +05:30 committed by GitHub
parent 48e97477ed
commit 9d694ab006
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 8 additions and 2 deletions

View file

@ -40,7 +40,7 @@ export const WorkspaceAuthWrapper: FC<IWorkspaceAuthWrapper> = observer((props)
} = useMember(); } = useMember();
const { workspaces } = useWorkspace(); const { workspaces } = useWorkspace();
const { isMobile } = usePlatformOS(); const { isMobile } = usePlatformOS();
const { workspaceInfoBySlug, fetchUserWorkspaceInfo, fetchUserProjectPermissions, allowPermissions } = const { loader, workspaceInfoBySlug, fetchUserWorkspaceInfo, fetchUserProjectPermissions, allowPermissions } =
useUserPermissions(); useUserPermissions();
// derived values // derived values
const canPerformWorkspaceMemberActions = allowPermissions( const canPerformWorkspaceMemberActions = allowPermissions(
@ -102,7 +102,7 @@ export const WorkspaceAuthWrapper: FC<IWorkspaceAuthWrapper> = observer((props)
const currentWorkspaceInfo = workspaceSlug && workspaceInfoBySlug(workspaceSlug.toString()); const currentWorkspaceInfo = workspaceSlug && workspaceInfoBySlug(workspaceSlug.toString());
// if list of workspaces are not there then we have to render the spinner // if list of workspaces are not there then we have to render the spinner
if (allWorkspaces === undefined) { if (allWorkspaces === undefined || loader) {
return ( return (
<div className="grid h-screen place-items-center bg-custom-background-100 p-4"> <div className="grid h-screen place-items-center bg-custom-background-100 p-4">
<div className="flex flex-col items-center gap-3 text-center"> <div className="flex flex-col items-center gap-3 text-center">

View file

@ -23,6 +23,7 @@ import { CoreRootStore } from "@/store/root.store";
const workspaceService = new WorkspaceService(); const workspaceService = new WorkspaceService();
export interface IUserPermissionStore { export interface IUserPermissionStore {
loader: boolean;
// observables // observables
workspaceUserInfo: Record<string, IWorkspaceMemberMe>; // workspaceSlug -> IWorkspaceMemberMe workspaceUserInfo: Record<string, IWorkspaceMemberMe>; // workspaceSlug -> IWorkspaceMemberMe
projectUserInfo: Record<string, Record<string, IProjectMember>>; // workspaceSlug -> projectId -> IProjectMember projectUserInfo: Record<string, Record<string, IProjectMember>>; // workspaceSlug -> projectId -> IProjectMember
@ -52,6 +53,7 @@ export interface IUserPermissionStore {
} }
export class UserPermissionStore implements IUserPermissionStore { export class UserPermissionStore implements IUserPermissionStore {
loader: boolean = false;
// constants // constants
workspaceUserInfo: Record<string, IWorkspaceMemberMe> = {}; workspaceUserInfo: Record<string, IWorkspaceMemberMe> = {};
projectUserInfo: Record<string, Record<string, IProjectMember>> = {}; projectUserInfo: Record<string, Record<string, IProjectMember>> = {};
@ -61,6 +63,7 @@ export class UserPermissionStore implements IUserPermissionStore {
constructor(private store: CoreRootStore) { constructor(private store: CoreRootStore) {
makeObservable(this, { makeObservable(this, {
// observables // observables
loader: observable.ref,
workspaceUserInfo: observable, workspaceUserInfo: observable,
projectUserInfo: observable, projectUserInfo: observable,
workspaceProjectsPermissions: observable, workspaceProjectsPermissions: observable,
@ -156,15 +159,18 @@ export class UserPermissionStore implements IUserPermissionStore {
*/ */
fetchUserWorkspaceInfo = async (workspaceSlug: string): Promise<IWorkspaceMemberMe | undefined> => { fetchUserWorkspaceInfo = async (workspaceSlug: string): Promise<IWorkspaceMemberMe | undefined> => {
try { try {
this.loader = true;
const response = await workspaceService.workspaceMemberMe(workspaceSlug); const response = await workspaceService.workspaceMemberMe(workspaceSlug);
if (response) { if (response) {
runInAction(() => { runInAction(() => {
set(this.workspaceUserInfo, [workspaceSlug], response); set(this.workspaceUserInfo, [workspaceSlug], response);
this.loader = false;
}); });
} }
return response; return response;
} catch (error) { } catch (error) {
console.error("Error fetching user workspace information", error); console.error("Error fetching user workspace information", error);
this.loader = false;
throw error; throw error;
} }
}; };