issuable.js 1.1 KB
Newer Older
F
Fatih Acet 已提交
1 2
const vscode = require('vscode');
const gitLabService = require('../gitlab_service');
3
const { SidebarTreeItem } = require('../sidebar_tree_item');
F
Fatih Acet 已提交
4 5

class DataProvider {
6
  constructor({ fetcher, issuableType, noItemText }) {
F
Fatih Acet 已提交
7 8 9
    this._onDidChangeTreeData = new vscode.EventEmitter();
    this.onDidChangeTreeData = this._onDidChangeTreeData.event;

F
Fatih Acet 已提交
10
    this.fetcher = fetcher;
11 12
    this.issuableSign = issuableType === 'merge_request' ? '!' : '#';
    this.noItemText = noItemText || 'Nothing to show.';
F
Fatih Acet 已提交
13 14 15 16 17 18 19
  }

  async getChildren() {
    const items = [];
    const issues = await gitLabService[this.fetcher]();

    if (issues.length) {
20
      issues.forEach(issue => {
F
Fatih Acet 已提交
21 22
        const title = `${this.issuableSign}${issue.iid} · ${issue.title}`;

23
        items.push(new SidebarTreeItem(title, issue));
F
Fatih Acet 已提交
24 25
      });
    } else {
26
      items.push(new SidebarTreeItem(this.noItemText));
F
Fatih Acet 已提交
27 28 29 30
    }

    return items;
  }
F
Fatih Acet 已提交
31

F
Fatih Acet 已提交
32 33 34
  getParent() {
    return null;
  }
F
Fatih Acet 已提交
35

F
Fatih Acet 已提交
36 37 38
  getTreeItem(item) {
    return item;
  }
F
Fatih Acet 已提交
39 40 41 42

  refresh() {
    this._onDidChangeTreeData.fire();
  }
F
Fatih Acet 已提交
43 44 45
}

exports.DataProvider = DataProvider;