diff --git a/src/webview/src/App.vue b/src/webview/src/App.vue index f1a1d33563e835d2075ea75476c481469d64ccba..b1c3f709fc7b07d8e5e5f1f0fa48884f0abe6d77 100644 --- a/src/webview/src/App.vue +++ b/src/webview/src/App.vue @@ -50,6 +50,10 @@ export default { note.markdownRenderedOnServer = true; } }); + + window.vsCodeApi.postMessage({ + command: 'appReady', + }); }, } diff --git a/src/webview_controller.js b/src/webview_controller.js index b10547a0d39047d08402f664a49acf79dcc30091..09fc33c12a6e13b4110f98de80456a9c3cd65b4f 100644 --- a/src/webview_controller.js +++ b/src/webview_controller.js @@ -64,10 +64,20 @@ const createPanel = issuable => { }); }; -async function handleCreate(panel, issuable) { - const discussions = await gitLabService.fetchDiscussions(issuable); +function sendIssuableAndDiscussions(panel, issuable, discussions, appIsReady) { + if (!discussions || !appIsReady) return; panel.webview.postMessage({ type: 'issuableFetch', issuable, discussions }); +} + +async function handleCreate(panel, issuable) { + let discussions = false; + let appIsReady = false; panel.webview.onDidReceiveMessage(async message => { + if (message.command === 'appReady') { + appIsReady = true; + sendIssuableAndDiscussions(panel, issuable, discussions, appIsReady); + } + if (message.command === 'renderMarkdown') { let rendered = await gitLabService.renderMarkdown(message.markdown); rendered = (rendered || '') @@ -97,6 +107,9 @@ async function handleCreate(panel, issuable) { } } }); + + discussions = await gitLabService.fetchDiscussions(issuable); + sendIssuableAndDiscussions(panel, issuable, discussions, appIsReady); } async function create(issuable) {