scinote-web/app/assets/javascripts/repositories/index.js
Soufiane b254f5614b
Inventory export FE [SCI-6546] (#5608)
* Implement the front-end part of inventory export functionality [SCI-6546]

- Add the export button to the action toolbar
- Create new modal and link it to the export repository action
- Update the global export limit counter

* Remove load_repository and check_view_permission for export_repositories [SCI-6546]
2023-06-16 10:48:39 +02:00

193 lines
7.3 KiB
JavaScript

/* global I18n animateSpinner HelperModule
DataTableHelpers DataTableCheckboxes notTurbolinksPreview */
/* eslint-disable no-param-reassign */
(function() {
'use strict';
var REPOSITORIES_TABLE;
var CHECKBOX_SELECTOR;
function updateActionButtons() {
if (window.actionToolbarComponent) {
window.actionToolbarComponent.fetchActions({ repository_ids: CHECKBOX_SELECTOR.selectedRows });
$('.dataTables_scrollBody').css('padding-bottom', `${CHECKBOX_SELECTOR.selectedRows.length > 0 ? 68 : 0}px`);
}
var rowsCount = CHECKBOX_SELECTOR.selectedRows.length;
var row;
$('#renameRepoBtn').attr('href', '#');
$('#deleteRepoBtn').attr('href', '#');
$('#copyRepoBtn').attr('href', '#');
switch (rowsCount) {
case 0:
$('.main-actions [data-action-mode="single"]').addClass('disabled hidden');
$('.main-actions [data-action-mode="multiple"]').addClass('disabled hidden');
break;
case 1:
row = $('#repositoriesList').find('tr#' + CHECKBOX_SELECTOR.selectedRows[0]);
$('.main-actions [data-action-mode="single"]').removeClass('disabled hidden');
$('.main-actions [data-action-mode="multiple"]').removeClass('disabled hidden');
$('#renameRepoBtn').attr('href', row.data('rename-modal-url'));
$('#deleteRepoBtn').attr('href', row.data('delete-modal-url'));
$('#copyRepoBtn').attr('href', row.data('copy-modal-url'));
break;
default:
$('.main-actions [data-action-mode="single"]').removeClass('hidden').addClass('disabled');
$('.main-actions [data-action-mode="multiple"]').removeClass('disabled hidden');
}
}
function initRepositoriesDataTable(tableContainer, archived = false) {
var tableTemplate = $('#RepositoriesListTable').html();
$.get($(tableTemplate).data('source'), { archived: archived }, function(data) {
if (REPOSITORIES_TABLE) REPOSITORIES_TABLE.destroy();
CHECKBOX_SELECTOR = null;
$('.content-body').html(tableTemplate);
REPOSITORIES_TABLE = $(tableContainer).DataTable({
aaData: data,
dom: "R<'main-actions hidden'<'toolbar'><'filter-container'f>>t<'pagination-row hidden'<'pagination-info'li><'pagination-actions'p>>",
processing: true,
stateSave: true,
pageLength: 25,
colReorder: {
enable: false
},
sScrollX: '100%',
sScrollXInner: '100%',
order: [[1, 'asc']],
destroy: true,
language: {
emptyTable: archived ? I18n.t('repositories.index.no_archived_inventories') : I18n.t('repositories.index.no_inventories'),
zeroRecords: archived ? I18n.t('repositories.index.no_archived_inventories_matched') : I18n.t('repositories.index.no_inventories_matched')
},
columnDefs: [{
targets: 0,
visible: !$('.repositories-index').data('readonly'),
searchable: false,
orderable: false,
render: function() {
return `<div class="sci-checkbox-container">
<input class='repository-row-selector sci-checkbox' type='checkbox'>
<span class='sci-checkbox-label'></span>
</div>`;
}
}, {
targets: 1,
className: 'item-name',
render: function(value, type, row) {
return `<a href="${row.repositoryUrl}">${value}</a>`;
}
}, {
targets: 5,
render: {
_: 'display',
sort: 'sort'
}
}, {
targets: 7,
visible: archived,
render: {
_: 'display',
sort: 'sort'
}
}, {
targets: 8,
visible: archived
},
{
visible: true,
searchable: false,
data: 'stock',
render: {
_: 'display',
sort: 'sort'
}
}],
fnInitComplete: function(e) {
initActionToolbar();
window.actionToolbarComponent.setReloadCallback(() =>
initRepositoriesDataTable('#repositoriesList', archived));
window.actionToolbarComponent.setBottomOffset(68);
var dataTableWrapper = $(e.nTableWrapper);
CHECKBOX_SELECTOR = new DataTableCheckboxes(dataTableWrapper, {
checkboxSelector: '.repository-row-selector',
selectAllSelector: '.select-all-checkbox',
onChanged: function() {
updateActionButtons();
}
});
updateActionButtons();
DataTableHelpers.initLengthAppearance(dataTableWrapper);
DataTableHelpers.initSearchField(dataTableWrapper, I18n.t('repositories.index.filter_inventory'));
$('.content-body .toolbar').html($('#repositoriesListButtons').html());
dataTableWrapper.find('.main-actions, .pagination-row').removeClass('hidden');
$('#createRepoBtn').initSubmitModal('#create-repo-modal', 'repository');
$('#deleteRepoBtn').initSubmitModal('#delete-repo-modal', 'repository');
$('#renameRepoBtn').initSubmitModal('#rename-repo-modal', 'repository');
$('#copyRepoBtn').initSubmitModal('#copy-repo-modal', 'repository');
},
drawCallback: function() {
if (CHECKBOX_SELECTOR) CHECKBOX_SELECTOR.checkSelectAllStatus();
},
rowCallback: function(row) {
let $row = $(row);
let checkbox = $row.find('.repository-row-selector');
if ($row.attr('data-shared') === 'true') {
checkbox.attr('disabled', 'disabled');
}
if (CHECKBOX_SELECTOR) CHECKBOX_SELECTOR.checkRowStatus(row);
},
stateLoadParams: function(_, state) {
state.search.search = '';
}
});
});
}
$('#wrapper').on('sideBar::hidden sideBar::shown', function() {
if (REPOSITORIES_TABLE) {
REPOSITORIES_TABLE.columns.adjust();
}
});
$(document).on('shown.bs.modal', function() {
var inputField = $('#repository_name');
var value = inputField.val();
inputField.focus().val('').val(value);
}).on('shown.bs.modal', '#export-repositories-modal', function() {
const firstDescription = $(this).find('.description-p1');
const teamName = firstDescription.data('team-name');
const exportButton = $(this).find('#export-repositories-modal-submit');
const exportURL = exportButton.data('export-url');
firstDescription.html(I18n.t(
'repositories.index.modal_export.description_p1_html',
{ team_name: teamName, repositories_count: CHECKBOX_SELECTOR.selectedRows.length }
));
exportButton.on('click', function() {
$.ajax({
url: exportURL,
method: 'POST',
data: { repository_ids: CHECKBOX_SELECTOR.selectedRows },
success: function(data) {
HelperModule.flashAlertMsg(data.message, 'success');
CHECKBOX_SELECTOR.clearSelection();
$('#export-repositories-modal').modal('hide');
},
error: function(data) {
HelperModule.flashAlertMsg(data.responseJSON.message, 'danger');
}
});
});
});
$('.create-new-repository').initSubmitModal('#create-repo-modal', 'repository');
if (notTurbolinksPreview()) {
initRepositoriesDataTable('#repositoriesList', $('.repositories-index').hasClass('archived'));
}
}());