Skip to content

Commit 5d8bc3a

Browse files
committed
feat: integrate bulk edit config api
1 parent 5809217 commit 5d8bc3a

File tree

4 files changed

+85
-62
lines changed

4 files changed

+85
-62
lines changed

src/components/bulkEdits/BulkEdits.tsx

Lines changed: 59 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@ import {
3333
ButtonStyleType,
3434
MODES,
3535
Icon,
36+
GenericSectionErrorState,
3637
} from '@devtron-labs/devtron-fe-common-lib'
3738
import { SERVER_MODE, ViewType } from '../../config'
38-
import { BulkEditsProps, BulkEditsState } from './bulkEdits.type'
39+
import { BulkEditsProps, BulkEditsState, BulkEditVersion } from './bulkEdits.type'
3940
import { ReactComponent as Close } from '../../assets/icons/ic-close.svg'
40-
import { ReactComponent as PlayButton } from '../../assets/icons/ic-play.svg'
4141
import { updateBulkList, getSeeExample, updateImpactedObjectsList } from './bulkedits.service'
4242
import './bulkEdit.scss'
4343
import {
@@ -48,6 +48,24 @@ import {
4848
renderSecretOutput,
4949
} from './bulkedit.utils'
5050
import { OutputDivider, OutputObjectTabs, STATUS } from './constants'
51+
import { importComponentFromFELibrary } from '@Components/common'
52+
53+
const getBulkEditConfig = importComponentFromFELibrary('getBulkEditConfig', null, 'function')
54+
55+
const ReadmeVersionOptions = [
56+
{
57+
label: 'v1beta1/application',
58+
value: BulkEditVersion.v1,
59+
},
60+
...(getBulkEditConfig
61+
? [
62+
{
63+
label: 'v1beta2/application',
64+
value: BulkEditVersion.v2,
65+
},
66+
]
67+
: []),
68+
]
5169

5270
export default class BulkEdits extends Component<BulkEditsProps, BulkEditsState> {
5371
constructor(props: BulkEditsProps) {
@@ -60,8 +78,12 @@ export default class BulkEdits extends Component<BulkEditsProps, BulkEditsState>
6078
impactedObjects: undefined,
6179
isReadmeLoading: true,
6280
bulkConfig: [],
63-
updatedTemplate: [],
64-
readmeResult: [],
81+
readmeVersionOptions: ReadmeVersionOptions,
82+
selectedReadmeVersionOption: ReadmeVersionOptions[0],
83+
readmeResult: {
84+
[BulkEditVersion.v1]: null,
85+
[BulkEditVersion.v2]: null,
86+
},
6587
showExamples: true,
6688
activeOutputTab: 'output',
6789
codeEditorPayload: undefined,
@@ -78,33 +100,26 @@ export default class BulkEdits extends Component<BulkEditsProps, BulkEditsState>
78100
}
79101

80102
getInitialized() {
81-
getSeeExample()
82-
.then((res) => {
83-
this.setState({ view: ViewType.LOADING })
84-
const bulkConfig = res.result
85-
let kind = bulkConfig.map((elm) => elm.script.kind)
86-
kind = kind.toString().toLocaleLowerCase()
87-
let apiVersion = bulkConfig.map((elm) => elm.script.apiVersion)
88-
apiVersion = apiVersion.toString()
89-
const readmeResult = bulkConfig.map((elm) => elm.readme)
90-
const updatedTemplate = bulkConfig.map((elm) => {
91-
return {
92-
value: elm.operation,
93-
label: elm.operation,
94-
}
95-
})
103+
Promise.allSettled([
104+
getBulkEditConfig?.().then(({ result: { readme } }) => {
105+
return readme
106+
}),
107+
getSeeExample().then(({ result }) => {
108+
return result[0].readme
109+
}),
110+
])
111+
.then(([v2ReadmeResult, v1ReadmeResult]) => {
112+
const v2Readme = v2ReadmeResult.status === 'fulfilled' ? v2ReadmeResult.value : null
113+
const v1Readme = v1ReadmeResult.status === 'fulfilled' ? v1ReadmeResult.value : null
96114

97115
this.setState({
98-
view: ViewType.FORM,
99116
isReadmeLoading: false,
100-
bulkConfig,
101-
updatedTemplate,
102-
readmeResult,
117+
readmeResult: { [BulkEditVersion.v1]: v1Readme, [BulkEditVersion.v2]: v2Readme },
103118
})
104119
})
105120
.catch((error) => {
106121
showError(error)
107-
this.setState({ view: ViewType.FORM, statusCode: error.code })
122+
this.setState({ isReadmeLoading: false, statusCode: error.code })
108123
})
109124
}
110125

@@ -187,7 +202,7 @@ export default class BulkEdits extends Component<BulkEditsProps, BulkEditsState>
187202
renderCodeEditorHeader = () => {
188203
return (
189204
<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>
205+
<h1 className="m-0 fs-13 cn-9 fw-6 lh-20 dc__open-sans">Script</h1>
191206

192207
<div className="flexbox dc__gap-12">
193208
<Button
@@ -201,7 +216,7 @@ export default class BulkEdits extends Component<BulkEditsProps, BulkEditsState>
201216
text="Run"
202217
onClick={this.handleRunButton}
203218
dataTestId="run-button"
204-
startIcon={<Icon name='ic-play-outline' color={null} />}
219+
startIcon={<Icon name="ic-play-outline" color={null} />}
205220
size={ComponentSizeType.small}
206221
></Button>
207222
</div>
@@ -233,7 +248,7 @@ export default class BulkEdits extends Component<BulkEditsProps, BulkEditsState>
233248

234249
return (
235250
<div className="dc__grid-rows-2 flex-grow-1 dc__overflow-hidden">
236-
<div className='dc__overflow-auto'>
251+
<div className="dc__overflow-auto">
237252
<CodeEditor
238253
mode={MODES.YAML}
239254
height="auto"
@@ -385,20 +400,8 @@ export default class BulkEdits extends Component<BulkEditsProps, BulkEditsState>
385400
)
386401
}
387402

388-
handleUpdateTemplate = () => {
389-
this.setState({ isReadmeLoading: true })
390-
getSeeExample()
391-
.then((res) => {
392-
const readmeResult = res.result.map((elm) => elm.readme)
393-
this.setState({
394-
isReadmeLoading: false,
395-
readmeResult,
396-
})
397-
})
398-
.catch((error) => {
399-
showError(error)
400-
this.setState({ isReadmeLoading: false, statusCode: error.code })
401-
})
403+
handleUpdateTemplate = (option: BulkEditsState['selectedReadmeVersionOption']) => {
404+
this.setState({ selectedReadmeVersionOption: option })
402405
}
403406

404407
onClickHideExamples = () => {
@@ -407,7 +410,7 @@ export default class BulkEdits extends Component<BulkEditsProps, BulkEditsState>
407410

408411
renderSampleTemplateHeader = () => {
409412
return (
410-
<div className="dc__border-bottom bg__primary py-8 px-20 flex h-48 dc__content-space">
413+
<div className="dc__border-bottom bg__primary py-8 px-20 flex dc__content-space">
411414
<div className="flex left dc__gap-16">
412415
<div className="fw-6 cn-9" data-testid="sample-application">
413416
Sample:
@@ -416,10 +419,10 @@ export default class BulkEdits extends Component<BulkEditsProps, BulkEditsState>
416419
inputId="sample-application"
417420
name="sample-application"
418421
classNamePrefix="sample-application-select"
419-
value={this.state.updatedTemplate[0]}
422+
value={this.state.selectedReadmeVersionOption}
420423
placeholder="Update Deployment Template"
421-
options={this.state.updatedTemplate}
422-
onChange={() => this.handleUpdateTemplate()}
424+
options={this.state.readmeVersionOptions}
425+
onChange={this.handleUpdateTemplate}
423426
variant={SelectPickerVariantType.COMPACT}
424427
size={ComponentSizeType.medium}
425428
menuSize={ComponentSizeType.medium}
@@ -439,10 +442,17 @@ export default class BulkEdits extends Component<BulkEditsProps, BulkEditsState>
439442
}
440443

441444
renderSampleTemplateBody = () => {
442-
const readmeJson = this.state.readmeResult.toString()
443-
return this.state.isReadmeLoading ? (
444-
<Progressing pageLoader />
445-
) : (
445+
const readmeJson = this.state.readmeResult[this.state.selectedReadmeVersionOption.value]
446+
447+
if (this.state.isReadmeLoading) {
448+
return <Progressing pageLoader />
449+
}
450+
451+
if (!readmeJson) {
452+
return <GenericSectionErrorState rootClassName='flex-grow-1' />
453+
}
454+
455+
return (
446456
<div className="deploy-chart__readme-column flexbox-col flex-grow-1 dc__overflow-auto">
447457
<MarkDown markdown={readmeJson} className="flexbox-col flex-grow-1" />
448458
</div>

src/components/bulkEdits/bulkEdits.type.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,13 +115,16 @@ export interface BulkEditsState {
115115
statusCode: number
116116
isReadmeLoading: boolean
117117
impactedObjects: ImpactedObjects
118-
updatedTemplate: OptionType[]
119-
readmeResult: string[]
118+
readmeVersionOptions: OptionType<BulkEditVersion>[]
119+
readmeResult: {
120+
[key in BulkEditVersion]: string
121+
}
120122
outputResult: BulkOutput
121123
showExamples: boolean
122124
activeOutputTab: 'output' | 'impacted'
123125
bulkConfig: BulkConfiguration[]
124126
codeEditorPayload: string
127+
selectedReadmeVersionOption: OptionType<BulkEditVersion>
125128
}
126129

127130
export interface OutputTabType {
@@ -135,3 +138,8 @@ export interface BulkEditsProps extends RouteComponentProps<{}> {
135138
// close: (event) => void;
136139
serverMode: SERVER_MODE_TYPE
137140
}
141+
142+
export enum BulkEditVersion {
143+
v1 = 'v1beta1',
144+
v2 = 'v1beta2',
145+
}

src/components/bulkEdits/bulkedits.service.tsx

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,28 @@
1717
import { get, post } from '@devtron-labs/devtron-fe-common-lib'
1818

1919
import { Routes } from '../../config'
20+
import { BulkEditVersion } from './bulkEdits.type'
2021

2122
export function updateBulkList(request): Promise<any> {
22-
const { apiVersion } = request
23-
const kind = request.kind.toLocaleLowerCase()
24-
const URL = `${apiVersion}/${kind} `
25-
return post(URL, request)
23+
const { apiVersion } = request ?? {}
24+
25+
if (apiVersion === BulkEditVersion.v2) {
26+
// TODO
27+
}
28+
29+
return post(Routes.BULK_EDIT_V1_BASEPATH, request)
2630
}
2731

2832
export function updateImpactedObjectsList(request): Promise<any> {
2933
const { apiVersion } = request
30-
const kind = request.kind.toLocaleLowerCase()
31-
const URL = `${apiVersion}/${kind}/dryrun `
32-
return post(URL, request)
34+
35+
if (apiVersion === BulkEditVersion.v2) {
36+
// TODO
37+
}
38+
39+
return post(`${Routes.BULK_EDIT_V1_BASEPATH}/dryrun`, request)
3340
}
3441

3542
export function getSeeExample() {
36-
const URL = `${Routes.BULK_UPDATE_APIVERSION}/${Routes.BULK_UPDATE_KIND}/readme`
37-
return get(URL)
43+
return get(`${Routes.BULK_EDIT_V1_BASEPATH}/readme`)
3844
}

src/config/constants.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,7 @@ export const Routes = {
9292

9393
JOB_CI_DETAIL: 'job/ci-pipeline/list',
9494

95-
BULK_UPDATE_APIVERSION: 'batch/v1beta1',
96-
BULK_UPDATE_KIND: 'application',
95+
BULK_EDIT_V1_BASEPATH: 'batch/v1beta1/application',
9796

9897
LINKED_CI_DOWNSTREAM: 'linked-ci/downstream',
9998

0 commit comments

Comments
 (0)