From 76d6f49b4663f91222b61d3ab0a7a6b693c94a2e Mon Sep 17 00:00:00 2001 From: Fatih Acet Date: Thu, 11 Oct 2018 14:26:32 +0200 Subject: [PATCH] Initial discussions component. --- src/gitlab_service.js | 13 ++++++++++++ src/webview/src/App.vue | 2 ++ .../src/components/IssuableDiscussions.vue | 21 +++++++++++++++++++ src/webview_controller.js | 16 +++++++++----- 4 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 src/webview/src/components/IssuableDiscussions.vue diff --git a/src/gitlab_service.js b/src/gitlab_service.js index faa67c0..7ab0a5c 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 d150bd0..f28f298 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 0000000..519a79b --- /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 bef3058..d7ae6ac 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; -- GitLab