fa2af5e0f5
Reduced the technical debt around our JS flash function by making it a module that is imported rather than relying on the global function. The global function still exists mainly for technical debt with how some requests are being completed, but new JS should import the module directly. Also reduces some tech debt in the file by removing the need for jQuery. Instead Flash is now 100% vanilla JS.
66 lines
2.2 KiB
JavaScript
66 lines
2.2 KiB
JavaScript
/* eslint-disable no-new */
|
|
import Flash from '../flash';
|
|
import ProtectedBranchAccessDropdown from './protected_branch_access_dropdown';
|
|
|
|
export default class ProtectedBranchEdit {
|
|
constructor(options) {
|
|
this.$wrap = options.$wrap;
|
|
this.$allowedToMergeDropdown = this.$wrap.find('.js-allowed-to-merge');
|
|
this.$allowedToPushDropdown = this.$wrap.find('.js-allowed-to-push');
|
|
this.onSelectCallback = this.onSelect.bind(this);
|
|
|
|
this.buildDropdowns();
|
|
}
|
|
|
|
buildDropdowns() {
|
|
// Allowed to merge dropdown
|
|
this.protectedBranchAccessDropdown = new ProtectedBranchAccessDropdown({
|
|
$dropdown: this.$allowedToMergeDropdown,
|
|
data: gon.merge_access_levels,
|
|
onSelect: this.onSelectCallback,
|
|
});
|
|
|
|
// Allowed to push dropdown
|
|
this.protectedBranchAccessDropdown = new ProtectedBranchAccessDropdown({
|
|
$dropdown: this.$allowedToPushDropdown,
|
|
data: gon.push_access_levels,
|
|
onSelect: this.onSelectCallback,
|
|
});
|
|
}
|
|
|
|
onSelect() {
|
|
const $allowedToMergeInput = this.$wrap.find(`input[name="${this.$allowedToMergeDropdown.data('fieldName')}"]`);
|
|
const $allowedToPushInput = this.$wrap.find(`input[name="${this.$allowedToPushDropdown.data('fieldName')}"]`);
|
|
|
|
// Do not update if one dropdown has not selected any option
|
|
if (!($allowedToMergeInput.length && $allowedToPushInput.length)) return;
|
|
|
|
this.$allowedToMergeDropdown.disable();
|
|
this.$allowedToPushDropdown.disable();
|
|
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: this.$wrap.data('url'),
|
|
dataType: 'json',
|
|
data: {
|
|
_method: 'PATCH',
|
|
protected_branch: {
|
|
merge_access_levels_attributes: [{
|
|
id: this.$allowedToMergeDropdown.data('access-level-id'),
|
|
access_level: $allowedToMergeInput.val(),
|
|
}],
|
|
push_access_levels_attributes: [{
|
|
id: this.$allowedToPushDropdown.data('access-level-id'),
|
|
access_level: $allowedToPushInput.val(),
|
|
}],
|
|
},
|
|
},
|
|
error() {
|
|
new Flash('Failed to update branch!', 'alert', document.querySelector('.js-protected-branches-list'));
|
|
},
|
|
}).always(() => {
|
|
this.$allowedToMergeDropdown.enable();
|
|
this.$allowedToPushDropdown.enable();
|
|
});
|
|
}
|
|
}
|