1- import React , { useEffect , useMemo , useState } from 'react'
1+ import React , { useEffect , useMemo , useRef , useState } from 'react'
22import { useParams } from 'react-router-dom'
33import { toast } from 'react-toastify'
44import YAML from 'yaml'
@@ -27,11 +27,14 @@ import {
2727 validateBasicView ,
2828} from '../deploymentConfig/DeploymentConfig.utils'
2929import CodeEditor from '../CodeEditor/CodeEditor'
30+ import * as jsonpatch from 'fast-json-patch'
3031
3132const ConfigToolbar = importComponentFromFELibrary ( 'ConfigToolbar' , DeploymentConfigToolbar )
3233const SaveChangesModal = importComponentFromFELibrary ( 'SaveChangesModal' )
3334const DeleteOverrideDraftModal = importComponentFromFELibrary ( 'DeleteOverrideDraftModal' )
3435const DeploymentTemplateLockedDiff = importComponentFromFELibrary ( 'DeploymentTemplateLockedDiff' )
36+ const applyPatches = importComponentFromFELibrary ( 'applyPatches' , null , 'function' )
37+
3538export default function DeploymentTemplateOverrideForm ( {
3639 state,
3740 isConfigProtectionEnabled,
@@ -66,6 +69,9 @@ export default function DeploymentTemplateOverrideForm({
6669 allowed : false ,
6770 } )
6871 const [ disableSaveEligibleChanges , setDisableSaveEligibleChanges ] = useState ( false )
72+ const [ hideLockedKeys , setHideLockedKeys ] = useState ( false )
73+ const hideLockKeysToggled = useRef ( false )
74+ const removedPatches = useRef < Array < jsonpatch . Operation > > ( [ ] )
6975
7076 useEffect ( ( ) => {
7177 // Reset editor value on delete override action
@@ -105,10 +111,15 @@ export default function DeploymentTemplateOverrideForm({
105111
106112 const prepareDataToSave = ( envOverrideValuesWithBasic , includeInDraft ?: boolean ) => {
107113 let valuesOverride = envOverrideValuesWithBasic || obj || state . duplicate
114+
115+ if ( applyPatches && hideLockedKeys ) {
116+ valuesOverride = applyPatches ( valuesOverride , removedPatches . current )
117+ }
118+
108119 if ( state . showLockedTemplateDiff ) {
109120 // if locked keys
110121 if ( ! lockedConfigKeysWithLockType . allowed ) {
111- valuesOverride = getUnlockedJSON ( lockedOverride , lockedConfigKeysWithLockType . config )
122+ valuesOverride = getUnlockedJSON ( lockedOverride , lockedConfigKeysWithLockType . config , true ) . newDocument
112123 } else {
113124 // if allowed keys
114125 valuesOverride = getLockedJSON ( lockedOverride , lockedConfigKeysWithLockType . config )
@@ -216,9 +227,10 @@ export default function DeploymentTemplateOverrideForm({
216227 //loading state for checking locked changes
217228 dispatch ( { type : DeploymentConfigStateActionTypes . lockChangesLoading , payload : true } )
218229 }
230+ const payload = prepareDataToSave ( envOverrideValuesWithBasic , false )
219231 const deploymentTemplateResp = isConfigProtectionEnabled
220232 ? await checkForProtectedLockedChanges ( )
221- : await api ( + appId , + envId , prepareDataToSave ( envOverrideValuesWithBasic , false ) )
233+ : await api ( + appId , + envId , payload )
222234 if ( deploymentTemplateResp . result . isLockConfigError && ! saveEligibleChanges ) {
223235 //checking if any locked changes and opening drawer to show eligible and locked ones
224236 setLockedOverride ( deploymentTemplateResp . result ?. lockedOverride )
@@ -232,6 +244,11 @@ export default function DeploymentTemplateOverrideForm({
232244
233245 if ( envOverrideValuesWithBasic ) {
234246 editorOnChange ( YAML . stringify ( envOverrideValuesWithBasic , { indent : 2 } ) , true )
247+ } else {
248+ dispatch ( {
249+ type : DeploymentConfigStateActionTypes . tempFormData ,
250+ payload : YAML . stringify ( deploymentTemplateResp . result . envOverrideValues ) ,
251+ } )
235252 }
236253 toast . success (
237254 < div className = "toast" >
@@ -354,6 +371,7 @@ export default function DeploymentTemplateOverrideForm({
354371 openComparison : state . showReadme && state . selectedTabIndex === 2 ,
355372 } ,
356373 } )
374+ hideLockKeysToggled . current = true
357375 }
358376
359377 const handleComparisonClick = ( ) => {
@@ -366,6 +384,9 @@ export default function DeploymentTemplateOverrideForm({
366384 const handleTabSelection = ( index : number ) => {
367385 if ( state . unableToParseYaml ) return
368386
387+ //setting true to update codeditor values with current locked keys checkbox value
388+ hideLockKeysToggled . current = true
389+
369390 dispatch ( {
370391 type : DeploymentConfigStateActionTypes . selectedTabIndex ,
371392 payload :
@@ -508,6 +529,9 @@ export default function DeploymentTemplateOverrideForm({
508529 : YAML . stringify ( state . data . globalConfig , { indent : 2 } )
509530 } else if ( state . tempFormData ) {
510531 codeEditorValue = state . tempFormData
532+ if ( applyPatches && hideLockedKeys ) {
533+ codeEditorValue = YAML . stringify ( applyPatches ( YAML . parse ( state . tempFormData ) , removedPatches . current ) )
534+ }
511535 } else {
512536 const isOverridden = state . latestDraft ?. action === 3 ? state . isDraftOverriden : ! ! state . duplicate
513537 codeEditorValue = isOverridden
@@ -571,6 +595,9 @@ export default function DeploymentTemplateOverrideForm({
571595 < DeploymentTemplateReadOnlyEditorView
572596 value = { isValuesOverride ? getCodeEditorValue ( true ) : manifestDataRHS }
573597 isEnvOverride = { true }
598+ lockedConfigKeysWithLockType = { lockedConfigKeysWithLockType }
599+ hideLockedKeys = { hideLockedKeys }
600+ removedPatches = { removedPatches }
574601 />
575602 )
576603 } else if ( state . loadingManifestOverride ) {
@@ -581,7 +608,7 @@ export default function DeploymentTemplateOverrideForm({
581608 )
582609 } else {
583610 return (
584- < DeploymentTemplateEditorView
611+ < DeploymentTemplateEditorView
585612 isEnvOverride = { true }
586613 value = { isValuesOverride ? getCodeEditorValue ( false ) : manifestDataRHS }
587614 defaultValue = {
@@ -606,6 +633,10 @@ export default function DeploymentTemplateOverrideForm({
606633 convertVariables = { convertVariablesOverride }
607634 setConvertVariables = { setConvertVariables }
608635 groupedData = { groupedData }
636+ hideLockedKeys = { hideLockedKeys }
637+ lockedConfigKeysWithLockType = { lockedConfigKeysWithLockType }
638+ hideLockKeysToggled = { hideLockKeysToggled }
639+ removedPatches = { removedPatches }
609640 />
610641 )
611642 }
@@ -703,6 +734,11 @@ export default function DeploymentTemplateOverrideForm({
703734 componentType = { 3 }
704735 setShowLockedDiffForApproval = { setShowLockedDiffForApproval }
705736 setLockedConfigKeysWithLockType = { setLockedConfigKeysWithLockType }
737+ lockedConfigKeysWithLockType = { lockedConfigKeysWithLockType }
738+ setHideLockedKeys = { setHideLockedKeys }
739+ hideLockedKeys = { hideLockedKeys }
740+ hideLockKeysToggled = { hideLockKeysToggled }
741+ inValidYaml = { state . unableToParseYaml }
706742 />
707743 { state . selectedTabIndex !== 2 && ! state . showReadme && renderOverrideInfoStrip ( ) }
708744 { renderValuesView ( ) }
0 commit comments