2019-10-25 23:38:15 +08:00
|
|
|
/* global I18n HelperModule animateSpinner RepositoryListColumnType */
|
2019-10-21 18:40:53 +08:00
|
|
|
/* eslint-disable no-restricted-globals */
|
2019-10-14 21:27:03 +08:00
|
|
|
var RepositoryColumns = (function() {
|
2019-10-21 18:40:53 +08:00
|
|
|
var manageModal = '#manageRepositoryColumn';
|
2019-10-15 22:11:37 +08:00
|
|
|
|
2019-10-21 18:40:53 +08:00
|
|
|
function initColumnTypeSelector() {
|
|
|
|
var $manageModal = $(manageModal);
|
2019-10-25 16:39:12 +08:00
|
|
|
$manageModal.off('change', '#repository-column-data-type').on('change', '#repository-column-data-type', function() {
|
2019-10-21 18:40:53 +08:00
|
|
|
$('.column-type').hide();
|
|
|
|
$('[data-column-type="' + $(this).val() + '"]').show();
|
2019-10-14 21:27:03 +08:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function removeElementFromDom(column) {
|
2019-10-21 18:40:53 +08:00
|
|
|
$('.repository-column-edtior .list-group-item[data-id="' + column.id + '"]').remove();
|
2019-10-14 21:27:03 +08:00
|
|
|
if ($('.list-group-item').length === 0) {
|
|
|
|
location.reload();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-10-21 18:40:53 +08:00
|
|
|
function initDeleteSubmitAction() {
|
|
|
|
var $manageModal = $(manageModal);
|
|
|
|
$manageModal.off('click', '#delete-repo-column-submit').on('click', '#delete-repo-column-submit', function() {
|
2019-10-14 21:27:03 +08:00
|
|
|
animateSpinner();
|
2019-10-21 18:40:53 +08:00
|
|
|
$manageModal.modal('hide');
|
|
|
|
$.ajax({
|
|
|
|
url: $(this).data('delete-url'),
|
|
|
|
type: 'DELETE',
|
|
|
|
dataType: 'json',
|
|
|
|
success: (result) => {
|
|
|
|
removeElementFromDom(result);
|
|
|
|
HelperModule.flashAlertMsg(result.message, 'success');
|
|
|
|
animateSpinner(null, false);
|
|
|
|
},
|
|
|
|
error: (result) => {
|
|
|
|
animateSpinner(null, false);
|
|
|
|
HelperModule.flashAlertMsg(result.responseJSON.error, 'danger');
|
|
|
|
}
|
2019-10-14 21:27:03 +08:00
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2019-10-21 18:40:53 +08:00
|
|
|
function insertNewListItem(column) {
|
2019-10-22 19:20:05 +08:00
|
|
|
var attributes = column.attributes;
|
2019-10-21 18:40:53 +08:00
|
|
|
var html = `<li class="list-group-item row" data-id="${column.id}">
|
|
|
|
|
2019-10-14 21:27:03 +08:00
|
|
|
<div class="col-xs-8">
|
2019-10-22 19:20:05 +08:00
|
|
|
<span class="pull-left column-name">${attributes.name}</span>
|
2019-10-14 21:27:03 +08:00
|
|
|
</div>
|
|
|
|
<div class="col-xs-4">
|
|
|
|
<span class="controlls pull-right">
|
2019-10-22 19:20:05 +08:00
|
|
|
<button class="btn btn-default edit-repo-column manage-repo-column"
|
2019-10-21 18:40:53 +08:00
|
|
|
data-action="edit"
|
2019-10-22 19:20:05 +08:00
|
|
|
data-modal-url="${attributes.edit_html_url}"
|
2019-10-21 18:40:53 +08:00
|
|
|
>
|
|
|
|
<span class="fas fa-pencil-alt"></span>
|
2019-10-22 17:18:31 +08:00
|
|
|
${ I18n.t('libraries.repository_columns.index.edit_column')}
|
2019-10-21 18:40:53 +08:00
|
|
|
</button>
|
2019-10-22 19:20:05 +08:00
|
|
|
<button class="btn btn-default delete-repo-column manage-repo-column"
|
2019-10-21 18:40:53 +08:00
|
|
|
data-action="destroy"
|
2019-10-22 19:20:05 +08:00
|
|
|
data-modal-url="${attributes.destroy_html_url}"
|
2019-10-21 18:40:53 +08:00
|
|
|
>
|
2019-10-21 19:01:31 +08:00
|
|
|
<span class="fas fa-trash-alt"></span>
|
2019-10-22 17:18:31 +08:00
|
|
|
${ I18n.t('libraries.repository_columns.index.delete_column')}
|
2019-10-14 21:27:03 +08:00
|
|
|
</button>
|
|
|
|
</span>
|
|
|
|
</div>
|
|
|
|
</li>`;
|
|
|
|
|
|
|
|
// remove element if already persent
|
|
|
|
$('[data-id="' + column.id + '"]').remove();
|
2019-10-15 22:11:37 +08:00
|
|
|
$(html).insertBefore('.repository-columns-body ul li:first');
|
2019-10-14 21:27:03 +08:00
|
|
|
// remove 'no column' list item
|
|
|
|
$('[data-attr="no-columns"]').remove();
|
|
|
|
}
|
|
|
|
|
2019-10-25 16:39:12 +08:00
|
|
|
function updateListItem(column) {
|
|
|
|
var name = column.attributes.name;
|
|
|
|
$('li[data-id=' + column.id + ']').find('span').first().text(name);
|
|
|
|
}
|
|
|
|
|
2019-10-30 15:37:20 +08:00
|
|
|
function loadSpecificParams(type, params) {
|
|
|
|
var newParams = params;
|
|
|
|
if (type === 'RepositoryListValue') {
|
2019-11-05 22:33:04 +08:00
|
|
|
newParams.repository_column.repository_list_items_attributes = JSON.parse($('#dropdown_options').val());
|
2019-10-30 15:37:20 +08:00
|
|
|
}
|
|
|
|
return newParams;
|
|
|
|
}
|
|
|
|
|
2019-10-21 18:40:53 +08:00
|
|
|
function initCreateSubmitAction() {
|
|
|
|
var $manageModal = $(manageModal);
|
|
|
|
$manageModal.off('click', '#new-repo-column-submit').on('click', '#new-repo-column-submit', function() {
|
|
|
|
var url = $('#repository-column-data-type').find(':selected').data('create-url');
|
|
|
|
var params = { repository_column: { name: $('#repository-column-name').val() } };
|
2019-10-30 15:37:20 +08:00
|
|
|
var selectedType = $('#repository-column-data-type').find(':selected').val();
|
|
|
|
params = loadSpecificParams(selectedType, params);
|
2019-11-05 22:33:04 +08:00
|
|
|
$.ajax({
|
|
|
|
url: url,
|
|
|
|
type: 'POST',
|
|
|
|
data: JSON.stringify(params),
|
|
|
|
contentType: 'application/json',
|
|
|
|
success: function(result) {
|
|
|
|
var data = result.data;
|
|
|
|
insertNewListItem(data);
|
|
|
|
HelperModule.flashAlertMsg(data.attributes.message, 'success');
|
|
|
|
$manageModal.modal('hide');
|
|
|
|
},
|
|
|
|
error: function(error) {
|
|
|
|
$('#new-repository-column').renderFormErrors('repository_column', error.responseJSON.repository_column, true);
|
|
|
|
}
|
2019-10-22 17:18:31 +08:00
|
|
|
});
|
2019-10-16 19:31:14 +08:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2019-10-21 18:40:53 +08:00
|
|
|
function initEditSubmitAction() {
|
|
|
|
var $manageModal = $(manageModal);
|
2019-10-25 16:39:12 +08:00
|
|
|
$manageModal.off('click', '#update-repo-column-submit').on('click', '#update-repo-column-submit', function() {
|
|
|
|
var url = $('#repository-column-data-type').find(':selected').data('edit-url');
|
|
|
|
var params = { repository_column: { name: $('#repository-column-name').val() } };
|
2019-10-30 15:37:20 +08:00
|
|
|
var selectedType = $('#repository-column-data-type').find(':selected').val();
|
|
|
|
params = loadSpecificParams(selectedType, params);
|
2019-10-25 16:39:12 +08:00
|
|
|
$.ajax({
|
|
|
|
url: url,
|
|
|
|
type: 'PUT',
|
2019-11-05 22:33:04 +08:00
|
|
|
data: JSON.stringify(params),
|
|
|
|
dataType: 'json',
|
|
|
|
contentType: 'application/json',
|
2019-10-25 16:39:12 +08:00
|
|
|
success: function(result) {
|
|
|
|
var data = result.data;
|
|
|
|
updateListItem(data);
|
|
|
|
HelperModule.flashAlertMsg(data.attributes.message, 'success');
|
|
|
|
$manageModal.modal('hide');
|
|
|
|
},
|
|
|
|
error: function(error) {
|
|
|
|
$('#new-repository-column').renderFormErrors('repository_column', error.responseJSON.repository_column, true);
|
|
|
|
}
|
|
|
|
});
|
2019-10-21 18:40:53 +08:00
|
|
|
});
|
|
|
|
}
|
2019-10-15 22:11:37 +08:00
|
|
|
|
2019-10-21 18:40:53 +08:00
|
|
|
function initManageColumnModal() {
|
|
|
|
var $manageModal = $(manageModal);
|
|
|
|
$('.repository-column-edtior').off('click', '.manage-repo-column').on('click', '.manage-repo-column', function() {
|
|
|
|
var button = $(this);
|
|
|
|
var modalUrl = button.data('modal-url');
|
2019-11-05 22:33:04 +08:00
|
|
|
var columnType;
|
2019-10-21 18:40:53 +08:00
|
|
|
$.get(modalUrl, (data) => {
|
|
|
|
$manageModal.modal('show').find('.modal-content').html(data.html)
|
|
|
|
.find('#repository-column-name')
|
|
|
|
.focus();
|
2019-11-05 22:33:04 +08:00
|
|
|
$manageModal.trigger('columnModal::partialLoaded');
|
2019-10-21 18:40:53 +08:00
|
|
|
|
|
|
|
if (button.data('action') === 'new') {
|
|
|
|
$('[data-column-type="RepositoryTextValue"]').show();
|
2019-10-25 16:39:12 +08:00
|
|
|
$('#new-repo-column-submit').show();
|
|
|
|
} else {
|
2019-11-05 22:33:04 +08:00
|
|
|
columnType = $('#repository-column-data-type').find(':selected').val();
|
2019-10-25 16:39:12 +08:00
|
|
|
$('#update-repo-column-submit').show();
|
2019-11-05 22:33:04 +08:00
|
|
|
$('[data-column-type=' + columnType + ']').show();
|
2019-10-21 18:40:53 +08:00
|
|
|
}
|
|
|
|
}).fail(function() {
|
|
|
|
HelperModule.flashAlertMsg(I18n.t('libraries.repository_columns.no_permissions'), 'danger');
|
2019-10-14 21:27:03 +08:00
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
return {
|
|
|
|
init: () => {
|
2019-10-15 22:11:37 +08:00
|
|
|
if ($('.repository-columns-header').length > 0) {
|
2019-10-21 18:40:53 +08:00
|
|
|
initColumnTypeSelector();
|
|
|
|
initEditSubmitAction();
|
|
|
|
initCreateSubmitAction();
|
|
|
|
initDeleteSubmitAction();
|
|
|
|
initManageColumnModal();
|
2019-10-25 23:38:15 +08:00
|
|
|
RepositoryListColumnType.init();
|
2019-10-15 16:59:43 +08:00
|
|
|
}
|
2019-10-14 21:27:03 +08:00
|
|
|
}
|
|
|
|
};
|
|
|
|
}());
|
|
|
|
|
|
|
|
$(document).on('turbolinks:load', function() {
|
|
|
|
RepositoryColumns.init();
|
|
|
|
});
|