aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web/src/main/js/apps/coding-rules/bulk-change-modal-view.js
blob: ae7d89af6583d8f4bd0a3e24415fe16144ba5a0e (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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*
 * SonarQube
 * Copyright (C) 2009-2017 SonarSource SA
 * mailto:info AT sonarsource DOT com
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 3 of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */
import $ from 'jquery';
import ModalFormView from '../../components/common/modal-form';
import Template from './templates/coding-rules-bulk-change-modal.hbs';
import { translateWithParameters } from '../../helpers/l10n';

export default ModalFormView.extend({
  template: Template,

  ui () {
    return {
      ...ModalFormView.prototype.ui.apply(this, arguments),
      codingRulesSubmitBulkChange: '#coding-rules-submit-bulk-change'
    };
  },

  showSuccessMessage (profile, succeeded) {
    const profileBase = this.options.app.qualityProfiles.find(p => p.key === profile);
    const message = translateWithParameters('coding_rules.bulk_change.success',
        profileBase.name, profileBase.language, succeeded);
    this.ui.messagesContainer.append(`<div class="alert alert-success">${message}</div>`);
  },

  showWarnMessage (profile, succeeded, failed) {
    const profileBase = this.options.app.qualityProfiles.find(p => p.key === profile);
    const message = translateWithParameters('coding_rules.bulk_change.warning',
        profileBase.name, profileBase.language, succeeded, failed);
    this.ui.messagesContainer.append(`<div class="alert alert-warning">${message}</div>`);
  },

  onRender () {
    ModalFormView.prototype.onRender.apply(this, arguments);
    this.$('#coding-rules-bulk-change-profile').select2({
      width: '250px',
      minimumResultsForSearch: 1,
      openOnEnter: false
    });
  },

  onFormSubmit () {
    ModalFormView.prototype.onFormSubmit.apply(this, arguments);
    const url = `${window.baseUrl}/api/qualityprofiles/${this.options.action}_rules`;
    const options = { ...this.options.app.state.get('query'), wsAction: this.options.action };
    const profiles = this.$('#coding-rules-bulk-change-profile').val() || [this.options.param];
    this.ui.messagesContainer.empty();
    this.sendRequests(url, options, profiles);
  },

  sendRequests (url, options, profiles) {
    const that = this;
    let looper = $.Deferred().resolve();
    this.disableForm();
    profiles.forEach(profile => {
      const opts = { ...options, profile_key: profile };
      looper = looper.then(() => {
        return $.post(url, opts).done(r => {
          if (!that.isDestroyed) {
            if (r.failed) {
              that.showWarnMessage(profile, r.succeeded, r.failed);
            } else {
              that.showSuccessMessage(profile, r.succeeded);
            }
          }
        });
      });
    });
    looper.done(() => {
      that.options.app.controller.fetchList();
      if (!that.isDestroyed) {
        that.$(that.ui.codingRulesSubmitBulkChange.selector).hide();
        that.enableForm();
        that.$('.modal-field').hide();
        that.$('.js-modal-close').focus();
      }
    });
  },

  getAvailableQualityProfiles () {
    const queryLanguages = this.options.app.state.get('query').languages;
    const languages = queryLanguages && queryLanguages.length > 0 ? queryLanguages.split(',') : [];
    let profiles = this.options.app.qualityProfiles;
    if (languages.length > 0) {
      profiles = profiles.filter(profile => languages.indexOf(profile.lang) !== -1);
    }
    return profiles;
  },

  serializeData () {
    const profile = this.options.app.qualityProfiles.find(p => p.key === this.options.param);
    return {
      ...ModalFormView.prototype.serializeData.apply(this, arguments),
      action: this.options.action,
      state: this.options.app.state.toJSON(),
      qualityProfile: this.options.param,
      qualityProfileName: profile != null ? profile.name : null,
      qualityProfiles: this.options.app.qualityProfiles,
      availableQualityProfiles: this.getAvailableQualityProfiles()
    };
  }
});