Skip to content

Commit ccf7e91

Browse files
committed
fix: reverting logic into useEffect to save infinite re-render :/
1 parent f364282 commit ccf7e91

File tree

2 files changed

+33
-25
lines changed

2 files changed

+33
-25
lines changed

src/components/ClusterNodes/ClusterManifest.tsx

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,13 @@ export default function ClusterManifest({
4040
setOriginalManifest(_manifest)
4141
const trimmedManifest = YAML.stringify(getTrimmedManifestData(response.result?.manifest))
4242
setDefaultManifest(trimmedManifest)
43-
setManifest(trimmedManifest)
43+
// Ideally should have been setManifest(trimmedManifest).
44+
if (hideManagedFields) {
45+
setManifest(trimmedManifest)
46+
}
47+
else {
48+
setManifest(_manifest)
49+
}
4450
setLoading(false)
4551
setManifestAvailable(true)
4652
})
@@ -58,11 +64,14 @@ export default function ClusterManifest({
5864
}
5965
}, [terminalAccessId])
6066

61-
// NOTE: Check if we can replace this useEffect since manifestMode changes on events.
67+
// NOTE: Need to remove this useEffect since manifestMode changes on events only.
68+
// Since there can be alot of ways this useEffect interferes with other handlers, causing bugs.
69+
// Plus it might be a case when this useEffect will run before we have manifest, which will cause issues.
6270
useEffect(() => {
6371
const regex = manifestCommentsRegex
6472
if (manifestMode === EditModeType.NON_EDIT) {
65-
setManifest(defaultManifest)
73+
const _manifest = hideManagedFields ? defaultManifest : originalManifest
74+
setManifest(_manifest)
6675
} else if (manifestMode === EditModeType.APPLY) {
6776
const _manifestValue = manifestValue.replace(regex, 'apiVersion:')
6877
if (_manifestValue !== defaultManifest) {
@@ -71,38 +80,35 @@ export default function ClusterManifest({
7180
setManifestData(JSON.stringify(YAML.parse(_manifestValue)))
7281
} else {
7382
setManifest(defaultManifestErrorText)
83+
setManifestMode(EditModeType.EDIT)
7484
}
7585
} catch (error) {
76-
setManifest(defaultManifestErrorText + '# ' + error + '\n#\n' + _manifestValue)
86+
// Since we check error in edit as well, we can ignore this error and somehow infinite loop is created if we setManifest here.
7787
setManifestMode(EditModeType.EDIT)
7888
}
7989
} else {
8090
selectTerminalTab()
8191
setManifestMode(EditModeType.NON_EDIT)
8292
}
8393
} else if (manifestMode === EditModeType.EDIT) {
84-
if (errorMessage?.length) {
85-
setManifest(defaultManifestErrorText + '# ' + errorMessage + '\n#\n' + manifestValue)
94+
try {
95+
// Parsing will remove earlier comments, which will fix internal issues of code, currently the errorMessage is not getting cleared due to line 83.
96+
const parsedManifest = YAML.parse(manifestValue)
97+
if (parsedManifest) {
98+
const trimmedManifest = YAML.stringify(getTrimmedManifestData(parsedManifest))
99+
const errorDetails = errorMessage?.length ? defaultManifestErrorText + '# ' + errorMessage + '\n#\n' : ''
100+
setManifest(errorDetails + trimmedManifest)
101+
}
102+
else {
103+
setManifest(defaultManifestErrorText)
104+
}
86105
}
87-
}
88-
}, [manifestMode])
89-
90-
const displayManifest = (() => {
91-
if (manifestMode === EditModeType.NON_EDIT) {
92-
if (hideManagedFields) {
93-
return defaultManifest
106+
catch (error) {
107+
// Should we directly use error object here?
108+
setManifest(defaultManifestErrorText + '# ' + error + '\n#\n' + manifestValue)
94109
}
95-
return originalManifest
96110
}
97-
98-
return manifestValue
99-
})()
100-
101-
const handleEditorChange = (value: string) => {
102-
if (manifestMode !== EditModeType.NON_EDIT) {
103-
setManifest(value)
104-
}
105-
}
111+
}, [manifestMode, hideManagedFields])
106112

107113
const switchToEditMode = (): void => {
108114
setManifestMode(EditModeType.EDIT)
@@ -136,10 +142,10 @@ export default function ClusterManifest({
136142
defaultValue={defaultManifest}
137143
theme="vs-dark--dt"
138144
height="100%"
139-
value={displayManifest}
145+
value={manifestValue}
140146
mode={MODES.YAML}
141147
noParsing
142-
onChange={handleEditorChange}
148+
onChange={setManifest}
143149
readOnly={manifestMode !== EditModeType.EDIT && manifestMode !== EditModeType.REVIEW}
144150
diffView={manifestMode === EditModeType.REVIEW}
145151
/>

src/components/ClusterNodes/ClusterTerminal.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ export default function ClusterTerminal({
180180
}
181181
const namespace = result.namespace
182182
setNamespace(namespace ? { label: namespace, value: namespace } : defaultNameSpace)
183+
setHideManagedFields(true)
183184
setManifestButtonState(EditModeType.NON_EDIT)
184185
terminalAccessIdRef.current = result.terminalAccessId
185186
socketConnecting()
@@ -338,6 +339,7 @@ export default function ClusterTerminal({
338339
function getNewSession() {
339340
if (!terminalAccessIdRef.current) return
340341
setSocketConnection(SocketConnectionType.CONNECTING)
342+
// It might be that we dont have resourceData.
341343
getClusterData(
342344
`user/terminal/get?namespace=${selectedNamespace.value}&shellName=${
343345
selectedTerminalType.value

0 commit comments

Comments
 (0)