11import React , { useContext , useEffect , useState } from 'react'
2- import { ReactComponent as Close } from '../../assets/icons/ic-close.svg'
3- import { ReactComponent as Add } from '../../assets/icons/ic-add.svg'
4- import { ReactComponent as QuestionIcon } from '../v2/assets/icons/ic-question.svg'
5- import { ReactComponent as HelpIcon } from '../../assets/icons/ic-help.svg'
2+ import { CIBuildConfigType , CIBuildType , noop } from '@devtron-labs/devtron-fe-common-lib'
63import CIConfig from '../ciConfig/CIConfig'
4+ import DockerArgs from './DockerArgs'
5+ import CustomImageTags from './CustomImageTags'
6+ import TargetPlatformSelector from '../ciConfig/TargetPlatformSelector'
77import { ComponentStates } from '../EnvironmentOverride/EnvironmentOverrides.type'
88import { AdvancedConfigOptionsProps , CIConfigParentState } from '../ciConfig/types'
99import { DockerConfigOverrideKeys } from '../ciPipeline/types'
10- import { CIBuildConfigType , CIBuildType , CustomInput , noop , TippyCustomized , TippyTheme } from '@devtron-labs/devtron-fe-common-lib'
11- import { getTargetPlatformMap } from '../ciConfig/CIConfig.utils'
12- import TargetPlatformSelector from '../ciConfig/TargetPlatformSelector'
1310import { OptionType } from '../app/types'
14- import '../ciConfig/CIConfig.scss '
15- import CustomImageTags from './CustomImageTags '
11+ import { DockerArgsAction , HandleDockerArgsUpdateType } from './types '
12+ import { getTargetPlatformMap } from '../ciConfig/CIConfig.utils '
1613import { pipelineContext } from '../workflowEditor/workflowEditor'
14+ import '../ciConfig/CIConfig.scss'
1715
1816export default function AdvancedConfigOptions ( {
1917 ciPipeline,
2018} : AdvancedConfigOptionsProps ) {
21- const {
22- formData,
23- setFormData,
24- loadingState,
25- setLoadingState,
26- formDataErrorObj,
27- setFormDataErrorObj
28- } = useContext ( pipelineContext )
19+ const { formData, setFormData, loadingState, setLoadingState, formDataErrorObj, setFormDataErrorObj } =
20+ useContext ( pipelineContext )
2921 const [ collapsedSection , setCollapsedSection ] = useState < boolean > ( false )
22+ // TODO: Should be getting that from formData, redundant state
3023 const [ allowOverride , setAllowOverride ] = useState < boolean > ( ciPipeline ?. isDockerConfigOverridden ?? false )
3124 const [ parentState , setParentState ] = useState < CIConfigParentState > ( {
3225 loadingState : ComponentStates . loading ,
@@ -41,7 +34,13 @@ export default function AdvancedConfigOptions({
4134 const targetPlatformMap = getTargetPlatformMap ( )
4235 const [ selectedTargetPlatforms , setSelectedTargetPlatforms ] = useState < OptionType [ ] > ( [ ] )
4336 const [ showCustomPlatformWarning , setShowCustomPlatformWarning ] = useState < boolean > ( false )
44-
37+
38+ const isGlobalAndNotBuildpack =
39+ ! allowOverride && parentState . ciConfig ?. ciBuildConfig . ciBuildType !== CIBuildType . BUILDPACK_BUILD_TYPE
40+ const isCurrentCITypeBuildpack = parentState . currentCIBuildType === CIBuildType . BUILDPACK_BUILD_TYPE
41+ const hasParentLoaded = parentState ?. loadingState === ComponentStates . loaded
42+ const showNonBuildpackOptions = hasParentLoaded && ( isGlobalAndNotBuildpack || ! isCurrentCITypeBuildpack )
43+
4544 useEffect ( ( ) => {
4645 if ( parentState . ciConfig ) {
4746 populateCurrentPlatformsData ( )
@@ -69,31 +68,28 @@ export default function AdvancedConfigOptions({
6968 setShowCustomPlatformWarning ( _customTargetPlatform )
7069 }
7170
72- const addDockerArg = ( ) : void => {
71+ // All updates to docker args will be handled here, which will will be further merged into formData on introduction of reducer
72+ const handleDockerArgsUpdate = ( { action, argData } : HandleDockerArgsUpdateType ) => {
7373 const _form = { ...formData }
7474
75- if ( _form . args . length > 0 ) {
76- _form . args . unshift ( { key : '' , value : '' } )
77- } else {
78- _form . args . push ( { key : '' , value : '' } )
79- }
75+ switch ( action ) {
76+ case DockerArgsAction . ADD :
77+ _form . args . unshift ( { key : '' , value : '' } )
78+ break
8079
81- setFormData ( _form )
82- }
80+ case DockerArgsAction . UPDATE_KEY :
81+ _form . args [ argData . index ] [ 'key' ] = argData . value
82+ break
8383
84- const handleDockerArgChange = ( event , index : number , key : 'key' | 'value' ) : void => {
85- const _form = { ...formData }
86- _form . args [ index ] [ key ] = event . target . value
87- setFormData ( _form )
88- }
84+ case DockerArgsAction . UPDATE_VALUE :
85+ _form . args [ argData . index ] [ 'value' ] = argData . value
86+ break
8987
90- const removeDockerArgs = ( index : number ) : void => {
91- const _form = { ...formData }
92- const newArgs = [ ]
93- for ( let i = 0 ; i < _form . args . length ; i ++ ) {
94- if ( index != i ) newArgs . push ( _form . args [ i ] )
88+ case DockerArgsAction . DELETE :
89+ _form . args = _form . args . filter ( ( _ , index ) => index !== argData . index )
90+ break
9591 }
96- _form . args = newArgs
92+
9793 setFormData ( _form )
9894 }
9995
@@ -151,71 +147,6 @@ export default function AdvancedConfigOptions({
151147 setFormData ( _form )
152148 }
153149
154- const renderDockerArgs = ( ) => {
155- return (
156- < div >
157- < h3 className = "flex left fs-13 fw-6 cn-9 lh-20 m-0" >
158- Docker build arguments
159- < TippyCustomized
160- theme = { TippyTheme . white }
161- className = "w-300"
162- placement = "top"
163- Icon = { HelpIcon }
164- iconClass = "fcv-5"
165- heading = "Docker Build Arguments"
166- infoText = "Key/value pair will be appended as docker build arguments (--build-args)."
167- showCloseButton = { true }
168- trigger = "click"
169- interactive = { true }
170- >
171- < QuestionIcon className = "icon-dim-16 fcn-6 ml-4 cursor" />
172- </ TippyCustomized >
173- </ h3 >
174- < p className = "fs-13 fw-4 cn-7 lh-20 m-0" > Override docker build configurations for this pipeline.</ p >
175- < div className = "pointer cb-5 fw-6 fs-13 flexbox content-fit lh-32 mt-8" onClick = { addDockerArg } data-testid = "create-build-pipeline-docker-args-add-parameter-button" >
176- < Add className = "add-icon mt-6" />
177- Add parameter
178- </ div >
179- { formData . args . length > 0 &&
180- formData . args . map ( ( arg , index ) => {
181- return (
182- < div className = "flexbox justify-space" key = { `build-${ index } ` } >
183- < div className = "mt-8 w-100" >
184- < CustomInput
185- name = "arg-key"
186- data-testid = { `docker-arg-key-${ index } ` }
187- rootClassName = "w-100 dc__top-radius-4 pl-10 pr-10 pt-6 pb-6 en-2 bw-1"
188- autoComplete = "off"
189- placeholder = "Key"
190- type = "text"
191- value = { arg . key }
192- onChange = { ( event ) => {
193- handleDockerArgChange ( event , index , 'key' )
194- } }
195- />
196- < textarea
197- data-testid = { `docker-arg-value-${ index } ` }
198- className = "build__value w-100 dc__bottom-radius-4 dc__no-top-border pl-10 pr-10 pt-6 pb-6 en-2 bw-1"
199- value = { arg . value }
200- onChange = { ( event ) => {
201- handleDockerArgChange ( event , index , 'value' )
202- } }
203- placeholder = "Value"
204- />
205- </ div >
206- < Close
207- className = "icon-dim-24 pointer mt-6 ml-6"
208- onClick = { ( ) => {
209- removeDockerArgs ( index )
210- } }
211- />
212- </ div >
213- )
214- } ) }
215- </ div >
216- )
217- }
218-
219150 const toggleAdvancedOptions = ( ) : void => {
220151 setCollapsedSection ( ! collapsedSection )
221152 }
@@ -240,6 +171,7 @@ export default function AdvancedConfigOptions({
240171 className = { `allow-config-override flex h-28 ml-auto cta ${ allowOverride ? 'delete' : 'ghosted' } ` }
241172 data-testid = { `create-build-pipeline-${ allowOverride ? 'delete' : 'allow' } -override-button` }
242173 onClick = { toggleAllowOverride }
174+ type = "button"
243175 >
244176 { `${ allowOverride ? 'Delete' : 'Allow' } Override` }
245177 </ button >
@@ -256,33 +188,35 @@ export default function AdvancedConfigOptions({
256188 setLoadingStateFromParent = { setLoadingState }
257189 />
258190
259- { parentState ?. loadingState === ComponentStates . loaded &&
260- parentState . currentCIBuildType !== CIBuildType . BUILDPACK_BUILD_TYPE && (
261- < >
262- < div className = "white-card white-card__docker-config dc__position-rel mb-15" >
263- < TargetPlatformSelector
264- allowOverride = { allowOverride }
265- selectedTargetPlatforms = { selectedTargetPlatforms }
266- setSelectedTargetPlatforms = { setSelectedTargetPlatforms }
267- showCustomPlatformWarning = { showCustomPlatformWarning }
268- setShowCustomPlatformWarning = { setShowCustomPlatformWarning }
269- targetPlatformMap = { targetPlatformMap }
270- targetPlatform = { targetPlatforms }
271- configOverrideView = { true }
272- updateDockerConfigOverride = { updateDockerConfigOverride }
273- />
274- </ div >
275- < CustomImageTags
276- savedTagPattern = { parentState . selectedCIPipeline . customTag ?. tagPattern }
277- formData = { formData }
278- setFormData = { setFormData }
279- formDataErrorObj = { formDataErrorObj }
280- setFormDataErrorObj = { setFormDataErrorObj }
281- />
282-
283- { renderDockerArgs ( ) }
284- </ >
285- ) }
191+ { showNonBuildpackOptions && (
192+ < div className = "white-card white-card__docker-config dc__position-rel mb-15" >
193+ < TargetPlatformSelector
194+ allowOverride = { allowOverride }
195+ selectedTargetPlatforms = { selectedTargetPlatforms }
196+ setSelectedTargetPlatforms = { setSelectedTargetPlatforms }
197+ showCustomPlatformWarning = { showCustomPlatformWarning }
198+ setShowCustomPlatformWarning = { setShowCustomPlatformWarning }
199+ targetPlatformMap = { targetPlatformMap }
200+ targetPlatform = { targetPlatforms }
201+ configOverrideView = { true }
202+ updateDockerConfigOverride = { updateDockerConfigOverride }
203+ />
204+ </ div >
205+ ) }
206+
207+ { hasParentLoaded && (
208+ < CustomImageTags
209+ savedTagPattern = { parentState . selectedCIPipeline . customTag ?. tagPattern }
210+ formData = { formData }
211+ setFormData = { setFormData }
212+ formDataErrorObj = { formDataErrorObj }
213+ setFormDataErrorObj = { setFormDataErrorObj }
214+ />
215+ ) }
216+
217+ { showNonBuildpackOptions && (
218+ < DockerArgs args = { formData . args } handleDockerArgsUpdate = { handleDockerArgsUpdate } />
219+ ) }
286220 </ div >
287221 </ div >
288222 )
0 commit comments