Skip to content

Commit 2ae0680

Browse files
author
Mukul Tayal
committed
minor fixes
1 parent 4a11fc8 commit 2ae0680

File tree

6 files changed

+111
-22
lines changed

6 files changed

+111
-22
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"private": true,
55
"homepage": "/dashboard",
66
"dependencies": {
7-
"@devtron-labs/devtron-fe-common-lib": "0.0.51",
7+
"@devtron-labs/devtron-fe-common-lib": "0.0.55-beta-2",
88
"@rjsf/core": "^5.13.3",
99
"@rjsf/utils": "^5.13.3",
1010
"@rjsf/validator-ajv8": "^5.13.3",

src/components/EnvironmentOverride/DeploymentTemplateOverrideForm.tsx

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,14 @@ import {
2727
validateBasicView,
2828
} from '../deploymentConfig/DeploymentConfig.utils'
2929
import CodeEditor from '../CodeEditor/CodeEditor'
30+
import * as jsonpatch from 'fast-json-patch'
3031

3132
const ConfigToolbar = importComponentFromFELibrary('ConfigToolbar', DeploymentConfigToolbar)
3233
const SaveChangesModal = importComponentFromFELibrary('SaveChangesModal')
3334
const DeleteOverrideDraftModal = importComponentFromFELibrary('DeleteOverrideDraftModal')
3435
const DeploymentTemplateLockedDiff = importComponentFromFELibrary('DeploymentTemplateLockedDiff')
36+
const applyPatches=importComponentFromFELibrary('applyPatches', null, 'function')
37+
3538
export default function DeploymentTemplateOverrideForm({
3639
state,
3740
isConfigProtectionEnabled,
@@ -68,7 +71,7 @@ export default function DeploymentTemplateOverrideForm({
6871
const [disableSaveEligibleChanges, setDisableSaveEligibleChanges] = useState(false)
6972
const [hideLockedKeys, setHideLockedKeys] = useState(false)
7073
const hideLockKeysToggled = useRef(false)
71-
74+
const removedPatches = useRef<Array<jsonpatch.Operation>>([])
7275

7376
useEffect(() => {
7477
// Reset editor value on delete override action
@@ -108,10 +111,15 @@ export default function DeploymentTemplateOverrideForm({
108111

109112
const prepareDataToSave = (envOverrideValuesWithBasic, includeInDraft?: boolean) => {
110113
let valuesOverride = envOverrideValuesWithBasic || obj || state.duplicate
114+
115+
if (applyPatches && hideLockedKeys) {
116+
valuesOverride = applyPatches(valuesOverride, removedPatches.current)
117+
}
118+
111119
if (state.showLockedTemplateDiff) {
112120
// if locked keys
113121
if (!lockedConfigKeysWithLockType.allowed) {
114-
valuesOverride = getUnlockedJSON(lockedOverride, lockedConfigKeysWithLockType.config,true).newDocument
122+
valuesOverride = getUnlockedJSON(lockedOverride, lockedConfigKeysWithLockType.config, true).newDocument
115123
} else {
116124
// if allowed keys
117125
valuesOverride = getLockedJSON(lockedOverride, lockedConfigKeysWithLockType.config)
@@ -219,9 +227,10 @@ export default function DeploymentTemplateOverrideForm({
219227
//loading state for checking locked changes
220228
dispatch({ type: DeploymentConfigStateActionTypes.lockChangesLoading, payload: true })
221229
}
230+
const payload = prepareDataToSave(envOverrideValuesWithBasic, false)
222231
const deploymentTemplateResp = isConfigProtectionEnabled
223232
? await checkForProtectedLockedChanges()
224-
: await api(+appId, +envId, prepareDataToSave(envOverrideValuesWithBasic, false))
233+
: await api(+appId, +envId, payload)
225234
if (deploymentTemplateResp.result.isLockConfigError && !saveEligibleChanges) {
226235
//checking if any locked changes and opening drawer to show eligible and locked ones
227236
setLockedOverride(deploymentTemplateResp.result?.lockedOverride)
@@ -235,6 +244,11 @@ export default function DeploymentTemplateOverrideForm({
235244

236245
if (envOverrideValuesWithBasic) {
237246
editorOnChange(YAML.stringify(envOverrideValuesWithBasic, { indent: 2 }), true)
247+
} else {
248+
dispatch({
249+
type: DeploymentConfigStateActionTypes.tempFormData,
250+
payload: YAML.stringify(deploymentTemplateResp.result.envOverrideValues),
251+
})
238252
}
239253
toast.success(
240254
<div className="toast">
@@ -369,6 +383,9 @@ export default function DeploymentTemplateOverrideForm({
369383
const handleTabSelection = (index: number) => {
370384
if (state.unableToParseYaml) return
371385

386+
//setting true to update codeditor values with current locked keys checkbox value
387+
hideLockKeysToggled.current = true
388+
372389
dispatch({
373390
type: DeploymentConfigStateActionTypes.selectedTabIndex,
374391
payload:
@@ -574,6 +591,9 @@ export default function DeploymentTemplateOverrideForm({
574591
<DeploymentTemplateReadOnlyEditorView
575592
value={isValuesOverride ? getCodeEditorValue(true) : manifestDataRHS}
576593
isEnvOverride={true}
594+
lockedConfigKeysWithLockType={lockedConfigKeysWithLockType}
595+
hideLockedKeys={hideLockedKeys}
596+
removedPatches={removedPatches}
577597
/>
578598
)
579599
} else if (state.loadingManifestOverride) {
@@ -584,7 +604,7 @@ export default function DeploymentTemplateOverrideForm({
584604
)
585605
} else {
586606
return (
587-
<DeploymentTemplateEditorView
607+
< DeploymentTemplateEditorView
588608
isEnvOverride={true}
589609
value={isValuesOverride ? getCodeEditorValue(false) : manifestDataRHS}
590610
defaultValue={
@@ -612,6 +632,8 @@ export default function DeploymentTemplateOverrideForm({
612632
hideLockedKeys={hideLockedKeys}
613633
lockedConfigKeysWithLockType={lockedConfigKeysWithLockType}
614634
hideLockKeysToggled={hideLockKeysToggled}
635+
removedPatches={removedPatches}
636+
selectedTabIndex={state.selectedTabIndex}
615637
/>
616638
)
617639
}
@@ -706,6 +728,7 @@ export default function DeploymentTemplateOverrideForm({
706728
componentType={3}
707729
setShowLockedDiffForApproval={setShowLockedDiffForApproval}
708730
setLockedConfigKeysWithLockType={setLockedConfigKeysWithLockType}
731+
lockedConfigKeysWithLockType={lockedConfigKeysWithLockType}
709732
setHideLockedKeys={setHideLockedKeys}
710733
hideLockedKeys={hideLockedKeys}
711734
hideLockKeysToggled={hideLockKeysToggled}

src/components/deploymentConfig/DeploymentConfig.tsx

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,13 @@ import { SaveConfirmationDialog, SuccessToastBody } from './DeploymentTemplateVi
5353
import { deploymentConfigReducer, initDeploymentConfigState } from './DeploymentConfigReducer'
5454
import DeploymentTemplateReadOnlyEditorView from './DeploymentTemplateView/DeploymentTemplateReadOnlyEditorView'
5555
import CodeEditor from '../CodeEditor/CodeEditor'
56+
import * as jsonpatch from 'fast-json-patch'
5657
const DeploymentTemplateLockedDiff = importComponentFromFELibrary('DeploymentTemplateLockedDiff')
5758
const ConfigToolbar = importComponentFromFELibrary('ConfigToolbar', DeploymentConfigToolbar)
5859
const SaveChangesModal = importComponentFromFELibrary('SaveChangesModal')
5960
const DraftComments = importComponentFromFELibrary('DraftComments')
6061
const getDraftByResourceName = importComponentFromFELibrary('getDraftByResourceName', null, 'function')
62+
const applyPatches = importComponentFromFELibrary('applyPatches', null, 'function')
6163

6264
export const DeploymentConfigContext = createContext<DeploymentConfigContextType>(null)
6365

@@ -92,6 +94,7 @@ export default function DeploymentConfig({
9294

9395
const readOnlyPublishedMode = state.selectedTabIndex === 1 && isProtected && !!state.latestDraft
9496
const baseDeploymentAbortController = new AbortController()
97+
const removedPatches = useRef<Array<jsonpatch.Operation>>([])
9598

9699
const setIsValues = (value: boolean) => {
97100
dispatch({
@@ -211,6 +214,12 @@ export default function DeploymentConfig({
211214
payload: false,
212215
})
213216
})
217+
.finally(() => {
218+
dispatch({
219+
type: DeploymentConfigStateActionTypes.loading,
220+
payload: false,
221+
})
222+
})
214223
}
215224

216225
const fetchAllDrafts = (chartRefsData) => {
@@ -362,6 +371,16 @@ export default function DeploymentConfig({
362371
})
363372
}
364373
}
374+
const reload = () => {
375+
dispatch({
376+
type: DeploymentConfigStateActionTypes.loading,
377+
payload: {
378+
loading: true,
379+
},
380+
})
381+
setHideLockedKeys(false)
382+
initialise()
383+
}
365384

366385
async function fetchDeploymentTemplate() {
367386
dispatch({
@@ -687,6 +706,8 @@ export default function DeploymentConfig({
687706

688707
const handleTabSelection = (index: number) => {
689708
if (state.unableToParseYaml) return
709+
//setting true to update codeditor values with current locked keys checkbox value
710+
hideLockKeysToggled.current = true
690711

691712
dispatch({
692713
type: DeploymentConfigStateActionTypes.selectedTabIndex,
@@ -763,16 +784,19 @@ export default function DeploymentConfig({
763784
const prepareDataToSave = (skipReadmeAndSchema?: boolean) => {
764785
let valuesOverride = obj
765786

766-
if(state.showLockedTemplateDiff) {
767-
// if locked keys
787+
if (applyPatches && hideLockedKeys) {
788+
valuesOverride = applyPatches(valuesOverride, removedPatches.current)
789+
}
790+
791+
if (state.showLockedTemplateDiff) {
792+
// if locked keys
768793
if (!lockedConfigKeysWithLockType.allowed) {
769794
valuesOverride = getUnlockedJSON(lockedOverride, lockedConfigKeysWithLockType.config, true).newDocument
770795
} else {
771796
// if allowed keys
772797
valuesOverride = getLockedJSON(lockedOverride, lockedConfigKeysWithLockType.config)
773798
}
774799
}
775-
776800
const requestData = {
777801
...(state.chartConfig.chartRefId === state.selectedChart.id ? state.chartConfig : {}),
778802
appId: +appId,
@@ -847,7 +871,14 @@ export default function DeploymentConfig({
847871

848872
const renderEditorComponent = () => {
849873
if (readOnlyPublishedMode && !state.showReadme) {
850-
return <DeploymentTemplateReadOnlyEditorView value={state.publishedState?.tempFormData} />
874+
return (
875+
<DeploymentTemplateReadOnlyEditorView
876+
value={state.publishedState?.tempFormData}
877+
lockedConfigKeysWithLockType={lockedConfigKeysWithLockType}
878+
hideLockedKeys={hideLockedKeys}
879+
removedPatches={removedPatches}
880+
/>
881+
)
851882
}
852883

853884
if (state.loadingManifest) {
@@ -874,6 +905,8 @@ export default function DeploymentConfig({
874905
hideLockedKeys={hideLockedKeys}
875906
lockedConfigKeysWithLockType={lockedConfigKeysWithLockType}
876907
hideLockKeysToggled={hideLockKeysToggled}
908+
removedPatches={removedPatches}
909+
selectedTabIndex={state.selectedTabIndex}
877910
/>
878911
)
879912
}
@@ -910,7 +943,7 @@ export default function DeploymentConfig({
910943
isCiPipeline={isCiPipeline}
911944
toggleAppMetrics={toggleAppMetrics}
912945
isPublishedMode={readOnlyPublishedMode}
913-
reload={initialise}
946+
reload={reload}
914947
isValues={state.isValues}
915948
convertVariables={state.convertVariables}
916949
isSuperAdmin={isSuperAdmin}
@@ -956,7 +989,7 @@ export default function DeploymentConfig({
956989
isApprovalPending={state.latestDraft?.draftState === 4}
957990
approvalUsers={state.latestDraft?.approvers}
958991
showValuesPostfix={true}
959-
reload={initialise}
992+
reload={reload}
960993
isValues={state.isValues}
961994
setIsValues={setIsValues}
962995
convertVariables={state.convertVariables}
@@ -966,6 +999,7 @@ export default function DeploymentConfig({
966999
setHideLockedKeys={setHideLockedKeys}
9671000
hideLockedKeys={hideLockedKeys}
9681001
setLockedConfigKeysWithLockType={setLockedConfigKeysWithLockType}
1002+
lockedConfigKeysWithLockType={lockedConfigKeysWithLockType}
9691003
hideLockKeysToggled={hideLockKeysToggled}
9701004
inValidYaml={state.unableToParseYaml}
9711005
/>
@@ -1000,7 +1034,7 @@ export default function DeploymentConfig({
10001034
prepareDataToSave={prepareDataToSave}
10011035
toggleModal={toggleSaveChangesModal}
10021036
latestDraft={state.latestDraft}
1003-
reload={initialise}
1037+
reload={reload}
10041038
closeLockedDiffDrawerWithChildModal={closeLockedDiffDrawerWithChildModal}
10051039
showAsModal={!state.showLockedTemplateDiff}
10061040
saveEligibleChangesCb={saveEligibleChangesCb}

src/components/deploymentConfig/DeploymentTemplateView/DeploymentTemplateEditorView.tsx

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,9 @@ import { useParams } from 'react-router-dom'
2525
import { DeploymentConfigContext } from '../DeploymentConfig'
2626
import DeploymentTemplateGUIView from './DeploymentTemplateGUIView'
2727
import { toast } from 'react-toastify'
28-
import * as jsonpatch from 'fast-json-patch'
2928
const getLockFilteredTemplate = importComponentFromFELibrary('getLockFilteredTemplate', null, 'function')
3029

31-
export default function DeploymentTemplateEditorView({
30+
const DeploymentTemplateEditorView=({
3231
isEnvOverride,
3332
globalChartRefId,
3433
readOnly,
@@ -43,16 +42,18 @@ export default function DeploymentTemplateEditorView({
4342
groupedData,
4443
hideLockedKeys,
4544
lockedConfigKeysWithLockType,
46-
hideLockKeysToggled
47-
}: DeploymentTemplateEditorViewProps) {
45+
hideLockKeysToggled,
46+
removedPatches,
47+
selectedTabIndex
48+
}: DeploymentTemplateEditorViewProps) =>{
49+
4850
const { appId, envId } = useParams<{ appId: string; envId: string }>()
4951
const { isUnSet, state, environments, dispatch } = useContext<DeploymentConfigContextType>(DeploymentConfigContext)
5052
const [fetchingValues, setFetchingValues] = useState(false)
5153
const [optionOveriddeStatus, setOptionOveriddeStatus] = useState<Record<number, boolean>>()
5254
const [filteredEnvironments, setFilteredEnvironments] = useState<DeploymentChartOptionType[]>([])
5355
const [filteredCharts, setFilteredCharts] = useState<DeploymentChartOptionType[]>([])
5456
const [globalChartRef, setGlobalChartRef] = useState(null)
55-
const removedPatches = useRef<Array<jsonpatch.Operation>>([])
5657
const isDeleteDraftState = state.latestDraft?.action === 3 && state.selectedCompareOption?.id === +envId
5758
const baseDeploymentAbortController = useRef(null)
5859
const [showDraftData, setShowDraftData] = useState(false)
@@ -276,6 +277,10 @@ export default function DeploymentTemplateEditorView({
276277
}
277278
}
278279

280+
useEffect(() => {
281+
editorOnChange(rhs)
282+
},[selectedTabIndex])
283+
279284
useEffect(() => {
280285
if (!convertVariables) return
281286
setResolveLoading(true)
@@ -315,16 +320,17 @@ export default function DeploymentTemplateEditorView({
315320

316321
// final value for RHS
317322
let rhs = convertVariables ? resolvedValuesRHS : valueRHS
318-
if (getLockFilteredTemplate) {
319-
const { updatedLHS, updatedRHS } = getLockFilteredTemplate(
323+
if (getLockFilteredTemplate && isValues) {
324+
const { updatedLHS, updatedRHS } = getLockFilteredTemplate({
320325
hideLockedKeys,
321326
lhs,
322327
rhs,
323328
lockedConfigKeysWithLockType,
324329
removedPatches,
325330
hideLockKeysToggled,
326-
state.unableToParseYaml,
327-
)
331+
unableToParseYaml: state.unableToParseYaml,
332+
readOnly,
333+
})
328334
lhs = updatedLHS
329335
rhs = updatedRHS
330336
}
@@ -494,3 +500,5 @@ export default function DeploymentTemplateEditorView({
494500
<DeploymentTemplateGUIView fetchingValues={fetchingValues} value={value} readOnly={readOnly} />
495501
)
496502
}
503+
504+
export default React.memo(DeploymentTemplateEditorView)

src/components/deploymentConfig/DeploymentTemplateView/DeploymentTemplateReadOnlyEditorView.tsx

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,36 @@
11
import React, { useContext } from 'react'
22
import { DeploymentConfigContextType, DeploymentTemplateReadOnlyEditorViewProps } from '../types'
3-
import { Progressing } from '@devtron-labs/devtron-fe-common-lib'
3+
import { Progressing,getUnlockedJSON } from '@devtron-labs/devtron-fe-common-lib'
44
import CodeEditor from '../../CodeEditor/CodeEditor'
55
import { DEPLOYMENT, MODES, ROLLOUT_DEPLOYMENT } from '../../../config'
66
import { MarkDown } from '../../charts/discoverChartDetail/DiscoverChartDetails'
77
import { DeploymentConfigContext } from '../DeploymentConfig'
88
import DeploymentTemplateGUIView from './DeploymentTemplateGUIView'
9+
import YAML from 'yaml'
10+
import { importComponentFromFELibrary } from '../../common'
11+
const applyPatches = importComponentFromFELibrary('applyPatches', null, 'function')
12+
913

1014
export default function DeploymentTemplateReadOnlyEditorView({
1115
value,
1216
isEnvOverride,
17+
lockedConfigKeysWithLockType,
18+
hideLockedKeys,
19+
removedPatches
1320
}: DeploymentTemplateReadOnlyEditorViewProps) {
1421
const { state } = useContext<DeploymentConfigContextType>(DeploymentConfigContext)
1522

23+
//filtereing the locked keys from the yaml
24+
if (applyPatches) {
25+
if (hideLockedKeys) {
26+
const filteredValue = getUnlockedJSON(YAML.parse(value), lockedConfigKeysWithLockType.config ?? [], false)
27+
removedPatches.current = filteredValue.removedPatches
28+
value = YAML.stringify(filteredValue.newDocument)
29+
} else {
30+
value = YAML.stringify(applyPatches(YAML.parse(value), removedPatches.current))
31+
}
32+
}
33+
1634
const renderCodeEditor = (): JSX.Element => {
1735
return (
1836
<div className="form__row--code-editor-container dc__border-top-n1 dc__border-bottom read-only-mode">

0 commit comments

Comments
 (0)