-
Notifications
You must be signed in to change notification settings - Fork 3.2k
/
resubmit-workflow-panel.tsx
93 lines (84 loc) · 3.97 KB
/
resubmit-workflow-panel.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import {Checkbox} from 'argo-ui';
import React, {useState} from 'react';
import {Parameter, ResubmitOpts, Workflow} from '../../../models';
import {uiUrl} from '../../shared/base';
import {ErrorNotice} from '../../shared/components/error-notice';
import {ParametersInput} from '../../shared/components/parameters-input';
import {services} from '../../shared/services';
import {Utils} from '../../shared/utils';
interface Props {
workflow: Workflow;
isArchived: boolean;
}
export function ResubmitWorkflowPanel(props: Props) {
const [overrideParameters, setOverrideParameters] = useState(false);
const [workflowParameters, setWorkflowParameters] = useState<Parameter[]>(JSON.parse(JSON.stringify(props.workflow.spec.arguments.parameters || [])));
const [memoized, setMemoized] = useState(false);
const [error, setError] = useState<Error>();
const [isSubmitting, setIsSubmitting] = useState(false);
async function submit() {
setIsSubmitting(true);
const parameters: ResubmitOpts['parameters'] = overrideParameters
? [...workflowParameters.filter(p => Utils.getValueFromParameter(p) !== undefined).map(p => p.name + '=' + Utils.getValueFromParameter(p))]
: [];
const opts: ResubmitOpts = {
parameters,
memoized
};
try {
const submitted = props.isArchived
? await services.workflows.resubmitArchived(props.workflow.metadata.uid, props.workflow.metadata.namespace, opts)
: await services.workflows.resubmit(props.workflow.metadata.name, props.workflow.metadata.namespace, opts);
document.location.href = uiUrl(`workflows/${submitted.metadata.namespace}/${submitted.metadata.name}`);
} catch (err) {
setError(err);
setIsSubmitting(false);
}
}
return (
<>
<h4>Resubmit Workflow</h4>
<h5>
{props.workflow.metadata.namespace}/{props.workflow.metadata.name}
</h5>
{error && <ErrorNotice error={error} />}
<div className='white-box'>
<div key='override-parameters' style={{marginBottom: 25}}>
<label>Override Parameters</label>
<div className='columns small-9'>
<Checkbox checked={overrideParameters} onChange={setOverrideParameters} />
</div>
</div>
{overrideParameters && (
<div key='parameters' style={{marginBottom: 25}}>
<label>Parameters</label>
{workflowParameters.length > 0 && <ParametersInput parameters={workflowParameters} onChange={setWorkflowParameters} />}
{workflowParameters.length === 0 && (
<>
<br />
<label>No parameters</label>
</>
)}
</div>
)}
<div key='memoized' style={{marginBottom: 25}}>
<label>Memoized</label>
<div className='columns small-9'>
<Checkbox checked={memoized} onChange={setMemoized} />
</div>
</div>
{overrideParameters && memoized && (
<div key='warning-override-with-memoized'>
<i className='fa fa-exclamation-triangle' style={{color: '#f4c030'}} />
Overriding parameters on memoized submitted workflows may have unexpected results.
</div>
)}
<div key='resubmit'>
<button onClick={submit} className='argo-button argo-button--base' disabled={isSubmitting}>
<i className='fa fa-plus' /> {isSubmitting ? 'Loading...' : 'Resubmit'}
</button>
</div>
</div>
</>
);
}