fix(core-app): CB-927 navigation tree cache flush

This commit is contained in:
Wroud
2021-04-07 18:11:12 +03:00
parent f2613a72a7
commit 04181bdb7c
5 changed files with 11 additions and 10 deletions
@@ -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<Props> = observer(function ElementsTree({
}) {
const nodeChildren = useChildren(root);
const Placeholder = emptyPlaceholder;
useMapResource(NavTreeResource, root || ROOT_NODE_PATH);
const [localTreeNodesState] = useState(() => new MetadataMap<string, ITreeNodeState>(() => ({ filter: '' })));
const treeNodesState = localState || localTreeNodesState;
@@ -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<HTMLDivElement>({ onFocus, onBlur });
const isEnabled = usePermission(EPermission.public);
const { isSelected, handleOpen, handleSelect } = useNavigationTree();
useMapResource(NavTreeResource, isEnabled ? ROOT_NODE_PATH : null);
if (!isEnabled) {
return null;
@@ -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<NavigationTreeService, 'unselectAll'>(this, {
@@ -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));
@@ -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<string, string[]> {
private graphQLService: GraphQLService,
private navNodeInfoResource: NavNodeInfoResource,
private coreSettingsService: CoreSettingsService,
private sessionDataResource: SessionDataResource
) {
super();
@@ -64,6 +66,7 @@ export class NavTreeResource extends CachedMapResource<string, string[]> {
includes: [],
}));
this.onDataOutdated.addHandler(navNodeInfoResource.markOutdated.bind(navNodeInfoResource));
this.sessionDataResource.onDataUpdate.addPostHandler(() => this.markOutdated());
}
setDetails(keyObject: ResourceKey<string>, state: boolean): void {