From 8965093a81aa85dd40c333356b26b976efaaf544 Mon Sep 17 00:00:00 2001 From: Fatih Acet Date: Mon, 24 Sep 2018 19:12:13 +0300 Subject: [PATCH] Refresh sidebar. --- package.json | 6 +++++- src/data_providers/issuable.js | 11 ++++++++++- src/extension.js | 25 +++++++++++++++++++------ src/sidebar.js | 9 +++++++++ 4 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 src/sidebar.js diff --git a/package.json b/package.json index ee8f816..7a99992 100644 --- a/package.json +++ b/package.json @@ -103,7 +103,11 @@ }, { "command": "gl.refreshSidebar", - "title": "GitLab: Refresh sidebar" + "title": "GitLab: Refresh sidebar", + "icon": { + "light": "src/assets/images/light/refresh.svg", + "dark": "src/assets/images/dark/refresh.svg" + } } ], "menus": { diff --git a/src/data_providers/issuable.js b/src/data_providers/issuable.js index 76132b4..f191238 100644 --- a/src/data_providers/issuable.js +++ b/src/data_providers/issuable.js @@ -3,9 +3,12 @@ const gitLabService = require('../gitlab_service'); class DataProvider { constructor({ fetcher, issuableType }) { + this._onDidChangeTreeData = new vscode.EventEmitter(); + this.onDidChangeTreeData = this._onDidChangeTreeData.event; + this.fetcher = fetcher; this.issuableType = issuableType || 'issue'; - this.issuableSign = issuableType === 'issue' ? '#' : '!'; + this.issuableSign = this.issuableType === 'issue' ? '#' : '!'; } async getChildren() { @@ -30,12 +33,18 @@ class DataProvider { return items; } + getParent() { return null; } + getTreeItem(item) { return item; } + + refresh() { + this._onDidChangeTreeData.fire(); + } } exports.DataProvider = DataProvider; diff --git a/src/extension.js b/src/extension.js index 8d40665..a7c0015 100644 --- a/src/extension.js +++ b/src/extension.js @@ -5,10 +5,14 @@ const tokenService = require('./token_service'); const pipelineActionsPicker = require('./pipeline_actions_picker'); const searchInput = require('./search_input'); const snippetInput = require('./snippet_input'); +const sidebar = require('./sidebar'); const ciConfigValidator = require('./ci_config_validator'); const IssuableDataProvider = require('./data_providers/issuable').DataProvider; let context = null; +vscode.gitLabWorkflow = { + sidebarDataProviders: [], +}; const registerCommands = () => { const commands = { @@ -28,13 +32,17 @@ const registerCommands = () => { 'gl.compareCurrentBranch': openers.compareCurrentBranch, 'gl.createSnippet': snippetInput.show, 'gl.validateCIConfig': ciConfigValidator.validate, - 'gl.refreshSidebar': snippetInput.show, + 'gl.refreshSidebar': sidebar.refresh, }; Object.keys(commands).forEach(cmd => { context.subscriptions.push(vscode.commands.registerCommand(cmd, commands[cmd])); }); + registerSidebarTreeDataProviders(); +}; + +const registerSidebarTreeDataProviders = () => { const assignedIssuesDataProvider = new IssuableDataProvider({ fetcher: 'fetchIssuesAssignedToMe', }); @@ -53,11 +61,16 @@ const registerCommands = () => { issuableType: 'merge request', }); - vscode.window.registerTreeDataProvider('issuesAssignedToMe', assignedIssuesDataProvider); - vscode.window.registerTreeDataProvider('issuesCreatedByMe', createdIssuesDataProvider); - vscode.window.registerTreeDataProvider('mrsAssignedToMe', assignedMrsDataProvider); - vscode.window.registerTreeDataProvider('mrsCreatedByMe', createdMrsDataProvider); -}; + const register = (name, provider) => { + vscode.window.registerTreeDataProvider(name, provider); + vscode.gitLabWorkflow.sidebarDataProviders.push(provider); + } + + register('issuesAssignedToMe', assignedIssuesDataProvider); + register('issuesCreatedByMe', createdIssuesDataProvider); + register('mrsAssignedToMe', assignedMrsDataProvider); + register('mrsCreatedByMe', createdMrsDataProvider); +} const init = () => { tokenService.init(context); diff --git a/src/sidebar.js b/src/sidebar.js new file mode 100644 index 0000000..86acf7e --- /dev/null +++ b/src/sidebar.js @@ -0,0 +1,9 @@ +const vscode = require('vscode'); + +const refresh = () => { + vscode.gitLabWorkflow.sidebarDataProviders.forEach((provider) => { + provider.refresh(); + }); +} + +exports.refresh = refresh; -- GitLab