1
- import React , { useEffect , useMemo , useState } from 'react'
1
+ import React , { useEffect , useMemo , useRef , useState } from 'react'
2
2
import { useParams } from 'react-router-dom'
3
3
import { toast } from 'react-toastify'
4
4
import YAML from 'yaml'
@@ -27,11 +27,14 @@ import {
27
27
validateBasicView ,
28
28
} from '../deploymentConfig/DeploymentConfig.utils'
29
29
import CodeEditor from '../CodeEditor/CodeEditor'
30
+ import * as jsonpatch from 'fast-json-patch'
30
31
31
32
const ConfigToolbar = importComponentFromFELibrary ( 'ConfigToolbar' , DeploymentConfigToolbar )
32
33
const SaveChangesModal = importComponentFromFELibrary ( 'SaveChangesModal' )
33
34
const DeleteOverrideDraftModal = importComponentFromFELibrary ( 'DeleteOverrideDraftModal' )
34
35
const DeploymentTemplateLockedDiff = importComponentFromFELibrary ( 'DeploymentTemplateLockedDiff' )
36
+ const applyPatches = importComponentFromFELibrary ( 'applyPatches' , null , 'function' )
37
+
35
38
export default function DeploymentTemplateOverrideForm ( {
36
39
state,
37
40
isConfigProtectionEnabled,
@@ -66,6 +69,9 @@ export default function DeploymentTemplateOverrideForm({
66
69
allowed : false ,
67
70
} )
68
71
const [ disableSaveEligibleChanges , setDisableSaveEligibleChanges ] = useState ( false )
72
+ const [ hideLockedKeys , setHideLockedKeys ] = useState ( false )
73
+ const hideLockKeysToggled = useRef ( false )
74
+ const removedPatches = useRef < Array < jsonpatch . Operation > > ( [ ] )
69
75
70
76
useEffect ( ( ) => {
71
77
// Reset editor value on delete override action
@@ -105,10 +111,15 @@ export default function DeploymentTemplateOverrideForm({
105
111
106
112
const prepareDataToSave = ( envOverrideValuesWithBasic , includeInDraft ?: boolean ) => {
107
113
let valuesOverride = envOverrideValuesWithBasic || obj || state . duplicate
114
+
115
+ if ( applyPatches && hideLockedKeys ) {
116
+ valuesOverride = applyPatches ( valuesOverride , removedPatches . current )
117
+ }
118
+
108
119
if ( state . showLockedTemplateDiff ) {
109
120
// if locked keys
110
121
if ( ! lockedConfigKeysWithLockType . allowed ) {
111
- valuesOverride = getUnlockedJSON ( lockedOverride , lockedConfigKeysWithLockType . config )
122
+ valuesOverride = getUnlockedJSON ( lockedOverride , lockedConfigKeysWithLockType . config , true ) . newDocument
112
123
} else {
113
124
// if allowed keys
114
125
valuesOverride = getLockedJSON ( lockedOverride , lockedConfigKeysWithLockType . config )
@@ -216,9 +227,10 @@ export default function DeploymentTemplateOverrideForm({
216
227
//loading state for checking locked changes
217
228
dispatch ( { type : DeploymentConfigStateActionTypes . lockChangesLoading , payload : true } )
218
229
}
230
+ const payload = prepareDataToSave ( envOverrideValuesWithBasic , false )
219
231
const deploymentTemplateResp = isConfigProtectionEnabled
220
232
? await checkForProtectedLockedChanges ( )
221
- : await api ( + appId , + envId , prepareDataToSave ( envOverrideValuesWithBasic , false ) )
233
+ : await api ( + appId , + envId , payload )
222
234
if ( deploymentTemplateResp . result . isLockConfigError && ! saveEligibleChanges ) {
223
235
//checking if any locked changes and opening drawer to show eligible and locked ones
224
236
setLockedOverride ( deploymentTemplateResp . result ?. lockedOverride )
@@ -232,6 +244,11 @@ export default function DeploymentTemplateOverrideForm({
232
244
233
245
if ( envOverrideValuesWithBasic ) {
234
246
editorOnChange ( YAML . stringify ( envOverrideValuesWithBasic , { indent : 2 } ) , true )
247
+ } else {
248
+ dispatch ( {
249
+ type : DeploymentConfigStateActionTypes . tempFormData ,
250
+ payload : YAML . stringify ( deploymentTemplateResp . result . envOverrideValues ) ,
251
+ } )
235
252
}
236
253
toast . success (
237
254
< div className = "toast" >
@@ -354,6 +371,7 @@ export default function DeploymentTemplateOverrideForm({
354
371
openComparison : state . showReadme && state . selectedTabIndex === 2 ,
355
372
} ,
356
373
} )
374
+ hideLockKeysToggled . current = true
357
375
}
358
376
359
377
const handleComparisonClick = ( ) => {
@@ -366,6 +384,9 @@ export default function DeploymentTemplateOverrideForm({
366
384
const handleTabSelection = ( index : number ) => {
367
385
if ( state . unableToParseYaml ) return
368
386
387
+ //setting true to update codeditor values with current locked keys checkbox value
388
+ hideLockKeysToggled . current = true
389
+
369
390
dispatch ( {
370
391
type : DeploymentConfigStateActionTypes . selectedTabIndex ,
371
392
payload :
@@ -508,6 +529,9 @@ export default function DeploymentTemplateOverrideForm({
508
529
: YAML . stringify ( state . data . globalConfig , { indent : 2 } )
509
530
} else if ( state . tempFormData ) {
510
531
codeEditorValue = state . tempFormData
532
+ if ( applyPatches && hideLockedKeys ) {
533
+ codeEditorValue = YAML . stringify ( applyPatches ( YAML . parse ( state . tempFormData ) , removedPatches . current ) )
534
+ }
511
535
} else {
512
536
const isOverridden = state . latestDraft ?. action === 3 ? state . isDraftOverriden : ! ! state . duplicate
513
537
codeEditorValue = isOverridden
@@ -571,6 +595,9 @@ export default function DeploymentTemplateOverrideForm({
571
595
< DeploymentTemplateReadOnlyEditorView
572
596
value = { isValuesOverride ? getCodeEditorValue ( true ) : manifestDataRHS }
573
597
isEnvOverride = { true }
598
+ lockedConfigKeysWithLockType = { lockedConfigKeysWithLockType }
599
+ hideLockedKeys = { hideLockedKeys }
600
+ removedPatches = { removedPatches }
574
601
/>
575
602
)
576
603
} else if ( state . loadingManifestOverride ) {
@@ -581,7 +608,7 @@ export default function DeploymentTemplateOverrideForm({
581
608
)
582
609
} else {
583
610
return (
584
- < DeploymentTemplateEditorView
611
+ < DeploymentTemplateEditorView
585
612
isEnvOverride = { true }
586
613
value = { isValuesOverride ? getCodeEditorValue ( false ) : manifestDataRHS }
587
614
defaultValue = {
@@ -606,6 +633,10 @@ export default function DeploymentTemplateOverrideForm({
606
633
convertVariables = { convertVariablesOverride }
607
634
setConvertVariables = { setConvertVariables }
608
635
groupedData = { groupedData }
636
+ hideLockedKeys = { hideLockedKeys }
637
+ lockedConfigKeysWithLockType = { lockedConfigKeysWithLockType }
638
+ hideLockKeysToggled = { hideLockKeysToggled }
639
+ removedPatches = { removedPatches }
609
640
/>
610
641
)
611
642
}
@@ -703,6 +734,11 @@ export default function DeploymentTemplateOverrideForm({
703
734
componentType = { 3 }
704
735
setShowLockedDiffForApproval = { setShowLockedDiffForApproval }
705
736
setLockedConfigKeysWithLockType = { setLockedConfigKeysWithLockType }
737
+ lockedConfigKeysWithLockType = { lockedConfigKeysWithLockType }
738
+ setHideLockedKeys = { setHideLockedKeys }
739
+ hideLockedKeys = { hideLockedKeys }
740
+ hideLockKeysToggled = { hideLockKeysToggled }
741
+ inValidYaml = { state . unableToParseYaml }
706
742
/>
707
743
{ state . selectedTabIndex !== 2 && ! state . showReadme && renderOverrideInfoStrip ( ) }
708
744
{ renderValuesView ( ) }
0 commit comments