Skip to content

Commit

Permalink
moved bindableNode to topology package and used named exports for utils
Browse files Browse the repository at this point in the history
  • Loading branch information
invincibleJai committed Aug 11, 2021
1 parent 50523ea commit 0e87444
Show file tree
Hide file tree
Showing 9 changed files with 123 additions and 181 deletions.
20 changes: 0 additions & 20 deletions frontend/packages/dev-console/console-extensions.json
Original file line number Diff line number Diff line change
Expand Up @@ -466,26 +466,6 @@
}
}
},
{
"type": "console.topology/data/factory",
"properties": {
"id": "devconsole-bindable-topology-model-factory",
"priority": 200,
"resources": {
"bindables": {
"model": { "kind": "IntegrationPlatform", "group": "camel.apache.org", "version": "v1" },
"opts": {
"isList": true,
"optional": true
}
}
},
"workloadKeys": ["bindables"],
"getDataModel": {
"$codeRef": "topology.getBindableDevConsoleTopologyDataModel"
}
}
},
{
"type": "console.topology/relationship/provider",
"properties": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ import {
CreateConnector,
noRegroupWorkloadContextMenu,
} from '@console/topology/src/components/graph-view';
import BindableNode from '@console/topology/src/components/graph-view/components/nodes/trapezoidNode/BindableNode';
import { withEditReviewAccess } from '@console/topology/src/utils';
import BindableNode from './BindableNode';
import { TYPE_BINDABLE_NODE } from './const';
import { TYPE_BINDABLE_NODE } from '../const';

const getDevConsoleComponentFactory = (
export const getDevConsoleComponentFactory = (
kind,
type,
): React.ComponentType<{ element: GraphElement }> | undefined => {
Expand All @@ -38,5 +38,3 @@ const getDevConsoleComponentFactory = (
return undefined;
}
};

export default getDevConsoleComponentFactory;

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
export { default as getDevConsoleComponentFactory } from './components/devConsoleComponetFactory';
export { default as getBindableDevConsoleTopologyDataModel } from './dev-console-data-transformer';
export { getDevConsoleComponentFactory } from './components/devConsoleComponetFactory';
export {
providerProvidesServiceBinding,
providerCreateServiceBinding,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,18 @@ import {
withSelection,
withCreateConnector,
} from '@patternfly/react-topology';
import BindableNode from '@console/dev-console/src/components/topology/components/BindableNode';
import {
createConnectorCallback,
nodeDragSourceSpec,
withContextMenu,
CreateConnector,
noRegroupWorkloadContextMenu,
} from '@console/topology/src/components/graph-view';
import BindableNode from '@console/topology/src/components/graph-view/components/nodes/trapezoidNode/BindableNode';
import { withEditReviewAccess } from '@console/topology/src/utils';
import { TYPE_MANAGED_KAFKA_CONNECTION } from './const';

const getRhoasComponentFactory = (
export const getRhoasComponentFactory = (
kind,
type,
): React.ComponentType<{ element: GraphElement }> | undefined => {
Expand All @@ -39,5 +39,3 @@ const getRhoasComponentFactory = (
return undefined;
}
};

export default getRhoasComponentFactory;
4 changes: 2 additions & 2 deletions frontend/packages/rhoas-plugin/src/topology/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
export { default as getRhoasComponentFactory } from './components/rhoasComponentFactory';
export { default as getRhoasTopologyDataModel } from './rhoas-data-transformer';
export { getRhoasComponentFactory } from './components/rhoasComponentFactory';
export { getRhoasTopologyDataModel } from './rhoas-data-transformer';
export {
providerProvidesKafkaConnection,
providerCreateKafkaConnection,
Expand Down
129 changes: 112 additions & 17 deletions frontend/packages/rhoas-plugin/src/topology/rhoas-data-transformer.ts
Original file line number Diff line number Diff line change
@@ -1,34 +1,129 @@
import { Model } from '@patternfly/react-topology';
import { EdgeModel, Model, NodeModel } from '@patternfly/react-topology';
import { K8sResourceKind, apiVersionForModel } from '@console/internal/module/k8s';
import { ClusterServiceVersionKind } from '@console/operator-lifecycle-manager/src/types';
import {
getBindableServiceBindingEdges,
getTopologyBindableNode,
} from '@console/dev-console/src/components/topology/dev-console-data-transformer';
import { K8sResourceKind } from '@console/internal/module/k8s';
import { TopologyDataResources } from '@console/topology/src/topology-types';
import { TYPE_MANAGED_KAFKA_CONNECTION } from './components/const';

const getRhoasTopologyDataModel = (
getDefaultOperatorIcon,
getImageForCSVIcon,
getOperatorBackedServiceKindMap,
OverviewItem,
} from '@console/shared/src';
import { TYPE_SERVICE_BINDING } from '@console/topology/src/const';
import { getTopologyNodeItem } from '@console/topology/src/data-transforms/transform-utils';
import { edgesFromServiceBinding } from '@console/topology/src/operators/operators-data-transformer';
import { TopologyDataObject, TopologyDataResources } from '@console/topology/src/topology-types';
import { KafkaConnectionModel } from '../models';
import {
KAFKA_WIDTH,
KAFKA_HEIGHT,
KAFKA_PADDING,
TYPE_MANAGED_KAFKA_CONNECTION,
} from './components/const';

const KAFKA_PROPS = {
width: KAFKA_WIDTH,
height: KAFKA_HEIGHT,
group: false,
visible: true,
style: {
padding: KAFKA_PADDING,
},
};

export const createOverviewItem = (obj: K8sResourceKind): OverviewItem<K8sResourceKind> => {
if (!obj.apiVersion) {
obj.apiVersion = apiVersionForModel(KafkaConnectionModel);
}
if (!obj.kind) {
obj.kind = KafkaConnectionModel.kind;
}

return {
isOperatorBackedService: true,
obj,
};
};

export const getTopologyRhoasNodes = (
kafkaConnections: K8sResourceKind[],
resources: TopologyDataResources,
): NodeModel[] => {
const nodes = [];
for (const obj of kafkaConnections) {
const resKindMap = getOperatorBackedServiceKindMap(
resources?.clusterServiceVersions?.data as ClusterServiceVersionKind[],
);
const csvData = resKindMap?.[obj.kind];
const data: TopologyDataObject = {
id: obj.metadata.uid,
name: obj.metadata.name,
type: TYPE_MANAGED_KAFKA_CONNECTION,
resource: obj,
// resources is poorly named, should be overviewItem, eventually going away.
resources: createOverviewItem(obj),
data: {
resource: obj,
icon: getImageForCSVIcon(csvData?.spec?.icon?.[0]) || getDefaultOperatorIcon(),
},
};
nodes.push(getTopologyNodeItem(obj, TYPE_MANAGED_KAFKA_CONNECTION, data, KAFKA_PROPS));
}

return nodes;
};

export const getRhoasServiceBindingEdges = (
dc: K8sResourceKind,
rhoasNodes: NodeModel[],
sbrs: K8sResourceKind[],
): EdgeModel[] => {
const edges = [];
if (!sbrs?.length || !rhoasNodes?.length) {
return edges;
}

edgesFromServiceBinding(dc, sbrs).forEach((sbr) => {
sbr.spec.services?.forEach((bss) => {
if (bss) {
const targetNode = rhoasNodes.find(
(node) =>
node.data.resource.kind === bss.kind && node.data.resource.metadata.name === bss.name,
);
if (targetNode) {
const target = targetNode.data.resource.metadata.uid;
const source = dc.metadata.uid;
if (source && target) {
edges.push({
id: `${source}_${target}`,
type: TYPE_SERVICE_BINDING,
source,
target,
resource: sbr,
data: { sbr },
});
}
}
}
});
});

return edges;
};
export const getRhoasTopologyDataModel = (
namespace: string,
resources: TopologyDataResources,
workloads: K8sResourceKind[],
): Promise<Model> => {
const serviceBindingRequests = resources?.serviceBindingRequests?.data;
const rhoasDataModel: Model = {
nodes: getTopologyBindableNode(
resources.kafkaConnections.data,
TYPE_MANAGED_KAFKA_CONNECTION,
resources,
),
nodes: getTopologyRhoasNodes(resources.kafkaConnections.data, resources),
edges: [],
};
if (rhoasDataModel.nodes?.length) {
workloads.forEach((dc) => {
rhoasDataModel.edges.push(
...getBindableServiceBindingEdges(dc, rhoasDataModel.nodes, serviceBindingRequests),
...getRhoasServiceBindingEdges(dc, rhoasDataModel.nodes, serviceBindingRequests),
);
});
}
return Promise.resolve(rhoasDataModel);
};

export default getRhoasTopologyDataModel;
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ import {
import * as openshiftImg from '@console/internal/imgs/logos/openshift.svg';
import { modelFor, referenceFor, referenceForModel } from '@console/internal/module/k8s';
import { calculateRadius } from '@console/shared';
import { TrapezoidBaseNode } from '@console/topology/src/components/graph-view/components/nodes';
import { getTopologyResourceObject } from '@console/topology/src/utils';
import { getRelationshipProvider } from '@console/topology/src/utils/relationship-provider-utils';
import { getTopologyResourceObject } from '../../../../../utils';
import { getRelationshipProvider } from '../../../../../utils/relationship-provider-utils';
import TrapezoidBaseNode from './TrapezoidBaseNode';

type BindableNodeProps = {
element: Node;
Expand Down

0 comments on commit 0e87444

Please sign in to comment.