forked from openshift/console
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
move TrapezoidBaseNode to topology base and contribute factory , data…
…model, connector via dynamic extension
- Loading branch information
1 parent
4518de3
commit 693f388
Showing
14 changed files
with
297 additions
and
38 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
78 changes: 78 additions & 0 deletions
78
frontend/packages/dev-console/src/components/topology/components/BindableNode.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
import * as React from 'react'; | ||
import { | ||
observer, | ||
Node, | ||
useDndDrop, | ||
WithContextMenuProps, | ||
WithCreateConnectorProps, | ||
WithDragNodeProps, | ||
WithSelectionProps, | ||
} from '@patternfly/react-topology'; | ||
import { connect } from 'react-redux'; | ||
import * as openshiftImg from '@console/internal/imgs/logos/openshift.svg'; | ||
import { modelFor, referenceFor, referenceForModel } from '@console/internal/module/k8s'; | ||
import { RootState } from '@console/internal/redux'; | ||
import { obsOrKafkaConnectionDropTargetSpec } from '@console/rhoas-plugin/src/topology/components/rhoasComponentUtils'; | ||
import { calculateRadius } from '@console/shared'; | ||
import { TrapezoidBaseNode } from '@console/topology/src/components/graph-view/components/nodes'; | ||
import { getServiceBindingStatus, getTopologyResourceObject } from '@console/topology/src/utils'; | ||
|
||
interface StateProps { | ||
serviceBinding: boolean; | ||
} | ||
|
||
type BindableNodeProps = { | ||
element: Node; | ||
tooltipLabel?: string; | ||
} & WithSelectionProps & | ||
WithDragNodeProps & | ||
WithContextMenuProps & | ||
WithCreateConnectorProps & | ||
StateProps; | ||
|
||
const BindableNode: React.FC<BindableNodeProps> = ({ | ||
element, | ||
selected, | ||
onSelect, | ||
serviceBinding, | ||
tooltipLabel, | ||
...props | ||
}) => { | ||
const { width, height } = element.getBounds(); | ||
const size = Math.min(width, height); | ||
const iconRadius = Math.min(width, height) * 0.25; | ||
const { radius } = calculateRadius(size); | ||
const spec = React.useMemo(() => obsOrKafkaConnectionDropTargetSpec(serviceBinding), [ | ||
serviceBinding, | ||
]); | ||
const [dndDropProps, dndDropRef] = useDndDrop(spec, { element, ...props }); | ||
const resourceObj = getTopologyResourceObject(element.getData()); | ||
const resourceModel = modelFor(referenceFor(resourceObj)); | ||
// const kindResource = referenceForModel(resourceModel); | ||
|
||
// const defaultIcon = getImageForIconClass(`icon-openshift`); | ||
return ( | ||
<TrapezoidBaseNode | ||
className="KafkaNode" | ||
tooltipLabel={tooltipLabel} | ||
onSelect={onSelect} | ||
icon={openshiftImg} | ||
innerRadius={iconRadius} | ||
selected={selected} | ||
kind={resourceModel && referenceForModel(resourceModel)} | ||
element={element} | ||
outerRadius={radius} | ||
{...props} | ||
dndDropRef={dndDropRef} | ||
{...dndDropProps} | ||
/> | ||
); | ||
}; | ||
|
||
const mapStateToProps = (state: RootState): StateProps => { | ||
return { | ||
serviceBinding: getServiceBindingStatus(state), | ||
}; | ||
}; | ||
|
||
export default connect(mapStateToProps)(observer(BindableNode)); |
1 change: 1 addition & 0 deletions
1
frontend/packages/dev-console/src/components/topology/components/const.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
export const TYPE_BINDABLE_NODE = 'bindable-node'; |
40 changes: 40 additions & 0 deletions
40
...tend/packages/dev-console/src/components/topology/components/devConsoleComponetFactory.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
import * as React from 'react'; | ||
import { | ||
GraphElement, | ||
withDragNode, | ||
withSelection, | ||
withCreateConnector, | ||
} from '@patternfly/react-topology'; | ||
import { | ||
createConnectorCallback, | ||
nodeDragSourceSpec, | ||
withContextMenu, | ||
CreateConnector, | ||
noRegroupWorkloadContextMenu, | ||
} from '@console/topology/src/components/graph-view'; | ||
import { withEditReviewAccess } from '@console/topology/src/utils'; | ||
import BindableNode from './BindableNode'; | ||
import { TYPE_BINDABLE_NODE } from './const'; | ||
|
||
export const getDevConsoleComponentFactory = ( | ||
kind, | ||
type, | ||
): React.ComponentType<{ element: GraphElement }> | undefined => { | ||
switch (type) { | ||
case TYPE_BINDABLE_NODE: | ||
return withCreateConnector( | ||
createConnectorCallback(), | ||
CreateConnector, | ||
)( | ||
withEditReviewAccess('patch')( | ||
withDragNode(nodeDragSourceSpec(type))( | ||
withSelection({ controlled: true })( | ||
withContextMenu(noRegroupWorkloadContextMenu)(BindableNode), | ||
), | ||
), | ||
), | ||
); | ||
default: | ||
return undefined; | ||
} | ||
}; |
21 changes: 21 additions & 0 deletions
21
frontend/packages/dev-console/src/components/topology/createConnector.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
import { Node } from '@patternfly/react-topology'; | ||
import { createServiceBinding } from '@console/topology/src/operators/actions/serviceBindings'; | ||
import { TYPE_BINDABLE_NODE } from './components/const'; | ||
|
||
const createServiceBindingConnection = (source: Node, target: Node) => { | ||
const sourceResource = source.getData().resource || source.getData().resources?.obj; | ||
const targetResource = target.getData().resource || target.getData().resources?.obj; | ||
|
||
return createServiceBinding(sourceResource, targetResource).then(() => null); | ||
}; | ||
|
||
export const getCreateConnector = (createHints: string[], source: Node, target: Node) => { | ||
if ( | ||
createHints && | ||
createHints.includes('createServiceBinding') && | ||
target.getType() === TYPE_BINDABLE_NODE | ||
) { | ||
return createServiceBindingConnection; | ||
} | ||
return null; | ||
}; |
64 changes: 64 additions & 0 deletions
64
frontend/packages/dev-console/src/components/topology/dev-console-data-transformer.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
import { Model, NodeModel } from '@patternfly/react-topology'; | ||
import { K8sResourceKind } from '@console/internal/module/k8s'; | ||
import { OverviewItem } from '@console/shared/src'; | ||
import { NODE_WIDTH, NODE_HEIGHT, NODE_PADDING } from '@console/topology/src/const'; | ||
import { getTopologyNodeItem } from '@console/topology/src/data-transforms/transform-utils'; | ||
import { TopologyDataObject, TopologyDataResources } from '@console/topology/src/topology-types'; | ||
import { TYPE_BINDABLE_NODE } from './components/const'; | ||
|
||
const BINDABLE_PROPS = { | ||
width: NODE_WIDTH, | ||
height: NODE_HEIGHT, | ||
group: false, | ||
visible: true, | ||
style: { | ||
padding: NODE_PADDING, | ||
}, | ||
}; | ||
|
||
export const createOverviewItem = (obj: K8sResourceKind): OverviewItem<K8sResourceKind> => { | ||
return { | ||
isOperatorBackedService: true, | ||
obj, | ||
}; | ||
}; | ||
|
||
export const getTopologyBindableNode = (bindables: K8sResourceKind[]): NodeModel[] => { | ||
const nodes = []; | ||
for (const obj of bindables) { | ||
const data: TopologyDataObject = { | ||
id: obj.metadata.uid, | ||
name: obj.metadata.name, | ||
type: TYPE_BINDABLE_NODE, | ||
resource: obj, | ||
// resources is poorly named, should be overviewItem, eventually going away. | ||
resources: createOverviewItem(obj), | ||
data: { | ||
resource: obj, | ||
}, | ||
}; | ||
nodes.push(getTopologyNodeItem(obj, TYPE_BINDABLE_NODE, data, BINDABLE_PROPS)); | ||
} | ||
|
||
return nodes; | ||
}; | ||
|
||
export const getBindableDevConsoleTopologyDataModel = ( | ||
namespace: string, | ||
resources: TopologyDataResources, | ||
workloads: K8sResourceKind[], | ||
): Promise<Model> => { | ||
if (!resources.bindables?.data) return Promise.resolve({ nodes: [], edges: [] }); | ||
const bindableDataModel = { | ||
nodes: getTopologyBindableNode(resources.bindables.data), | ||
edges: [], | ||
}; | ||
|
||
if (bindableDataModel.nodes?.length) { | ||
workloads.forEach(() => { | ||
bindableDataModel.edges.push(...[]); | ||
}); | ||
} | ||
|
||
return Promise.resolve(bindableDataModel); | ||
}; |
7 changes: 7 additions & 0 deletions
7
frontend/packages/dev-console/src/components/topology/topology-plugin.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
import { getDevConsoleComponentFactory } from './components/devConsoleComponetFactory'; | ||
import { getCreateConnector } from './createConnector'; | ||
import { getBindableDevConsoleTopologyDataModel } from './dev-console-data-transformer'; | ||
|
||
export const componentFactory = getDevConsoleComponentFactory; | ||
export const getDataModel = getBindableDevConsoleTopologyDataModel; | ||
export const createConnector = getCreateConnector; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.