Skip to content

Commit d117c13

Browse files
committed
refactor(vscode-extension): simplify setupThemeSync by removing return function and debouncing theme updates
1 parent f9cda6e commit d117c13

1 file changed

Lines changed: 8 additions & 7 deletions

File tree

  • packages/vscode-extension/src/webview

packages/vscode-extension/src/webview/theme.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const IFRAME_READY_TYPES: ReadonlySet<string> = new Set([
2424
export const setupThemeSync = (
2525
iframe: HTMLIFrameElement,
2626
appOrigin: string
27-
): (() => void) => {
27+
): void => {
2828
const sendTheme = (): void => {
2929
iframe.contentWindow?.postMessage(
3030
{ type: HOST_MESSAGE_TYPE.THEME, payload: extractTheme() },
@@ -39,14 +39,15 @@ export const setupThemeSync = (
3939
};
4040
window.addEventListener('message', onIframeReady);
4141

42-
const observer = new MutationObserver(sendTheme);
42+
let rafId = 0;
43+
const sendThemeDebounced = (): void => {
44+
cancelAnimationFrame(rafId);
45+
rafId = requestAnimationFrame(sendTheme);
46+
};
47+
48+
const observer = new MutationObserver(sendThemeDebounced);
4349
observer.observe(document.body, {
4450
attributes: true,
4551
attributeFilter: ['class', 'style'],
4652
});
47-
48-
return () => {
49-
window.removeEventListener('message', onIframeReady);
50-
observer.disconnect();
51-
};
5253
};

0 commit comments

Comments
 (0)