From a24726ec3924d30c564c48d2279791c44fdb7ec7 Mon Sep 17 00:00:00 2001 From: Martin Artnik <85488244+artoscinote@users.noreply.github.com> Date: Fri, 4 Oct 2024 14:08:46 +0200 Subject: [PATCH] Check for locked inventory rows when enabling edit, instead of preload [SCI-11135] (#7926) --- .../repositories/repository_datatable.js | 9 ++---- .../javascripts/repositories/row_editor.js | 28 ++++++++++++++++++- app/helpers/repository_datatable_helper.rb | 4 ++- app/views/repository_rows/index.json.jbuilder | 2 +- app/views/repository_rows/show.json.jbuilder | 1 + 5 files changed, 35 insertions(+), 9 deletions(-) diff --git a/app/assets/javascripts/repositories/repository_datatable.js b/app/assets/javascripts/repositories/repository_datatable.js index 9850f40af..933bed39a 100644 --- a/app/assets/javascripts/repositories/repository_datatable.js +++ b/app/assets/javascripts/repositories/repository_datatable.js @@ -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(); diff --git a/app/assets/javascripts/repositories/row_editor.js b/app/assets/javascripts/repositories/row_editor.js index 48a9517c8..490b6f63d 100644 --- a/app/assets/javascripts/repositories/row_editor.js +++ b/app/assets/javascripts/repositories/row_editor.js @@ -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 = $(`
{ + if (enableEditMode(row, data.editable)) editEnabledCallback(); + } + }); } return Object.freeze({ diff --git a/app/helpers/repository_datatable_helper.rb b/app/helpers/repository_datatable_helper.rb index 7744db911..e3348d31b 100644 --- a/app/helpers/repository_datatable_helper.rb +++ b/app/helpers/repository_datatable_helper.rb @@ -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] diff --git a/app/views/repository_rows/index.json.jbuilder b/app/views/repository_rows/index.json.jbuilder index 34ccad523..99493059e 100644 --- a/app/views/repository_rows/index.json.jbuilder +++ b/app/views/repository_rows/index.json.jbuilder @@ -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 diff --git a/app/views/repository_rows/show.json.jbuilder b/app/views/repository_rows/show.json.jbuilder index 6443e4006..a2f4ac3ce 100644 --- a/app/views/repository_rows/show.json.jbuilder +++ b/app/views/repository_rows/show.json.jbuilder @@ -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)