Skip to content

Commit 62676c7

Browse files
Alexander MatyushentsevAlexander Matyushentsev
Alexander Matyushentsev
authored and
Alexander Matyushentsev
committed
Implement sidecar container viewing
1 parent cf1bf54 commit 62676c7

File tree

4 files changed

+71
-26
lines changed

4 files changed

+71
-26
lines changed

src/app/shared/styles/config.scss

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
$body-font-family: 'Heebo', sans-serif !default;
22
$global-width: 100%;
3+
$breakpoint-classes: (small medium large xlarge xxlarge);
34

45
$argo-color-gray-1: #F8FBFB;
56
$argo-color-gray-2: #EFF3F5;

src/app/workflows/components/workflow-details/workflow-details.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class Component extends React.Component<Props, any> {
7070
<div className='workflow-details'>
7171
{this.props.selectedTabKey === 'summary' && this.renderSummaryTab() || (
7272
<div className='row'>
73-
<div className='columns small-9'>
73+
<div className='columns xlarge-6 xxlarge-9'>
7474
{this.props.workflow && (
7575
<div className='workflow-details__graph-container'>
7676
{ this.props.selectedTabKey === 'workflow' && (
@@ -85,7 +85,7 @@ class Component extends React.Component<Props, any> {
8585
</div>
8686
)}
8787
</div>
88-
<div className='columns small-3 workflow-details__step-info'>
88+
<div className='columns xlarge-6 xxlarge-3 workflow-details__step-info'>
8989
{selectedNode && (
9090
<WorkflowNodeInfo
9191
node={selectedNode}

src/app/workflows/components/workflow-node-info/workflow-node-info.scss

+37
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,41 @@
1818
border-left: none;
1919
}
2020
}
21+
22+
&__containers {
23+
position: relative;
24+
}
25+
26+
&__sidecar-back {
27+
position: absolute;
28+
left: 16px;
29+
top: 8px;
30+
font-size: 2em !important;
31+
z-index: 10;
32+
height: 16px;
33+
width: 16px;
34+
cursor: pointer;
35+
color: $argo-color-teal-5;
36+
}
37+
38+
&__sidecar {
39+
text-transform: uppercase;
40+
border-top: 1px solid $argo-color-gray-5;
41+
cursor: pointer;
42+
font-size: 0.8em;
43+
44+
span {
45+
color: $argo-color-teal-5;
46+
}
47+
48+
i {
49+
float: right;
50+
font-size: 1.5em;
51+
}
52+
53+
&:last-child {
54+
border-bottom: 1px solid $argo-color-gray-5;
55+
padding: 1em 0;
56+
}
57+
}
2158
}

src/app/workflows/components/workflow-node-info/workflow-node-info.tsx

+31-24
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,13 @@ export const WorkflowNodeInputs = (props: { inputs: models.Inputs }) => {
6262
<div className='white-box__details'>
6363
{parameters.length > 0 && [
6464
<div className='row white-box__details-row' key='title'>
65-
<h6>Parameters</h6>
65+
<p>Parameters</p>
6666
</div>,
6767
<AttributeRows key='attrs' attributes={parameters}/>,
6868
]}
6969
{artifacts.length > 0 && [
7070
<div className='row white-box__details-row' key='title'>
71-
<h6>Artifacts</h6>
71+
<p>Artifacts</p>
7272
</div>,
7373
<AttributeRows key='attrs' attributes={artifacts}/>,
7474
]}
@@ -77,7 +77,7 @@ export const WorkflowNodeInputs = (props: { inputs: models.Inputs }) => {
7777
);
7878
};
7979

80-
export const WorkflowNodeContainer = (props: { nodeId: string, container: models.Container, onShowContainerLogs: (pod: string, container: string) => any; }) => {
80+
export const WorkflowNodeContainer = (props: { nodeId: string, container: models.Container | models.Sidecar, onShowContainerLogs: (pod: string, container: string) => any; }) => {
8181
const attributes = [
8282
{title: 'NAME', value: props.container.name || 'main'},
8383
{title: 'IMAGE', value: props.container.image},
@@ -98,29 +98,36 @@ export const WorkflowNodeContainer = (props: { nodeId: string, container: models
9898
);
9999
};
100100

101-
export const WorkflowNodeContainers = (props: Props) => {
102-
const template = props.workflow.spec.templates.find((item) => item.name === props.node.templateName);
103-
if (!template || !template.container) {
104-
return <p>Step does not have containers</p>;
101+
export class WorkflowNodeContainers extends React.Component<Props, { selectedSidecar: string }> {
102+
constructor(props: Props) {
103+
super(props);
104+
this.state = { selectedSidecar: null };
105105
}
106-
return (
107-
<div>
108-
<WorkflowNodeContainer nodeId={props.node.id} container={template.container} onShowContainerLogs={props.onShowContainerLogs}/>
109-
{template.sidecars && template.sidecars.length > 0 && (
110-
<div>
111-
<h6>SIDECARS:</h6>
112-
{template.sidecars.map((sidecar) => (
113-
<div className='row' key={sidecar.name}>
114-
<div className='columns small-3'>
115-
{sidecar.name}
106+
107+
public render() {
108+
const template = this.props.workflow.spec.templates.find((item) => item.name === this.props.node.templateName);
109+
if (!template || !template.container) {
110+
return <p>Step does not have containers</p>;
111+
}
112+
const container = this.state.selectedSidecar && template.sidecars.find((item) => item.name === this.state.selectedSidecar) || template.container;
113+
return (
114+
<div className='workflow-node-info__containers'>
115+
{this.state.selectedSidecar && <i className='fa fa-angle-left workflow-node-info__sidecar-back' onClick={() => this.setState({ selectedSidecar: null })}/>}
116+
<WorkflowNodeContainer nodeId={this.props.node.id} container={container} onShowContainerLogs={this.props.onShowContainerLogs}/>
117+
{!this.state.selectedSidecar && template.sidecars && template.sidecars.length > 0 && (
118+
<div>
119+
<p>SIDECARS:</p>
120+
{template.sidecars.map((sidecar) => (
121+
<div className='workflow-node-info__sidecar' key={sidecar.name} onClick={() => this.setState({ selectedSidecar: sidecar.name })}>
122+
<span>{sidecar.name}</span> <i className='fa fa-angle-right'/>
116123
</div>
117-
</div>
118-
))}
119-
</div>
120-
)}
121-
</div>
122-
);
123-
};
124+
))}
125+
</div>
126+
)}
127+
</div>
128+
);
129+
}
130+
}
124131

125132
export const WorkflowNodeArtifacts = (props: Props) => {
126133
const artifacts = props.node.outputs && props.node.outputs.artifacts && props.node.outputs.artifacts.map((artifact) => Object.assign({}, artifact, {

0 commit comments

Comments
 (0)