Edge widget implementation with initial simulated data

This commit is contained in:
deaflynx 2021-01-04 12:43:46 +02:00
parent 206c570abb
commit 6d83477fe6
3 changed files with 49 additions and 51 deletions

View File

@ -1160,23 +1160,23 @@ export class EntityService {
} }
public getAssignedToEdgeEntitiesByType(node: NavTreeNode, pageLink: PageLink): Observable<PageData<any>> { public getAssignedToEdgeEntitiesByType(node: NavTreeNode, pageLink: PageLink): Observable<PageData<any>> {
let edgeId = node.data.edge.id.id; let edgeId = node.data.entity.id.id;
let entitiesObservable: Observable<PageData<any>>; let entitiesObservable: Observable<PageData<any>>;
switch (node.data.entityType) { switch (node.data.entityType) {
case (EntityType.ASSET): case (EntityType.ASSET):
entitiesObservable = this.assetService.getEdgeAssets(edgeId, pageLink, null); entitiesObservable = this.assetService.getEdgeAssets(edgeId, pageLink);
break; break;
case (EntityType.DEVICE): case (EntityType.DEVICE):
entitiesObservable = this.deviceService.getEdgeDevices(edgeId, pageLink, null); entitiesObservable = this.deviceService.getEdgeDevices(edgeId, pageLink);
break; break;
case (EntityType.ENTITY_VIEW): case (EntityType.ENTITY_VIEW):
entitiesObservable = this.entityViewService.getEdgeEntityViews(edgeId, pageLink, null); entitiesObservable = this.entityViewService.getEdgeEntityViews(edgeId, pageLink);
break; break;
case (EntityType.DASHBOARD): case (EntityType.DASHBOARD):
entitiesObservable = this.dashboardService.getEdgeDashboards(edgeId, pageLink, null); entitiesObservable = this.dashboardService.getEdgeDashboards(edgeId, pageLink);
break; break;
case (EntityType.RULE_CHAIN): case (EntityType.RULE_CHAIN):
entitiesObservable = this.ruleChainService.getEdgeRuleChains(edgeId, pageLink, null); entitiesObservable = this.ruleChainService.getEdgeRuleChains(edgeId, pageLink);
break; break;
} }
return entitiesObservable; return entitiesObservable;

View File

@ -28,7 +28,7 @@ import {
EdgeGroupNodeData, EdgeGroupNodeData,
edgeGroupsNodeText, edgeGroupsNodeText,
edgeGroupsTypes, edgeGroupsTypes,
edgeNodeText, entityNodeText,
EdgeOverviewNode, EdgeOverviewNode,
EntityNodeData, EntityNodeData,
EntityNodeDatasource EntityNodeDatasource
@ -37,11 +37,11 @@ import { EdgeService } from "@core/http/edge.service";
import { EntityService } from "@core/http/entity.service"; import { EntityService } from "@core/http/entity.service";
import { TranslateService } from "@ngx-translate/core"; import { TranslateService } from "@ngx-translate/core";
import { PageLink } from "@shared/models/page/page-link"; import { PageLink } from "@shared/models/page/page-link";
import { Edge } from "@shared/models/edge.models"; import { BaseData, HasId } from "@shared/models/base-data";
import { BaseData } from "@shared/models/base-data";
import { EntityId } from "@shared/models/id/entity-id"; import { EntityId } from "@shared/models/id/entity-id";
import { getCurrentAuthUser } from "@core/auth/auth.selectors"; import { getCurrentAuthUser } from "@core/auth/auth.selectors";
import { Authority } from "@shared/models/authority.enum"; import { Authority } from "@shared/models/authority.enum";
import { Direction } from "@shared/models/page/sort-order";
@Component({ @Component({
selector: 'tb-edges-overview-widget', selector: 'tb-edges-overview-widget',
@ -62,8 +62,8 @@ export class EdgesOverviewWidgetComponent extends PageComponent implements OnIni
private nodeIdCounter = 0; private nodeIdCounter = 0;
private edgeNodesMap: {[parentNodeId: string]: {[edgeId: string]: string}} = {}; private entityNodesMap: {[parentNodeId: string]: {[edgeId: string]: string}} = {};
private edgeGroupsNodesMap: {[edgeNodeId: string]: {[groupType: string]: string}} = {}; private entityGroupsNodesMap: {[edgeNodeId: string]: {[groupType: string]: string}} = {};
constructor(protected store: Store<AppState>, constructor(protected store: Store<AppState>,
private edgeService: EdgeService, private edgeService: EdgeService,
@ -87,18 +87,23 @@ export class EdgesOverviewWidgetComponent extends PageComponent implements OnIni
} }
public loadNodes: LoadNodesCallback = (node, cb) => { public loadNodes: LoadNodesCallback = (node, cb) => {
var selectedEdge: BaseData<EntityId> = null; if (node.id === '#' && this.datasources.length > 0) {
if (this.datasources.length > 0 && this.datasources[0].entity && this.datasources[0].entity.id.entityType === EntityType.EDGE) { var selectedEdge: BaseData<EntityId> = null;
selectedEdge = this.datasources[0].entity; if (this.datasources[0].entity.id.entityType === EntityType.EDGE) {
} selectedEdge = this.datasources[0].entity;
if (node.id === '#' && selectedEdge) { }
cb(this.loadNodesForEdge(selectedEdge.id.id, selectedEdge)); if (selectedEdge) {
} else if (node.data && node.data.type === 'edgeGroup') { cb(this.loadNodesForEdge(selectedEdge.id.id, selectedEdge));
const pageLink = new PageLink(100); } else {
cb(this.loadNodesForEdge(this.datasources[0].entityId, this.datasources[0].entity));
}
} else if (node.data && node.data.entity.id.entityType === EntityType.EDGE) {
const sortOrder = { property: 'createdTime', direction: Direction.DESC };
const pageLink = new PageLink(10, 0, null, sortOrder);
this.entityService.getAssignedToEdgeEntitiesByType(node, pageLink).subscribe( this.entityService.getAssignedToEdgeEntitiesByType(node, pageLink).subscribe(
(entities) => { (entities) => {
if (entities.data.length > 0) { if (entities.data.length > 0) {
cb(this.edgesToNodes(node.id, entities.data)); cb(this.entitiesToNodes(node.id, entities.data));
} else { } else {
cb([]); cb([]);
} }
@ -109,10 +114,10 @@ export class EdgesOverviewWidgetComponent extends PageComponent implements OnIni
} }
} }
private loadNodesForEdge(parentNodeId: string, edge: any): EdgeOverviewNode[] { private loadNodesForEdge(parentNodeId: string, entity: BaseData<HasId>): EdgeOverviewNode[] {
const nodes: EdgeOverviewNode[] = []; const nodes: EdgeOverviewNode[] = [];
const nodesMap = {}; const nodesMap = {};
this.edgeGroupsNodesMap[parentNodeId] = nodesMap; this.entityGroupsNodesMap[parentNodeId] = nodesMap;
const authUser = getCurrentAuthUser(this.store); const authUser = getCurrentAuthUser(this.store);
var allowedGroupTypes: EntityType[] = edgeGroupsTypes; var allowedGroupTypes: EntityType[] = edgeGroupsTypes;
if (authUser.authority === Authority.CUSTOMER_USER) { if (authUser.authority === Authority.CUSTOMER_USER) {
@ -125,10 +130,9 @@ export class EdgesOverviewWidgetComponent extends PageComponent implements OnIni
text: edgeGroupsNodeText(this.translateService, entityType), text: edgeGroupsNodeText(this.translateService, entityType),
children: true, children: true,
data: { data: {
type: 'edgeGroup',
entityType, entityType,
edge, entity,
internalId: edge.id.id + '_' + entityType internalId: entity.id.id + '_' + entityType
} as EdgeGroupNodeData } as EdgeGroupNodeData
}; };
nodes.push(node); nodes.push(node);
@ -137,43 +141,42 @@ export class EdgesOverviewWidgetComponent extends PageComponent implements OnIni
return nodes; return nodes;
} }
private createEdgeNode(parentNodeId: string, edge: Edge): EdgeOverviewNode { private createEntityNode(parentNodeId: string, entity: BaseData<HasId>): EdgeOverviewNode {
let nodesMap = this.edgeNodesMap[parentNodeId]; let nodesMap = this.entityNodesMap[parentNodeId];
if (!nodesMap) { if (!nodesMap) {
nodesMap = {}; nodesMap = {};
this.edgeNodesMap[parentNodeId] = nodesMap; this.entityNodesMap[parentNodeId] = nodesMap;
} }
const node: EdgeOverviewNode = { const node: EdgeOverviewNode = {
id: (++this.nodeIdCounter)+'', id: (++this.nodeIdCounter)+'',
icon: false, icon: false,
text: edgeNodeText(edge), text: entityNodeText(entity),
children: parentNodeId === '#', children: false,
state: { state: {
disabled: false disabled: false
}, },
data: { data: {
type: 'entity', entity: entity,
entity: edge, internalId: entity.id.id
internalId: edge.id.id
} as EntityNodeData } as EntityNodeData
}; };
nodesMap[edge.id.id] = node.id; nodesMap[entity.id.id] = node.id;
return node; return node;
} }
private edgesToNodes(parentNodeId: string, edges: Array<Edge>): EdgeOverviewNode[] { private entitiesToNodes(parentNodeId: string, entities: BaseData<HasId>[]): EdgeOverviewNode[] {
const nodes: EdgeOverviewNode[] = []; const nodes: EdgeOverviewNode[] = [];
this.edgeNodesMap[parentNodeId] = {}; this.entityNodesMap[parentNodeId] = {};
if (edges) { if (entities) {
edges.forEach((edge) => { entities.forEach((entity) => {
const node = this.createEdgeNode(parentNodeId, edge); const node = this.createEntityNode(parentNodeId, entity);
nodes.push(node); nodes.push(node);
}); });
} }
return nodes; return nodes;
} }
private getCustomerTitle(edgeId) { private getCustomerTitle(edgeId: string) {
this.edgeService.getEdgeInfo(edgeId).subscribe( this.edgeService.getEdgeInfo(edgeId).subscribe(
(edge) => { (edge) => {
if (edge.customerTitle) { if (edge.customerTitle) {

View File

@ -17,8 +17,8 @@
import { NavTreeNode } from '@shared/components/nav-tree.component'; import { NavTreeNode } from '@shared/components/nav-tree.component';
import { Datasource } from '@shared/models/widget.models'; import { Datasource } from '@shared/models/widget.models';
import { EntityType } from '@shared/models/entity-type.models'; import { EntityType } from '@shared/models/entity-type.models';
import { Edge } from "@shared/models/edge.models";
import { TranslateService } from "@ngx-translate/core"; import { TranslateService } from "@ngx-translate/core";
import { BaseData, HasId } from "@shared/models/base-data";
export interface EntityNodeDatasource extends Datasource { export interface EntityNodeDatasource extends Datasource {
nodeId: string; nodeId: string;
@ -30,9 +30,9 @@ export function edgeGroupsNodeText(translate: TranslateService, entityType: Enti
return nodeIcon + nodeText; return nodeIcon + nodeText;
} }
export function edgeNodeText(edge: Edge): string { export function entityNodeText(entity: any): string {
const nodeIcon = materialIconByEntityType(edge.id.entityType); const nodeIcon = materialIconByEntityType(entity.id.entityType);
const nodeText = edge.name; const nodeText = entity.name;
return nodeIcon + nodeText; return nodeIcon + nodeText;
} }
@ -95,19 +95,14 @@ export interface EdgeOverviewNode extends NavTreeNode {
export type EdgeOverviewNodeData = EdgeGroupNodeData | EntityNodeData; export type EdgeOverviewNodeData = EdgeGroupNodeData | EntityNodeData;
export interface EdgeGroupNodeData extends BaseEdgeOverviewNodeData { export interface EdgeGroupNodeData extends BaseEdgeOverviewNodeData {
type: 'edgeGroup';
entityType: EntityType; entityType: EntityType;
edge: Edge; entity: BaseData<HasId>;
} }
export interface EntityNodeData extends BaseEdgeOverviewNodeData { export interface EntityNodeData extends BaseEdgeOverviewNodeData {
type: 'entity'; entity: BaseData<HasId>;
entity: Edge;
} }
export interface BaseEdgeOverviewNodeData { export interface BaseEdgeOverviewNodeData {
type: EdgeOverviewNodeType;
internalId: string; internalId: string;
} }
export type EdgeOverviewNodeType = 'entity' | 'edgeGroup';