extension.js 3.5 KB
Newer Older
1
const vscode = require('vscode');
F
Fatih Acet 已提交
2
const openers = require('./openers');
3
const tokenInput = require('./token_input');
4
const tokenService = require('./token_service');
F
Fatih Acet 已提交
5
const pipelineActionsPicker = require('./pipeline_actions_picker');
F
Fatih Acet 已提交
6
const searchInput = require('./search_input');
F
Fatih Acet 已提交
7
const snippetInput = require('./snippet_input');
F
Fatih Acet 已提交
8
const sidebar = require('./sidebar');
F
Fatih Acet 已提交
9
const ciConfigValidator = require('./ci_config_validator');
F
Fatih Acet 已提交
10
const IssuableDataProvider = require('./data_providers/issuable').DataProvider;
F
Fatih Acet 已提交
11
const CurrentBranchDataProvider = require('./data_providers/current_branch').DataProvider;
12

F
Fatih Acet 已提交
13
let context = null;
F
Fatih Acet 已提交
14 15 16
vscode.gitLabWorkflow = {
  sidebarDataProviders: [],
};
F
Fatih Acet 已提交
17

F
Fatih Acet 已提交
18
const registerSidebarTreeDataProviders = () => {
F
Fatih Acet 已提交
19 20
  const assignedIssuesDataProvider = new IssuableDataProvider({
    fetcher: 'fetchIssuesAssignedToMe',
21
    noItemText: 'There is no issue assigned to you.',
F
Fatih Acet 已提交
22 23 24 25
  });

  const createdIssuesDataProvider = new IssuableDataProvider({
    fetcher: 'fetchIssuesCreatedByMe',
26
    noItemText: 'There is no issue created by you.',
F
Fatih Acet 已提交
27 28 29 30 31
  });

  const assignedMrsDataProvider = new IssuableDataProvider({
    fetcher: 'fetchMergeRequestsAssignedToMe',
    issuableType: 'merge request',
32
    noItemText: 'There is no MR assigned to you.',
F
Fatih Acet 已提交
33 34 35 36 37
  });

  const createdMrsDataProvider = new IssuableDataProvider({
    fetcher: 'fetchMergeRequestsCreatedByMe',
    issuableType: 'merge request',
38
    noItemText: 'There is no MR created by you.',
F
Fatih Acet 已提交
39 40
  });

41 42 43 44 45 46
  const allProjectMrsDataProvider = new IssuableDataProvider({
    fetcher: 'fetchAllProjectMergeRequests',
    issuableType: 'merge request',
    noItemText: 'The project has no merge requests',
  });

F
Fatih Acet 已提交
47 48
  const currentBranchDataProvider = new CurrentBranchDataProvider();

F
Fatih Acet 已提交
49 50 51
  const register = (name, provider) => {
    vscode.window.registerTreeDataProvider(name, provider);
    vscode.gitLabWorkflow.sidebarDataProviders.push(provider);
52
  };
F
Fatih Acet 已提交
53 54 55 56 57

  register('issuesAssignedToMe', assignedIssuesDataProvider);
  register('issuesCreatedByMe', createdIssuesDataProvider);
  register('mrsAssignedToMe', assignedMrsDataProvider);
  register('mrsCreatedByMe', createdMrsDataProvider);
58
  register('allProjectMrs', allProjectMrsDataProvider);
F
Fatih Acet 已提交
59
  register('currentBranchInfo', currentBranchDataProvider);
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
};

const registerCommands = () => {
  const commands = {
    'gl.showIssuesAssignedToMe': openers.showIssues,
    'gl.showMergeRequestsAssignedToMe': openers.showMergeRequests,
    'gl.setToken': tokenInput.showInput,
    'gl.removeToken': tokenInput.removeTokenPicker,
    'gl.openActiveFile': openers.openActiveFile,
    'gl.openCurrentMergeRequest': openers.openCurrentMergeRequest,
    'gl.openCreateNewIssue': openers.openCreateNewIssue,
    'gl.openCreateNewMR': openers.openCreateNewMr,
    'gl.openProjectPage': openers.openProjectPage,
    'gl.openCurrentPipeline': openers.openCurrentPipeline,
    'gl.pipelineActions': pipelineActionsPicker.showPicker,
    'gl.issueSearch': searchInput.showIssueSearchInput,
    'gl.mergeRequestSearch': searchInput.showMergeRequestSearchInput,
    'gl.compareCurrentBranch': openers.compareCurrentBranch,
    'gl.createSnippet': snippetInput.show,
    'gl.validateCIConfig': ciConfigValidator.validate,
    'gl.refreshSidebar': sidebar.refresh,
  };

  Object.keys(commands).forEach(cmd => {
    context.subscriptions.push(vscode.commands.registerCommand(cmd, commands[cmd]));
  });

  registerSidebarTreeDataProviders();
};
89

F
Fatih Acet 已提交
90
const init = () => {
91
  tokenService.init(context);
F
Fatih Acet 已提交
92 93 94 95 96 97 98
};

const activate = ctx => {
  context = ctx;
  registerCommands();
  init();
};
99

F
Fatih Acet 已提交
100
exports.init = init;
101
exports.activate = activate;