Skip to content

Commit

Permalink
Bug fix: disable regrouping when user has no access.
Browse files Browse the repository at this point in the history
  • Loading branch information
vikram-raj committed Nov 26, 2019
1 parent 0c7dc5b commit 39151fd
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 17 deletions.
Expand Up @@ -45,6 +45,7 @@ import KnativeService from './components/nodes/KnativeService';
import TrafficLink from './components/edges/TrafficLink';
import ServiceBinding from './components/edges/ServiceBinding';
import RevisionNode from './components/nodes/RevisionNode';
import { withEditReviewAccess } from './withEditReviewAccess';

type NodeProps = {
element: Node;
Expand Down Expand Up @@ -116,13 +117,15 @@ class ComponentFactory {
{ droppable?: boolean; hover?: boolean; canDrop?: boolean },
NodeProps
>(nodeDropTargetSpec)(
withDragNode(nodeDragSourceSpec(type))(
withSelection(false, true)(
withContextMenu(
workloadContextMenu,
document.getElementById('modal-container'),
'odc2-topology-context-menu',
)(WorkloadNode),
withEditReviewAccess()(
withDragNode(nodeDragSourceSpec(type))(
withSelection(false, true)(
withContextMenu(
workloadContextMenu,
document.getElementById('modal-container'),
'odc2-topology-context-menu',
)(WorkloadNode),
),
),
),
),
Expand Down
Expand Up @@ -23,6 +23,7 @@ type GraphProps = {

type NodeProps = {
element: Node;
canRegroup?: boolean;
};

type EdgeProps = {
Expand Down Expand Up @@ -73,11 +74,13 @@ const nodeDragSourceSpec = (
allowRegroup: boolean = true,
): DragSourceSpec<DragObjectWithType, Node, {}, NodeProps> => ({
item: { type },
operation: allowRegroup
? {
[Modifiers.SHIFT]: REGROUP_OPERATION,
}
: undefined,
operation: (monitor, props) => {
return props.canRegroup && allowRegroup
? {
[Modifiers.SHIFT]: REGROUP_OPERATION,
}
: undefined;
},
canCancel: (monitor) => monitor.getOperation() === REGROUP_OPERATION,
end: async (dropResult, monitor, props) => {
if (!monitor.isCancelled() && monitor.getOperation() === REGROUP_OPERATION) {
Expand Down
Expand Up @@ -39,10 +39,12 @@ const BaseEdge: React.FC<BaseEdgeProps> = ({
});

React.useLayoutEffect(() => {
if (hover && !dragging) {
editAccess && onShowRemoveConnector && onShowRemoveConnector();
} else {
onHideRemoveConnector && onHideRemoveConnector();
if (editAccess) {
if (hover && !dragging) {
onShowRemoveConnector && onShowRemoveConnector();
} else {
onHideRemoveConnector && onHideRemoveConnector();
}
}
}, [hover, dragging, onShowRemoveConnector, onHideRemoveConnector, editAccess]);

Expand Down
Expand Up @@ -98,7 +98,7 @@ const BaseNode: React.FC<BaseNodeProps> = ({
data-test-id="base-node-handler"
onClick={onSelect}
onContextMenu={(editAccess && onContextMenu) || null}
{...(editAccess ? { ref: refs } : {})}
ref={refs}
>
<circle
className={classNames('odc2-base-node__bg', { 'is-highlight': canDrop })}
Expand Down
@@ -0,0 +1,24 @@
import * as React from 'react';
import { observer } from 'mobx-react';
import { modelFor, referenceFor } from '@console/internal/module/k8s';
import { useAccessReview } from '@console/internal/components/utils';
import { Node } from '@console/topology';

type ComponentProps = {
element: Node;
};

export const withEditReviewAccess = () => (WrappedComponent: React.ComponentType) => {
const Component: React.FC<ComponentProps> = (props) => {
const resourceModel = modelFor(referenceFor(props.element.getData().data.donutStatus.dc));
const editAccess = useAccessReview({
group: resourceModel.apiGroup,
verb: 'patch',
resource: resourceModel.plural,
name: props.element.getData().data.donutStatus.dc.metadata.name,
namespace: props.element.getData().data.donutStatus.dc.metadata.namespace,
});
return <WrappedComponent {...props as any} canRegroup={editAccess} />;
};
return observer(Component);
};

0 comments on commit 39151fd

Please sign in to comment.