diff --git a/src/gitlab_service.js b/src/gitlab_service.js
index faa67c03cc502da8fec660e9ff845dc12e84f04f..7ab0a5c9b9c1924f7d2b58c4f05914f03f21d2c3 100644
--- a/src/gitlab_service.js
+++ b/src/gitlab_service.js
@@ -374,6 +374,18 @@ async function validateCIConfig(content) {
return response;
}
+async function fetchDiscussions(issuable) {
+ let discussions = [];
+
+ try {
+ discussions = await fetch(`/projects/${issuable.project_id}/issues/${issuable.iid}/discussions?sort=asc`);
+ } catch (e) {
+ vscode.window.showInformationMessage('GitLab Workflow: Failed to fetch discussions for this issuable.');
+ }
+
+ return discussions;
+}
+
exports.fetchUser = fetchUser;
exports.fetchIssuesAssignedToMe = fetchIssuesAssignedToMe;
exports.fetchIssuesCreatedByMe = fetchIssuesCreatedByMe;
@@ -391,3 +403,4 @@ exports.fetchMRIssues = fetchMRIssues;
exports.createSnippet = createSnippet;
exports.validateCIConfig = validateCIConfig;
exports.fetchVersion = fetchVersion;
+exports.fetchDiscussions = fetchDiscussions;
diff --git a/src/webview/src/App.vue b/src/webview/src/App.vue
index d150bd038b824611cefea20a997458dbe8f25928..f28f29876044d6ea54a6e4752f73ec65868bb923 100644
--- a/src/webview/src/App.vue
+++ b/src/webview/src/App.vue
@@ -8,6 +8,7 @@ export default {
issuable: {
title: 'Loading...',
},
+ discussions: [],
};
},
components: {
@@ -24,6 +25,7 @@ export default {
+
diff --git a/src/webview/src/components/IssuableDiscussions.vue b/src/webview/src/components/IssuableDiscussions.vue
new file mode 100644
index 0000000000000000000000000000000000000000..519a79b9e8d2d469087fee62c889b108210f0a78
--- /dev/null
+++ b/src/webview/src/components/IssuableDiscussions.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
diff --git a/src/webview_controller.js b/src/webview_controller.js
index bef30583d10e63a4333953d59e0f997ea64debca..d7ae6ac4b62177773a9cd53310326edbbef49135 100644
--- a/src/webview_controller.js
+++ b/src/webview_controller.js
@@ -1,6 +1,7 @@
const fs = require('fs');
const path = require('path');
const vscode = require('vscode');
+const gitLabService = require('./gitlab_service');
let context = null;
@@ -34,6 +35,12 @@ const getResources = () => {
return paths;
}
+const getIndexPath = () => {
+ const isDev = !(fs.existsSync(path.join(context.extensionPath, 'src/webview/dist/js/app.js')));
+
+ return isDev ? 'src/webview/public/dev.html' : 'src/webview/public/index.html';
+}
+
async function create(issuable) {
const panel = vscode.window.createWebviewPanel('glWorkflow', 'GL Workflow', vscode.ViewColumn.One, {
enableScripts: true,
@@ -42,11 +49,8 @@ async function create(issuable) {
]
});
- const isDev = !(fs.existsSync(path.join(context.extensionPath, 'src/webview/dist/js/app.js')));
- const indexPath = isDev ? 'src/webview/public/dev.html' : 'src/webview/public/index.html';
-
const { appScriptUri, vendorUri, styleUri, devScriptUri } = getResources();
- let html = fs.readFileSync(path.join(context.extensionPath, indexPath), 'UTF-8');
+ let html = fs.readFileSync(path.join(context.extensionPath, getIndexPath()), 'UTF-8');
html = html.replace(/{{nonce}}/gm, getNonce())
.replace('{{styleUri}}', styleUri)
@@ -54,8 +58,10 @@ async function create(issuable) {
.replace('{{appScriptUri}}', appScriptUri)
.replace('{{devScriptUri}}', devScriptUri);
+
+ const discussions = await gitLabService.fetchDiscussions(issuable);
panel.webview.html = html;
- panel.webview.postMessage({ issuable });
+ panel.webview.postMessage({ issuable, discussions });
}
exports.addDeps = addDeps;