Skip to content

Commit daf24f9

Browse files
committed
fix(diagram-panel): fixed possible race condition during mermaid import
Signed-off-by: Jean-Baptiste Bianchi <[email protected]>
1 parent 7083f03 commit daf24f9

File tree

3 files changed

+11
-4
lines changed

3 files changed

+11
-4
lines changed

resources/diagram-panel.html

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,15 @@
1111
<body>
1212
<div id="diagram-container"></div>
1313
<script type="module">
14+
const vscode = acquireVsCodeApi();
15+
window.addEventListener('load', async() => {
16+
await vscode.postMessage({
17+
command: 'panel-content-loaded'
18+
})
19+
});
1420
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/+esm';
1521
(async () => {
1622
try {
17-
const vscode = acquireVsCodeApi();
1823
const diagramContainerEl = document.getElementById('diagram-container');
1924

2025
function updateState(partialState) {

src/diagram-panel.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ export class DiagramPanel {
7878
return;
7979
}
8080
this.#panel.webview.html = panelContent;
81-
await this.#updateDiagram();
8281
}
8382

8483
dispose() {
@@ -137,6 +136,9 @@ export class DiagramPanel {
137136
async #onPanelReceiveMessage(message: any): Promise<void> {
138137
const { command, ...args } = message;
139138
switch (command) {
139+
case 'panel-content-loaded':
140+
await this.#updateDiagram();
141+
break;
140142
case 'diagram-rendered': {
141143
if (this.#mode === 'png') {
142144
await this.#panel?.webview.postMessage({

src/extension.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ async function handleDiagramCommand(context: vscode.ExtensionContext, mode: Diag
3030
if (supportedExtensions.includes(ext)) {
3131
const target = await vscode.workspace.openTextDocument(item);
3232
const diagramPanel = new DiagramPanel(context, { mode });
33-
diagramPanel.render(target!);
33+
await diagramPanel.render(target!);
3434
}
3535
}
3636
return;
@@ -39,7 +39,7 @@ async function handleDiagramCommand(context: vscode.ExtensionContext, mode: Diag
3939
const target = vscode.window.activeTextEditor?.document;
4040
if (target) {
4141
const diagramPanel = new DiagramPanel(context, { mode });
42-
diagramPanel.render(target);
42+
await diagramPanel.render(target);
4343
}
4444
return;
4545
}

0 commit comments

Comments
 (0)