REALTIME - МЕЖПРОЕКТНАЯ КОММУНИКАЦИЯ: обновление доступов workspace
This commit is contained in:
@@ -99,6 +99,7 @@ export const useNodeDCRealtimeEvents = (enabled: boolean, currentUserId?: string
|
||||
const refreshWorkspaceScope = async (event: TNodeDCRealtimeEvent) => {
|
||||
const workspaceSlug = event.workspace_slug;
|
||||
if (!workspaceSlug) return;
|
||||
const projectIds = [...new Set(event.project_ids?.filter(Boolean) ?? [])];
|
||||
|
||||
await Promise.allSettled([
|
||||
workspaceRoot.fetchWorkspaces(),
|
||||
@@ -106,6 +107,9 @@ export const useNodeDCRealtimeEvents = (enabled: boolean, currentUserId?: string
|
||||
memberRoot.workspace.fetchWorkspaceMemberInvitations(workspaceSlug),
|
||||
projectStore.fetchProjects(workspaceSlug),
|
||||
userStore.permission.fetchUserProjectPermissions(workspaceSlug),
|
||||
mutate("NODEDC_WORKSPACE_POLICY"),
|
||||
mutate(`NODEDC_WORKSPACE_POLICY_${workspaceSlug}`),
|
||||
...projectIds.map((projectId) => memberRoot.project.fetchProjectMembers(workspaceSlug, projectId, true)),
|
||||
]);
|
||||
|
||||
if (
|
||||
@@ -127,6 +131,8 @@ export const useNodeDCRealtimeEvents = (enabled: boolean, currentUserId?: string
|
||||
memberRoot.workspace.fetchWorkspaceMembers(workspaceSlug),
|
||||
projectStore.fetchProjects(workspaceSlug),
|
||||
userStore.permission.fetchUserProjectPermissions(workspaceSlug),
|
||||
mutate("NODEDC_WORKSPACE_POLICY"),
|
||||
mutate(`NODEDC_WORKSPACE_POLICY_${workspaceSlug}`),
|
||||
projectId ? memberRoot.project.fetchProjectMembers(workspaceSlug, projectId, true) : Promise.resolve(),
|
||||
]);
|
||||
|
||||
@@ -140,6 +146,21 @@ export const useNodeDCRealtimeEvents = (enabled: boolean, currentUserId?: string
|
||||
}
|
||||
};
|
||||
|
||||
const refreshDeletedWorkspaceScope = async (event: TNodeDCRealtimeEvent) => {
|
||||
const workspaceSlug = event.workspace_slug;
|
||||
if (!workspaceSlug) return;
|
||||
|
||||
await Promise.allSettled([
|
||||
workspaceRoot.fetchWorkspaces(),
|
||||
mutate("NODEDC_WORKSPACE_POLICY"),
|
||||
mutate(`NODEDC_WORKSPACE_POLICY_${workspaceSlug}`),
|
||||
]);
|
||||
|
||||
if (isWorkspacePath(pathnameRef.current, workspaceSlug)) {
|
||||
router.replace(workspaceRoot.getWorkspaceRedirectionUrl());
|
||||
}
|
||||
};
|
||||
|
||||
const refreshInviteScope = async (event: TNodeDCRealtimeEvent) => {
|
||||
await Promise.allSettled([
|
||||
mutate("USER_WORKSPACE_INVITATIONS_NOTICE"),
|
||||
@@ -163,6 +184,11 @@ export const useNodeDCRealtimeEvents = (enabled: boolean, currentUserId?: string
|
||||
const handleEvent = async (event: TNodeDCRealtimeEvent) => {
|
||||
if (!rememberEvent(event.event_id)) return;
|
||||
|
||||
if (event.type === "workspace.deleted") {
|
||||
await refreshDeletedWorkspaceScope(event);
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.type?.startsWith("workspace_member.")) {
|
||||
await refreshWorkspaceScope(event);
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user