Skip to content

Commit 5809217

Browse files
committed
fix: bulk edit UX issues
1 parent aa1b0f9 commit 5809217

File tree

3 files changed

+48
-85
lines changed

3 files changed

+48
-85
lines changed

src/components/bulkEdits/BulkEdits.tsx

Lines changed: 47 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import {
3232
ButtonVariantType,
3333
ButtonStyleType,
3434
MODES,
35+
Icon,
3536
} from '@devtron-labs/devtron-fe-common-lib'
3637
import { SERVER_MODE, ViewType } from '../../config'
3738
import { BulkEditsProps, BulkEditsState } from './bulkEdits.type'
@@ -49,7 +50,7 @@ import {
4950
import { OutputDivider, OutputObjectTabs, STATUS } from './constants'
5051

5152
export default class BulkEdits extends Component<BulkEditsProps, BulkEditsState> {
52-
constructor(props) {
53+
constructor(props: BulkEditsProps) {
5354
super(props)
5455

5556
this.state = {
@@ -58,13 +59,11 @@ export default class BulkEdits extends Component<BulkEditsProps, BulkEditsState>
5859
outputResult: undefined,
5960
impactedObjects: undefined,
6061
isReadmeLoading: true,
61-
outputName: 'output',
6262
bulkConfig: [],
6363
updatedTemplate: [],
6464
readmeResult: [],
6565
showExamples: true,
66-
showOutputData: true,
67-
showImpactedData: false,
66+
activeOutputTab: 'output',
6867
codeEditorPayload: undefined,
6968
}
7069
}
@@ -109,13 +108,9 @@ export default class BulkEdits extends Component<BulkEditsProps, BulkEditsState>
109108
})
110109
}
111110

112-
handleRunButton = (e) => {
113-
const outputDiv = document.querySelector('.code-editor-body')
114-
outputDiv.scrollTop = outputDiv.scrollHeight
115-
111+
handleRunButton = () => {
116112
this.setState({
117113
view: ViewType.LOADING,
118-
outputName: 'output',
119114
})
120115

121116
let configJson: any = {}
@@ -141,26 +136,20 @@ export default class BulkEdits extends Component<BulkEditsProps, BulkEditsState>
141136
this.setState({
142137
statusCode: 0,
143138
view: ViewType.FORM,
144-
showOutputData: true,
145-
outputName: 'output',
139+
activeOutputTab: 'output',
146140
outputResult,
147-
showImpactedData: false,
148141
impactedObjects: undefined,
149142
})
150143
})
151144
.catch((error) => {
152145
showError(error)
153-
this.setState({ view: ViewType.FORM, statusCode: error.code, outputName: 'output' })
146+
this.setState({ view: ViewType.FORM, statusCode: error.code })
154147
})
155148
}
156149

157150
handleShowImpactedObjectButton = () => {
158-
const outputDiv = document.querySelector('.code-editor-body')
159-
outputDiv.scrollTop = outputDiv.scrollHeight
160-
161151
this.setState({
162152
view: ViewType.LOADING,
163-
outputName: 'impacted',
164153
})
165154

166155
let configJson: any = {}
@@ -186,34 +175,35 @@ export default class BulkEdits extends Component<BulkEditsProps, BulkEditsState>
186175
view: ViewType.FORM,
187176
impactedObjects,
188177
outputResult: undefined,
189-
outputName: 'impacted',
190-
showImpactedData: true,
178+
activeOutputTab: 'impacted',
191179
})
192180
})
193181
.catch((error) => {
194182
showError(error)
195-
this.setState({ view: ViewType.FORM, statusCode: error.code, outputName: 'impacted' })
183+
this.setState({ view: ViewType.FORM, statusCode: error.code })
196184
})
197185
}
198186

199187
renderCodeEditorHeader = () => {
200188
return (
201189
<div className="flex bg__primary px-20 py-8 dc__border-bottom dc__content-space">
190+
<h1 className='m-0 fs-13 cn-9 fw-6 lh-20 dc__open-sans'>Script</h1>
191+
202192
<div className="flexbox dc__gap-12">
203-
<Button
204-
text="Run"
205-
onClick={this.handleRunButton}
206-
dataTestId="run-button"
207-
startIcon={<PlayButton />}
208-
size={ComponentSizeType.medium}
209-
></Button>
210193
<Button
211194
text="Show Impacted Objects"
212195
onClick={this.handleShowImpactedObjectButton}
213196
dataTestId="show-impacted-objects-button"
214-
size={ComponentSizeType.medium}
197+
size={ComponentSizeType.small}
215198
variant={ButtonVariantType.secondary}
216199
></Button>
200+
<Button
201+
text="Run"
202+
onClick={this.handleRunButton}
203+
dataTestId="run-button"
204+
startIcon={<Icon name='ic-play-outline' color={null} />}
205+
size={ComponentSizeType.small}
206+
></Button>
217207
</div>
218208

219209
{!this.state.showExamples ? (
@@ -231,59 +221,53 @@ export default class BulkEdits extends Component<BulkEditsProps, BulkEditsState>
231221
})
232222
}
233223

234-
handleOutputTab = (e, key: string) => {
235-
if (key == 'output') {
236-
this.setState({
237-
outputName: 'output',
238-
showOutputData: true,
239-
showImpactedData: false,
240-
})
241-
}
242-
if (key == 'impacted') {
243-
this.setState({
244-
outputName: 'impacted',
245-
showImpactedData: true,
246-
showOutputData: false,
247-
})
248-
}
224+
handleOutputTab = (key: BulkEditsState['activeOutputTab']) => {
225+
this.setState({
226+
activeOutputTab: key,
227+
})
249228
}
250229

251230
renderCodeEditorBody = () => {
231+
// TODO: need to hide this if no response yet
232+
// TODO: also need to make it resizable
233+
252234
return (
253-
<div className="code-editor-body dc__grid-half flexbox-col flex-grow-1 mh-0">
254-
<CodeEditor
255-
mode={MODES.YAML}
256-
height="fitToParent"
257-
value={this.state.codeEditorPayload}
258-
onChange={this.handleConfigChange}
259-
/>
260-
<div className="bulk-output-drawer bg__primary flexbox-col flex-grow-1 mh-0">
235+
<div className="dc__grid-rows-2 flex-grow-1 dc__overflow-hidden">
236+
<div className='dc__overflow-auto'>
237+
<CodeEditor
238+
mode={MODES.YAML}
239+
height="auto"
240+
value={this.state.codeEditorPayload}
241+
onChange={this.handleConfigChange}
242+
/>
243+
</div>
244+
<div className="bulk-output-drawer bg__primary flexbox-col dc__overflow-auto">
261245
<div className="bulk-output-header flex left pl-20 pr-20 pt-6 dc__border-top dc__border-bottom bg__primary">
262246
<OutputTabs
263-
handleOutputTabs={(e) => this.handleOutputTab(e, 'output')}
264-
outputName={this.state.outputName}
247+
handleOutputTabs={() => this.handleOutputTab('output')}
248+
outputName={this.state.activeOutputTab}
265249
value="output"
266250
name={OutputObjectTabs.OUTPUT}
267251
/>
268252
<OutputTabs
269-
handleOutputTabs={(e) => this.handleOutputTab(e, 'impacted')}
270-
outputName={this.state.outputName}
253+
handleOutputTabs={() => this.handleOutputTab('impacted')}
254+
outputName={this.state.activeOutputTab}
271255
value="impacted"
272256
name={OutputObjectTabs.IMPACTED_OBJECTS}
273257
/>
274258
</div>
275259
<div
276-
className="bulk-output-body cn-9 fs-13 p-20 dc__overflow-auto flexbox-col flex-grow-1 mh-0"
260+
className="bulk-output-body cn-9 fs-13 p-20 dc__overflow-auto flexbox-col flex-grow-1"
277261
data-testid="output-message"
278262
>
279-
{this.state.showOutputData ? (
263+
{this.state.activeOutputTab === 'output' ? (
280264
this.state.statusCode === 404 ? (
281265
<>{STATUS.ERROR}</>
282266
) : (
283267
this.renderOutputs()
284268
)
285269
) : null}
286-
{this.state.showImpactedData ? (
270+
{this.state.activeOutputTab === 'impacted' ? (
287271
this.state.statusCode === 404 ? (
288272
<>{STATUS.ERROR}</>
289273
) : (
@@ -459,15 +443,15 @@ export default class BulkEdits extends Component<BulkEditsProps, BulkEditsState>
459443
return this.state.isReadmeLoading ? (
460444
<Progressing pageLoader />
461445
) : (
462-
<div className="deploy-chart__readme-column flexbox-col flex-grow-1 mh-0 dc__overflow-auto">
463-
<MarkDown markdown={readmeJson} className="flexbox-col flex-grow-1 mh-0" />
446+
<div className="deploy-chart__readme-column flexbox-col flex-grow-1 dc__overflow-auto">
447+
<MarkDown markdown={readmeJson} className="flexbox-col flex-grow-1" />
464448
</div>
465449
)
466450
}
467451

468452
renderBulkCodeEditor = () => {
469453
return (
470-
<div className="dc__border-right flexbox-col flex-grow-1 mh-0">
454+
<div className="bulk-container flexbox-col flex-grow-1 dc__overflow-hidden">
471455
{this.renderCodeEditorHeader()}
472456
{this.renderCodeEditorBody()}
473457
</div>
@@ -476,7 +460,7 @@ export default class BulkEdits extends Component<BulkEditsProps, BulkEditsState>
476460

477461
renderReadmeSection = () => {
478462
return (
479-
<div className="flexbox-col flex-grow-1 mh-0 dc__overflow-hidden">
463+
<div className="flexbox-col flex-grow-1 dc__overflow-hidden">
480464
{this.renderSampleTemplateHeader()}
481465
{this.renderSampleTemplateBody()}
482466
</div>
@@ -485,26 +469,13 @@ export default class BulkEdits extends Component<BulkEditsProps, BulkEditsState>
485469

486470
renderCodeEditorAndReadme = () => {
487471
return (
488-
<div className="bulk-container vertical-divider flex-grow-1 mh-0 dc__grid-half">
472+
<div className="bulk-container vertical-divider flex-grow-1 dc__grid-half dc__overflow-hidden">
489473
{this.renderBulkCodeEditor()}
490474
{this.renderReadmeSection()}
491475
</div>
492476
)
493477
}
494478

495-
renderReadmeAndCodeEditor = () => {
496-
return (
497-
<div className={`${this.state.showExamples ? 'code-editor-readme' : null}`}>
498-
<div>{this.renderBulkCodeEditor()}</div>
499-
{this.state.showExamples ? (
500-
<div className="flex end" style={{ transition: 'all .2s ease-out' }}>
501-
{this.renderReadmeSection()}
502-
</div>
503-
) : null}
504-
</div>
505-
)
506-
}
507-
508479
renderBulkEditBody = () => {
509480
return !this.state.showExamples ? this.renderBulkCodeEditor() : this.renderCodeEditorAndReadme()
510481
}

src/components/bulkEdits/bulkEdit.scss

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818

1919
.bulk-container {
20-
2120
// Editor section
2221
.bulk-output-body {
2322
letter-spacing: 0.2px;
@@ -31,11 +30,6 @@
3130
}
3231
}
3332

34-
.code-editor-readme {
35-
display: grid;
36-
grid-template-columns: auto auto;
37-
}
38-
3933
// Readme Section
4034
.deploy-chart__readme-column {
4135
.markdown {

src/components/bulkEdits/bulkEdits.type.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,15 +113,13 @@ export interface BulkOutput {
113113
export interface BulkEditsState {
114114
view: string
115115
statusCode: number
116-
outputName: string
117116
isReadmeLoading: boolean
118117
impactedObjects: ImpactedObjects
119118
updatedTemplate: OptionType[]
120119
readmeResult: string[]
121120
outputResult: BulkOutput
122121
showExamples: boolean
123-
showImpactedData: boolean
124-
showOutputData: boolean
122+
activeOutputTab: 'output' | 'impacted'
125123
bulkConfig: BulkConfiguration[]
126124
codeEditorPayload: string
127125
}

0 commit comments

Comments
 (0)