Skip to content

Commit 0ea89a3

Browse files
authored
chore: add cleanup callbacks to some useEffect calls (coder#13444)
1 parent 213848e commit 0ea89a3

File tree

4 files changed

+29
-10
lines changed

4 files changed

+29
-10
lines changed

site/src/contexts/useProxyLatency.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,10 @@ export const useProxyLatency = (
225225
// Local storage cleanup
226226
garbageCollectStoredLatencies(proxies, maxStoredLatencies);
227227
});
228+
229+
return () => {
230+
observer.disconnect();
231+
};
228232
}, [proxies, latestFetchRequest, maxStoredLatencies]);
229233

230234
return {

site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.tsx

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -245,20 +245,32 @@ const useFileTree = (templateVersion: TemplateVersion | undefined) => {
245245
fileTree: undefined,
246246
tarFile: undefined,
247247
});
248+
248249
useEffect(() => {
250+
let stale = false;
249251
const initializeFileTree = async (file: ArrayBuffer) => {
250252
const tarFile = new TarReader();
251-
await tarFile.readFile(file);
252-
const fileTree = await createTemplateVersionFileTree(tarFile);
253-
setState({ fileTree, tarFile });
253+
try {
254+
await tarFile.readFile(file);
255+
// Ignore stale updates if this effect has been cancelled.
256+
if (stale) {
257+
return;
258+
}
259+
const fileTree = createTemplateVersionFileTree(tarFile);
260+
setState({ fileTree, tarFile });
261+
} catch (error) {
262+
console.error(error);
263+
displayError("Error on initializing the editor");
264+
}
254265
};
255266

256267
if (fileQuery.data) {
257-
initializeFileTree(fileQuery.data).catch((reason) => {
258-
console.error(reason);
259-
displayError("Error on initializing the editor");
260-
});
268+
void initializeFileTree(fileQuery.data);
261269
}
270+
271+
return () => {
272+
stale = true;
273+
};
262274
}, [fileQuery.data]);
263275

264276
return state;

site/src/pages/WorkspacePage/WorkspaceBuildProgress.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,10 @@ export const WorkspaceBuildProgress: FC<WorkspaceBuildProgressProps> = ({
9797
setProgressValue(est);
9898
setProgressText(text);
9999
};
100-
setTimeout(updateProgress, 5);
100+
const updateTimer = requestAnimationFrame(updateProgress);
101+
return () => {
102+
cancelAnimationFrame(updateTimer);
103+
};
101104
}, [progressValue, job, transitionStats]);
102105

103106
// HACK: the codersdk type generator doesn't support null values, but this

site/src/utils/templateVersion.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ export const getTemplateVersionFiles = async (
2323
return files;
2424
};
2525

26-
export const createTemplateVersionFileTree = async (
26+
export const createTemplateVersionFileTree = (
2727
tarReader: TarReader,
28-
): Promise<FileTree> => {
28+
): FileTree => {
2929
let fileTree: FileTree = {};
3030
for (const file of tarReader.fileInfo) {
3131
fileTree = set(

0 commit comments

Comments
 (0)