From 04181bdb7ca226e738c5ec0a63d9036db68e2e9f Mon Sep 17 00:00:00 2001 From: Wroud Date: Wed, 7 Apr 2021 18:11:12 +0300 Subject: [PATCH] fix(core-app): CB-927 navigation tree cache flush --- .../packages/core-app/src/NavigationTree/ElementsTree.tsx | 5 ++++- .../core-app/src/NavigationTree/NavigationTree.tsx | 4 +--- .../core-app/src/NavigationTree/NavigationTreeService.ts | 2 -- .../src/shared/NodesManager/NavNodeManagerService.ts | 7 +++---- .../core-app/src/shared/NodesManager/NavTreeResource.ts | 3 +++ 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/webapp/packages/core-app/src/NavigationTree/ElementsTree.tsx b/webapp/packages/core-app/src/NavigationTree/ElementsTree.tsx index 0763829520..f3f6303164 100644 --- a/webapp/packages/core-app/src/NavigationTree/ElementsTree.tsx +++ b/webapp/packages/core-app/src/NavigationTree/ElementsTree.tsx @@ -10,10 +10,12 @@ import { observer } from 'mobx-react-lite'; import { useCallback, useMemo, useState } from 'react'; import styled, { css } from 'reshadow'; -import { Loader } from '@cloudbeaver/core-blocks'; +import { Loader, useMapResource } from '@cloudbeaver/core-blocks'; import { MetadataMap } from '@cloudbeaver/core-utils'; import type { NavNode } from '../shared/NodesManager/EntityTypes'; +import { ROOT_NODE_PATH } from '../shared/NodesManager/NavNodeInfoResource'; +import { NavTreeResource } from '../shared/NodesManager/NavTreeResource'; import { useChildren } from '../shared/useChildren'; import { NavigationNodeElement } from './NavigationTreeNode/NavigationNodeElement'; import { ITreeContext, TreeContext } from './TreeContext'; @@ -65,6 +67,7 @@ export const ElementsTree: React.FC = observer(function ElementsTree({ }) { const nodeChildren = useChildren(root); const Placeholder = emptyPlaceholder; + useMapResource(NavTreeResource, root || ROOT_NODE_PATH); const [localTreeNodesState] = useState(() => new MetadataMap(() => ({ filter: '' }))); const treeNodesState = localState || localTreeNodesState; diff --git a/webapp/packages/core-app/src/NavigationTree/NavigationTree.tsx b/webapp/packages/core-app/src/NavigationTree/NavigationTree.tsx index b422e48aff..d2658b9c8d 100644 --- a/webapp/packages/core-app/src/NavigationTree/NavigationTree.tsx +++ b/webapp/packages/core-app/src/NavigationTree/NavigationTree.tsx @@ -9,13 +9,12 @@ import { observer } from 'mobx-react-lite'; import styled, { css } from 'reshadow'; -import { useFocus, useMapResource } from '@cloudbeaver/core-blocks'; +import { useFocus } from '@cloudbeaver/core-blocks'; import { useService } from '@cloudbeaver/core-di'; import { usePermission, EPermission } from '@cloudbeaver/core-root'; import { useActiveView } from '@cloudbeaver/core-view'; import { ROOT_NODE_PATH } from '../shared/NodesManager/NavNodeInfoResource'; -import { NavTreeResource } from '../shared/NodesManager/NavTreeResource'; import { ElementsTree } from './ElementsTree'; import { NavigationTreeService } from './NavigationTreeService'; import { useNavigationTree } from './useNavigationTree'; @@ -60,7 +59,6 @@ export const NavigationTree = observer(function NavigationTree() { const [ref] = useFocus({ onFocus, onBlur }); const isEnabled = usePermission(EPermission.public); const { isSelected, handleOpen, handleSelect } = useNavigationTree(); - useMapResource(NavTreeResource, isEnabled ? ROOT_NODE_PATH : null); if (!isEnabled) { return null; diff --git a/webapp/packages/core-app/src/NavigationTree/NavigationTreeService.ts b/webapp/packages/core-app/src/NavigationTree/NavigationTreeService.ts index 96cdfb80c5..33167f4549 100644 --- a/webapp/packages/core-app/src/NavigationTree/NavigationTreeService.ts +++ b/webapp/packages/core-app/src/NavigationTree/NavigationTreeService.ts @@ -16,7 +16,6 @@ import { ResourceKeyUtils } from '@cloudbeaver/core-sdk'; import { MetadataMap } from '@cloudbeaver/core-utils'; import type { IActiveView } from '@cloudbeaver/core-view'; -import { CoreSettingsService } from '../CoreSettingsService'; import { EObjectFeature } from '../shared/NodesManager/EObjectFeature'; import { NavNodeExtensionsService } from '../shared/NodesManager/NavNodeExtensionsService'; import { NavNodeInfoResource, ROOT_NODE_PATH } from '../shared/NodesManager/NavNodeInfoResource'; @@ -45,7 +44,6 @@ export class NavigationTreeService { private connectionAuthService: ConnectionAuthService, private navNodeExtensionsService: NavNodeExtensionsService, private navTreeResource: NavTreeResource, - private coreSettingsService: CoreSettingsService, private navNodeInfoResource: NavNodeInfoResource ) { makeObservable(this, { diff --git a/webapp/packages/core-app/src/shared/NodesManager/NavNodeManagerService.ts b/webapp/packages/core-app/src/shared/NodesManager/NavNodeManagerService.ts index 56c45a7603..06a441a33f 100644 --- a/webapp/packages/core-app/src/shared/NodesManager/NavNodeManagerService.ts +++ b/webapp/packages/core-app/src/shared/NodesManager/NavNodeManagerService.ts @@ -13,7 +13,7 @@ import { injectable, Bootstrap } from '@cloudbeaver/core-di'; import { NotificationService } from '@cloudbeaver/core-events'; import { IExecutor, Executor, IExecutionContextProvider } from '@cloudbeaver/core-executor'; import { - PermissionsService, EPermission, ServerService, SessionDataResource + PermissionsService, EPermission, ServerService } from '@cloudbeaver/core-root'; import { GraphQLService, resourceKeyList, ResourceKey, ResourceKeyUtils @@ -100,7 +100,6 @@ export class NavNodeManagerService extends Bootstrap { private connectionAuthService: ConnectionAuthService, private notificationService: NotificationService, private serverService: ServerService, - private sessionDataResource: SessionDataResource, navigationService: NavigationService ) { super(); @@ -117,8 +116,8 @@ export class NavNodeManagerService extends Bootstrap { } register(): void { - this.sessionDataResource.onDataUpdate.addHandler(this.refreshRoot.bind(this)); - this.connectionInfo.onSessionUpdate.addHandler(this.connectionRefreshHandler.bind(this)); + // this.sessionDataResource.onDataUpdate.addHandler(this.refreshRoot.bind(this)); + // this.connectionInfo.onSessionUpdate.addHandler(this.connectionRefreshHandler.bind(this)); this.connectionInfo.onItemAdd.addHandler(this.connectionUpdateHandler.bind(this)); this.connectionInfo.onItemDelete.addHandler(this.connectionRemoveHandler.bind(this)); this.connectionInfo.onConnectionCreate.addHandler(this.connectionCreateHandler.bind(this)); diff --git a/webapp/packages/core-app/src/shared/NodesManager/NavTreeResource.ts b/webapp/packages/core-app/src/shared/NodesManager/NavTreeResource.ts index fe7d329cf0..041cdecdf7 100644 --- a/webapp/packages/core-app/src/shared/NodesManager/NavTreeResource.ts +++ b/webapp/packages/core-app/src/shared/NodesManager/NavTreeResource.ts @@ -9,6 +9,7 @@ import { action, computed, makeObservable } from 'mobx'; import { injectable } from '@cloudbeaver/core-di'; +import { SessionDataResource } from '@cloudbeaver/core-root'; import { GraphQLService, CachedMapResource, @@ -48,6 +49,7 @@ export class NavTreeResource extends CachedMapResource { private graphQLService: GraphQLService, private navNodeInfoResource: NavNodeInfoResource, private coreSettingsService: CoreSettingsService, + private sessionDataResource: SessionDataResource ) { super(); @@ -64,6 +66,7 @@ export class NavTreeResource extends CachedMapResource { includes: [], })); this.onDataOutdated.addHandler(navNodeInfoResource.markOutdated.bind(navNodeInfoResource)); + this.sessionDataResource.onDataUpdate.addPostHandler(() => this.markOutdated()); } setDetails(keyObject: ResourceKey, state: boolean): void {