Check for locked inventory rows when enabling edit, instead of preload [SCI-11135] (#7926)

This commit is contained in:
Martin Artnik 2024-10-04 14:08:46 +02:00 committed by GitHub
parent 9c288c2021
commit a24726ec39
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 35 additions and 9 deletions

View file

@ -317,9 +317,7 @@ var RepositoryDatatable = (function(global) {
checkAvailableColumns();
RepositoryDatatableRowEditor.switchRowToEditMode(row);
changeToEditMode();
RepositoryDatatableRowEditor.switchRowToEditMode(row, changeToEditMode);
});
}
@ -692,6 +690,7 @@ var RepositoryDatatable = (function(global) {
},
rowCallback: function(row, data) {
$(row).attr('data-editable', data.recordEditable);
$(row).attr('data-info-url', data.recordInfoUrl);
$(row).attr('data-manage-stock-url', data.manageStockUrl);
// Get row ID
let rowId = data.DT_RowId;
@ -1003,10 +1002,8 @@ var RepositoryDatatable = (function(global) {
$(TABLE_ID).find('.repository-row-edit-icon').remove();
rowsSelected.forEach(function(rowNumber) {
RepositoryDatatableRowEditor.switchRowToEditMode(TABLE.row('#' + rowNumber));
RepositoryDatatableRowEditor.switchRowToEditMode(TABLE.row('#' + rowNumber), changeToEditMode);
});
changeToEditMode();
})
.on('click', '#assignRepositoryRecords', function(e) {
e.preventDefault();

View file

@ -173,11 +173,17 @@ var RepositoryDatatableRowEditor = (function() {
TABLE.columns.adjust();
}
function switchRowToEditMode(row) {
function enableEditMode(row, isEditable) {
if (!isEditable) {
HelperModule.flashAlertMsg(I18n.t('repositories.table.row_locked'), 'danger');
return false;
}
let $row = $(row.node());
let itemId = row.id();
let formId = `repositoryRowForm${itemId}`;
let requestUrl = $(TABLE.table().node()).data('current-uri');
let rowForm = $(`
<form id="${formId}"
class="${EDIT_FORM_CLASS_NAME} ${GLOBAL_CONSTANTS.HAS_UNSAVED_DATA_CLASS_NAME}"
@ -213,6 +219,26 @@ var RepositoryDatatableRowEditor = (function() {
initAssetCellActions($row);
TABLE.columns.adjust();
return true;
}
function switchRowToEditMode(row, editEnabledCallback) {
// Editable property was already preloaded
if (row.data().editable !== undefined) {
if (enableEditMode(row, row.data().editable)) editEnabledCallback();
return;
}
// Need to fetch editable property
$.ajax({
url: row.data().recordInfoUrl,
type: 'GET',
dataType: 'json',
success: (data) => {
if (enableEditMode(row, data.editable)) editEnabledCallback();
}
});
}
return Object.freeze({

View file

@ -33,7 +33,9 @@ module RepositoryDatatableHelper
unless options[:view_mode] || repository.is_a?(SoftLockedRepository)
row['recordUpdateUrl'] =
Rails.application.routes.url_helpers.repository_repository_row_path(repository, record)
row['recordEditable'] = record.editable?
# if the editable? property will be checked in a separate request, we can default it to true
row['recordEditable'] = options[:omit_editable] ? true : record.editable?
end
row['0'] = record[:row_assigned] if options[:my_module]

View file

@ -6,7 +6,7 @@ json.data do
@repository,
@columns_mappings,
@repository.team,
@datatable_params || {})
(@datatable_params || {}).merge(omit_editable: true))
end
json.recordsFiltered @repository_rows.first ? @repository_rows.first.filtered_count : 0
json.recordsTotal @all_rows_count

View file

@ -6,6 +6,7 @@ json.repository do
json.name @repository.name
json.is_snapshot @repository.is_a?(RepositorySnapshot)
end
json.editable @repository_row.editable?
json.notification @notification
json.update_path update_cell_repository_repository_row_path(@repository, @repository_row)