Skip to content

Commit 591928b

Browse files
MasonMJoibel
authored andcommitted
fix(ui): improve editor performance and fix Submit button. Fixes argoproj#13892 (argoproj#13915)
Signed-off-by: Mason Malone <[email protected]> (cherry picked from commit 1392ef5)
1 parent 8dd7473 commit 591928b

27 files changed

+385
-243
lines changed

ui/src/cluster-workflow-templates/cluster-workflow-template-creator.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ import {UploadButton} from '../shared/components/upload-button';
88
import {exampleClusterWorkflowTemplate} from '../shared/examples';
99
import {ClusterWorkflowTemplate} from '../shared/models';
1010
import {services} from '../shared/services';
11-
import {ClusterWorkflowTemplateEditor} from './cluster-workflow-template-editor';
11+
import {useEditableObject} from '../shared/use-editable-object';
12+
import {WorkflowTemplateEditor} from '../workflow-templates/workflow-template-editor';
1213

1314
export function ClusterWorkflowTemplateCreator({onCreate}: {onCreate: (workflow: ClusterWorkflowTemplate) => void}) {
14-
const [template, setTemplate] = useState<ClusterWorkflowTemplate>(exampleClusterWorkflowTemplate());
15+
const {object: template, setObject: setTemplate, serialization, lang, setLang} = useEditableObject(exampleClusterWorkflowTemplate());
1516
const [error, setError] = useState<Error>();
1617
return (
1718
<>
@@ -31,7 +32,7 @@ export function ClusterWorkflowTemplateCreator({onCreate}: {onCreate: (workflow:
3132
</Button>
3233
</div>
3334
<ErrorNotice error={error} />
34-
<ClusterWorkflowTemplateEditor template={template} onChange={setTemplate} onError={setError} />
35+
<WorkflowTemplateEditor template={template} serialization={serialization} lang={lang} onLangChange={setLang} onChange={setTemplate} onError={setError} />
3536
<div>
3637
<ExampleManifests />.
3738
</div>

ui/src/cluster-workflow-templates/cluster-workflow-template-details.tsx

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ import {services} from '../shared/services';
1818
import {useCollectEvent} from '../shared/use-collect-event';
1919
import {useEditableObject} from '../shared/use-editable-object';
2020
import {useQueryParams} from '../shared/use-query-params';
21+
import {WorkflowTemplateEditor} from '../workflow-templates/workflow-template-editor';
2122
import {SubmitWorkflowPanel} from '../workflows/components/submit-workflow-panel';
2223
import {WorkflowDetailsList} from '../workflows/components/workflow-details-list/workflow-details-list';
23-
import {ClusterWorkflowTemplateEditor} from './cluster-workflow-template-editor';
2424

2525
import '../workflows/components/workflow-details/workflow-details.scss';
2626

@@ -37,7 +37,7 @@ export function ClusterWorkflowTemplateDetails({history, location, match}: Route
3737
const [columns, setColumns] = useState<models.Column[]>([]);
3838

3939
const [error, setError] = useState<Error>();
40-
const [template, edited, setTemplate, resetTemplate] = useEditableObject<ClusterWorkflowTemplate>();
40+
const {object: template, setObject: setTemplate, resetObject: resetTemplate, serialization, edited, lang, setLang} = useEditableObject<ClusterWorkflowTemplate>();
4141

4242
useEffect(
4343
useQueryParams(history, p => {
@@ -138,7 +138,16 @@ export function ClusterWorkflowTemplateDetails({history, location, match}: Route
138138
{!template ? (
139139
<Loading />
140140
) : (
141-
<ClusterWorkflowTemplateEditor template={template} onChange={setTemplate} onError={setError} onTabSelected={setTab} selectedTabKey={tab} />
141+
<WorkflowTemplateEditor
142+
template={template}
143+
serialization={serialization}
144+
lang={lang}
145+
onLangChange={setLang}
146+
onChange={setTemplate}
147+
onError={setError}
148+
onTabSelected={setTab}
149+
selectedTabKey={tab}
150+
/>
142151
)}
143152
</>
144153
{template && (

ui/src/cluster-workflow-templates/cluster-workflow-template-editor.tsx

Lines changed: 0 additions & 58 deletions
This file was deleted.

ui/src/cron-workflows/cron-workflow-creator.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ import {exampleCronWorkflow} from '../shared/examples';
99
import {CronWorkflow} from '../shared/models';
1010
import * as nsUtils from '../shared/namespaces';
1111
import {services} from '../shared/services';
12+
import {useEditableObject} from '../shared/use-editable-object';
1213
import {CronWorkflowEditor} from './cron-workflow-editor';
1314

1415
export function CronWorkflowCreator({onCreate, namespace}: {namespace: string; onCreate: (cronWorkflow: CronWorkflow) => void}) {
15-
const [cronWorkflow, setCronWorkflow] = useState<CronWorkflow>(exampleCronWorkflow(nsUtils.getNamespaceWithDefault(namespace)));
16+
const {object: cronWorkflow, setObject: setCronWorkflow, serialization, lang, setLang} = useEditableObject(exampleCronWorkflow(nsUtils.getNamespaceWithDefault(namespace)));
1617
const [error, setError] = useState<Error>();
1718
return (
1819
<>
@@ -32,7 +33,7 @@ export function CronWorkflowCreator({onCreate, namespace}: {namespace: string; o
3233
</Button>
3334
</div>
3435
<ErrorNotice error={error} />
35-
<CronWorkflowEditor cronWorkflow={cronWorkflow} onChange={setCronWorkflow} onError={setError} />
36+
<CronWorkflowEditor cronWorkflow={cronWorkflow} serialization={serialization} lang={lang} onLangChange={setLang} onChange={setCronWorkflow} onError={setError} />
3637
<p>
3738
<ExampleManifests />.
3839
</p>

ui/src/cron-workflows/cron-workflow-details.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export function CronWorkflowDetails({match, location, history}: RouteComponentPr
3636
const [workflows, setWorkflows] = useState<Workflow[]>([]);
3737
const [columns, setColumns] = useState<models.Column[]>([]);
3838

39-
const [cronWorkflow, edited, setCronWorkflow, resetCronWorkflow] = useEditableObject<CronWorkflow>();
39+
const {object: cronWorkflow, setObject: setCronWorkflow, resetObject: resetCronWorkflow, serialization, edited, lang, setLang} = useEditableObject<CronWorkflow>();
4040
const [error, setError] = useState<Error>();
4141

4242
useEffect(
@@ -207,7 +207,16 @@ export function CronWorkflowDetails({match, location, history}: RouteComponentPr
207207
{!cronWorkflow ? (
208208
<Loading />
209209
) : (
210-
<CronWorkflowEditor cronWorkflow={cronWorkflow} onChange={setCronWorkflow} onError={setError} selectedTabKey={tab} onTabSelected={setTab} />
210+
<CronWorkflowEditor
211+
cronWorkflow={cronWorkflow}
212+
serialization={serialization}
213+
lang={lang}
214+
onLangChange={setLang}
215+
onChange={setCronWorkflow}
216+
onError={setError}
217+
selectedTabKey={tab}
218+
onTabSelected={setTab}
219+
/>
211220
)}
212221
<SlidingPanel isShown={!!sidePanel} onClose={() => setSidePanel(null)}>
213222
{sidePanel === 'share' && <WidgetGallery namespace={namespace} label={'workflows.argoproj.io/cron-workflow=' + name} />}

ui/src/cron-workflows/cron-workflow-editor.tsx

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {LabelsAndAnnotationsEditor} from '../shared/components/editors/labels-an
55
import {MetadataEditor} from '../shared/components/editors/metadata-editor';
66
import {WorkflowParametersEditor} from '../shared/components/editors/workflow-parameters-editor';
77
import {ObjectEditor} from '../shared/components/object-editor';
8+
import type {Lang} from '../shared/components/object-parser';
89
import {CronWorkflow} from '../shared/models';
910
import {CronWorkflowSpecEditor} from './cron-workflow-spec-editior';
1011
import {CronWorkflowStatusViewer} from './cron-workflow-status-viewer';
@@ -14,10 +15,16 @@ export function CronWorkflowEditor({
1415
onTabSelected,
1516
onError,
1617
onChange,
17-
cronWorkflow
18+
onLangChange,
19+
cronWorkflow,
20+
serialization,
21+
lang
1822
}: {
1923
cronWorkflow: CronWorkflow;
20-
onChange: (cronWorkflow: CronWorkflow) => void;
24+
serialization: string;
25+
lang: Lang;
26+
onChange: (cronWorkflow: string | CronWorkflow) => void;
27+
onLangChange: (lang: Lang) => void;
2128
onError: (error: Error) => void;
2229
onTabSelected?: (tab: string) => void;
2330
selectedTabKey?: string;
@@ -41,7 +48,16 @@ export function CronWorkflowEditor({
4148
{
4249
key: 'manifest',
4350
title: 'Manifest',
44-
content: <ObjectEditor type='io.argoproj.workflow.v1alpha1.CronWorkflow' value={cronWorkflow} onChange={x => onChange({...x})} />
51+
content: (
52+
<ObjectEditor
53+
type='io.argoproj.workflow.v1alpha1.CronWorkflow'
54+
value={cronWorkflow}
55+
text={serialization}
56+
lang={lang}
57+
onLangChange={onLangChange}
58+
onChange={onChange}
59+
/>
60+
)
4561
},
4662
{
4763
key: 'cron',

ui/src/event-flow/event-flow-page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {GraphPanel} from '../shared/components/graph/graph-panel';
1515
import {Node} from '../shared/components/graph/types';
1616
import {Links} from '../shared/components/links';
1717
import {NamespaceFilter} from '../shared/components/namespace-filter';
18-
import {ResourceEditor} from '../shared/components/resource-editor/resource-editor';
18+
import {SerializingObjectEditor} from '../shared/components/object-editor';
1919
import {ZeroState} from '../shared/components/zero-state';
2020
import {Context} from '../shared/context';
2121
import {Footnote} from '../shared/footnote';
@@ -317,7 +317,7 @@ export function EventFlowPage({history, location, match}: RouteComponentProps<an
317317
{
318318
title: 'SUMMARY',
319319
key: 'summary',
320-
content: <ResourceEditor kind={selected.kind} value={selected.value} />
320+
content: <SerializingObjectEditor type={'io.argoproj.workflow.v1alpha1.' + selected.kind} value={selected.value} />
321321
},
322322
{
323323
title: 'LOGS',

ui/src/event-sources/event-source-creator.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ import {exampleEventSource} from '../shared/examples';
88
import {EventSource} from '../shared/models';
99
import * as nsUtils from '../shared/namespaces';
1010
import {services} from '../shared/services';
11+
import {useEditableObject} from '../shared/use-editable-object';
1112
import {EventSourceEditor} from './event-source-editor';
1213

1314
export function EventSourceCreator({onCreate, namespace}: {namespace: string; onCreate: (eventSource: EventSource) => void}) {
14-
const [eventSource, setEventSource] = useState<EventSource>(exampleEventSource(nsUtils.getNamespaceWithDefault(namespace)));
15+
const {object: eventSource, setObject: setEventSource, serialization, lang, setLang} = useEditableObject(exampleEventSource(nsUtils.getNamespaceWithDefault(namespace)));
1516
const [error, setError] = useState<Error>();
1617
return (
1718
<>
@@ -31,7 +32,7 @@ export function EventSourceCreator({onCreate, namespace}: {namespace: string; on
3132
</Button>
3233
</div>
3334
<ErrorNotice error={error} />
34-
<EventSourceEditor eventSource={eventSource} onChange={setEventSource} onError={setError} />
35+
<EventSourceEditor eventSource={eventSource} serialization={serialization} lang={lang} onChange={setEventSource} onLangChange={setLang} onError={setError} />
3536
<p>
3637
<a href='https://github.com/argoproj/argo-events/tree/stable/examples/event-sources'>
3738
Example event sources <i className='fa fa-external-link-alt' />

ui/src/event-sources/event-source-details.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export function EventSourceDetails({history, location, match}: RouteComponentPro
5454
);
5555

5656
const [error, setError] = useState<Error>();
57-
const [eventSource, edited, setEventSource, resetEventSource] = useEditableObject<EventSource>();
57+
const {object: eventSource, setObject: setEventSource, resetObject: resetEventSource, serialization, edited, lang, setLang} = useEditableObject<EventSource>();
5858

5959
const selected = (() => {
6060
if (!selectedNode) {
@@ -139,7 +139,16 @@ export function EventSourceDetails({history, location, match}: RouteComponentPro
139139
{!eventSource ? (
140140
<Loading />
141141
) : (
142-
<EventSourceEditor eventSource={eventSource} onChange={setEventSource} onError={setError} onTabSelected={setTab} selectedTabKey={tab} />
142+
<EventSourceEditor
143+
eventSource={eventSource}
144+
serialization={serialization}
145+
lang={lang}
146+
onChange={setEventSource}
147+
onLangChange={setLang}
148+
onError={setError}
149+
onTabSelected={setTab}
150+
selectedTabKey={tab}
151+
/>
143152
)}
144153
</>
145154
<SlidingPanel isShown={!!selected} onClose={() => setSelectedNode(null)}>

ui/src/event-sources/event-source-editor.tsx

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,23 @@ import * as React from 'react';
33

44
import {MetadataEditor} from '../shared/components/editors/metadata-editor';
55
import {ObjectEditor} from '../shared/components/object-editor';
6+
import type {Lang} from '../shared/components/object-parser';
67
import {EventSource} from '../shared/models';
78

89
export function EventSourceEditor({
910
onChange,
11+
onLangChange,
1012
onTabSelected,
1113
selectedTabKey,
12-
eventSource
14+
eventSource,
15+
serialization,
16+
lang
1317
}: {
1418
eventSource: EventSource;
15-
onChange: (template: EventSource) => void;
19+
serialization: string;
20+
lang: Lang;
21+
onChange: (template: string | EventSource) => void;
22+
onLangChange: (lang: Lang) => void;
1623
onError: (error: Error) => void;
1724
onTabSelected?: (tab: string) => void;
1825
selectedTabKey?: string;
@@ -27,7 +34,16 @@ export function EventSourceEditor({
2734
{
2835
key: 'manifest',
2936
title: 'Manifest',
30-
content: <ObjectEditor type='io.argoproj.events.v1alpha1.EventSource' value={eventSource} onChange={x => onChange({...x})} />
37+
content: (
38+
<ObjectEditor
39+
type='io.argoproj.events.v1alpha1.EventSource'
40+
value={eventSource}
41+
text={serialization}
42+
lang={lang}
43+
onLangChange={onLangChange}
44+
onChange={onChange}
45+
/>
46+
)
3147
},
3248

3349
{

0 commit comments

Comments
 (0)