Welcome to mirror list, hosted at ThFree Co, Russian Federation.

close_reopen_report_toggle.js « javascripts « assets « app - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 0824f124984fdf934d38916d8e3ae2d525f26ac0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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
89
90
91
92
93
94
95
96
97
import * as DropLab from './droplab/drop_lab';
import ISetter from './droplab/plugins/input_setter';

// Todo: Remove this when fixing issue in input_setter plugin
const InputSetter = Object.assign({}, ISetter);

class CloseReopenReportToggle {
  constructor(opts = {}) {
    this.dropdownTrigger = opts.dropdownTrigger;
    this.dropdownList = opts.dropdownList;
    this.button = opts.button;
  }

  initDroplab() {
    this.reopenItem = this.dropdownList.querySelector('.reopen-item');
    this.closeItem = this.dropdownList.querySelector('.close-item');

    this.droplab = new DropLab.default();

    const config = this.setConfig();

    this.droplab.init(this.dropdownTrigger, this.dropdownList, [InputSetter], config);
  }

  updateButton(isClosed) {
    this.toggleButtonType(isClosed);

    this.button.blur();
  }

  toggleButtonType(isClosed) {
    const [showItem, hideItem] = this.getButtonTypes(isClosed);

    showItem.classList.remove('hidden');
    showItem.classList.add('droplab-item-selected');

    hideItem.classList.add('hidden');
    hideItem.classList.remove('droplab-item-selected');

    showItem.click();
  }

  getButtonTypes(isClosed) {
    return isClosed ? [this.reopenItem, this.closeItem] : [this.closeItem, this.reopenItem];
  }

  setDisable(shouldDisable) {
    if (shouldDisable) {
      this.button.setAttribute('disabled', 'true');
      this.dropdownTrigger.setAttribute('disabled', 'true');
    } else {
      this.button.removeAttribute('disabled');
      this.dropdownTrigger.removeAttribute('disabled');
    }
  }

  setConfig() {
    const config = {
      InputSetter: [
        {
          input: this.button,
          valueAttribute: 'data-text',
          inputAttribute: 'data-value',
        },
        {
          input: this.button,
          valueAttribute: 'data-text',
          inputAttribute: 'title',
        },
        {
          input: this.button,
          valueAttribute: 'data-button-class',
          inputAttribute: 'class',
        },
        {
          input: this.dropdownTrigger,
          valueAttribute: 'data-toggle-class',
          inputAttribute: 'class',
        },
        {
          input: this.button,
          valueAttribute: 'data-url',
          inputAttribute: 'href',
        },
        {
          input: this.button,
          valueAttribute: 'data-method',
          inputAttribute: 'data-method',
        },
      ],
    };

    return config;
  }
}

export default CloseReopenReportToggle;