Implement multiline editing in repositories [SCI-6982]

This commit is contained in:
Martin Artnik 2022-07-18 12:31:04 +02:00
parent b6b1fed7e2
commit 98b3627219
8 changed files with 32 additions and 29 deletions

View file

@ -38,7 +38,7 @@ var ChecklistColumnHelper = (function() {
} }
function initialChecklistEditMode(formId, columnId, cell, values) { function initialChecklistEditMode(formId, columnId, cell, values) {
var select = 'checklist-' + columnId; var select = `checklist-${columnId}-${cell.parent()[0].id}`;
var checklistUrl = $('.repository-column#' + columnId).data('items-url'); var checklistUrl = $('.repository-column#' + columnId).data('items-url');
var $select = checklistSelect(select, checklistUrl, values); var $select = checklistSelect(select, checklistUrl, values);
var $hiddenField = checklistHiddenField(formId, columnId, values); var $hiddenField = checklistHiddenField(formId, columnId, values);

View file

@ -4,7 +4,7 @@
var ListColumnHelper = (function() { var ListColumnHelper = (function() {
function listSelect(select, url, value) { function listSelect(select, url, value) {
var selectedOption = ''; var selectedOption = '';
var selectObject = $(`<select id="${select}" var selectObject = $(`<select id="${select}"
data-placeholder = "${I18n.t('repositories.table.list.select_item')}" data-placeholder = "${I18n.t('repositories.table.list.select_item')}"
data-ajax-url = "${url}" >${selectedOption}</select>`); data-ajax-url = "${url}" >${selectedOption}</select>`);
@ -26,7 +26,7 @@ var ListColumnHelper = (function() {
} }
function initialListEditMode(formId, columnId, cell, value = null) { function initialListEditMode(formId, columnId, cell, value = null) {
var select = 'list-' + columnId; var select = `list-${columnId}-${cell.parent()[0].id}`;
var listUrl = $('.repository-column#' + columnId).data('items-url'); var listUrl = $('.repository-column#' + columnId).data('items-url');
var $select = listSelect(select, listUrl, value); var $select = listSelect(select, listUrl, value);
var $hiddenField = listHiddenField(formId, columnId, value); var $hiddenField = listHiddenField(formId, columnId, value);

View file

@ -4,7 +4,7 @@
var StatusColumnHelper = (function() { var StatusColumnHelper = (function() {
function statusSelect(select, url, value) { function statusSelect(select, url, value) {
var selectedOption = ''; var selectedOption = '';
var selectObject = $(`<select id="${select}" var selectObject = $(`<select id="${select}"
data-placeholder = "${I18n.t('repositories.table.status.set_status')}" data-placeholder = "${I18n.t('repositories.table.status.set_status')}"
data-ajax-url = "${url}" ></select>`); data-ajax-url = "${url}" ></select>`);
@ -26,7 +26,7 @@ var StatusColumnHelper = (function() {
} }
function initialStatusEditMode(formId, columnId, cell, value = null) { function initialStatusEditMode(formId, columnId, cell, value = null) {
var select = 'status-list-' + columnId; var select = `status-list-${columnId}-${cell.parent()[0].id}`;
var listUrl = $('.repository-column#' + columnId).data('items-url'); var listUrl = $('.repository-column#' + columnId).data('items-url');
var $select = statusSelect(select, listUrl, value); var $select = statusSelect(select, listUrl, value);
var $hiddenField = statusHiddenField(formId, columnId, value); var $hiddenField = statusHiddenField(formId, columnId, value);

View file

@ -71,11 +71,7 @@ var RepositoryDatatable = (function(global) {
$('#editDeleteCopy').hide(); $('#editDeleteCopy').hide();
$('#toolbarPrintLabel').hide(); $('#toolbarPrintLabel').hide();
} else { } else {
if (rowsSelected.length === 1) { $('#editRepositoryRecord').prop('disabled', false);
$('#editRepositoryRecord').prop('disabled', false);
} else {
$('#editRepositoryRecord').prop('disabled', true);
}
$('#exportRepositoriesButton').removeClass('disabled'); $('#exportRepositoriesButton').removeClass('disabled');
$('#archiveRepositoryRecordsButton').prop('disabled', false); $('#archiveRepositoryRecordsButton').prop('disabled', false);
$('#copyRepositoryRecords').prop('disabled', false); $('#copyRepositoryRecords').prop('disabled', false);
@ -142,10 +138,8 @@ var RepositoryDatatable = (function(global) {
function changeToEditMode() { function changeToEditMode() {
currentMode = 'editMode'; currentMode = 'editMode';
// Table specific stuff
TABLE.button(0).enable(false);
clearRowSelection(); clearRowSelection();
$(TABLE_WRAPPER_ID).find('tr:not(.editing)').addClass('blocked');
updateButtons(); updateButtons();
} }
@ -262,9 +256,8 @@ var RepositoryDatatable = (function(global) {
checkAvailableColumns(); checkAvailableColumns();
$(TABLE_ID).find('.repository-row-edit-icon').remove();
RepositoryDatatableRowEditor.switchRowToEditMode(row); RepositoryDatatableRowEditor.switchRowToEditMode(row);
changeToEditMode(); changeToEditMode();
}); });
} }
@ -542,6 +535,17 @@ var RepositoryDatatable = (function(global) {
$('#repository-table_info').append('<span id="selected_info"></span>'); $('#repository-table_info').append('<span id="selected_info"></span>');
$('#selected_info').html(' (' + rowsSelected.length + ' entries selected)'); $('#selected_info').html(' (' + rowsSelected.length + ' entries selected)');
checkArchivedColumnsState(); checkArchivedColumnsState();
// Hide edit button if not all selected rows are on the current page
let visibleRowIds = $(
`#repository-table-${$(TABLE_ID).data('repository-id')} tbody tr`
).toArray().map((r) => parseInt(r.id, 10));
if (rowsSelected.every(r => visibleRowIds.includes(r))) {
$('#editRepositoryRecord').show();
} else {
$('#editRepositoryRecord').hide();
}
}, },
preDrawCallback: function() { preDrawCallback: function() {
var archived = $('.repository-show').hasClass('archived'); var archived = $('.repository-show').hasClass('archived');
@ -769,15 +773,12 @@ var RepositoryDatatable = (function(global) {
.on('click', '#editRepositoryRecord', function() { .on('click', '#editRepositoryRecord', function() {
checkAvailableColumns(); checkAvailableColumns();
if (rowsSelected.length !== 1) {
return;
}
let row = TABLE.row('#' + rowsSelected[0]);
$(TABLE_ID).find('.repository-row-edit-icon').remove(); $(TABLE_ID).find('.repository-row-edit-icon').remove();
RepositoryDatatableRowEditor.switchRowToEditMode(row); rowsSelected.forEach(function(rowNumber) {
RepositoryDatatableRowEditor.switchRowToEditMode(TABLE.row('#' + rowNumber));
});
changeToEditMode(); changeToEditMode();
adjustTableHeader(); adjustTableHeader();
}) })

View file

@ -39,7 +39,6 @@ var SmartAnnotation = (function() {
function generateFilterMenu() { function generateFilterMenu() {
var menu = ''; var menu = '';
$.ajax({ $.ajax({
async: false,
dataType: 'json', dataType: 'json',
url: $(document.body).attr('data-atwho-repositories-url'), url: $(document.body).attr('data-atwho-repositories-url'),
success: function(data) { success: function(data) {

View file

@ -345,6 +345,13 @@
opacity: 1; opacity: 1;
} }
} }
&.editing {
.assigned-column .repository-row-edit-icon {
opacity: 0;
pointer-events: none;
}
}
} }
.editing { .editing {
@ -363,10 +370,6 @@
tr:hover { tr:hover {
.assigned-column { .assigned-column {
.repository-row-edit-icon {
opacity: 0;
}
.assign-counter-container { .assign-counter-container {
background-color: transparent; background-color: transparent;
} }

View file

@ -3,7 +3,7 @@
<%if can_update_repository_rows?(@repository) %> <%if can_update_repository_rows?(@repository) %>
<button type="button" title="<%= t('repositories.show.button_tooltip.edit') %>" <button type="button" title="<%= t('repositories.show.button_tooltip.edit') %>"
class="btn btn-light editAdd auto-shrink-button" class="btn btn-light editAdd auto-shrink-button"
id="editRepositoryRecord" disabled data-view-mode="active"> id="editRepositoryRecord" data-view-mode="active">
<span class="fas fa-pencil-alt"></span> <span class="fas fa-pencil-alt"></span>
<span class="button-text"><%= t("repositories.edit_record") %></span> <span class="button-text"><%= t("repositories.edit_record") %></span>
</button> </button>

View file

@ -1699,7 +1699,7 @@ en:
create: create:
success_flash: "Successfully added item <strong>%{record}</strong> to inventory <strong>%{repository}</strong>" success_flash: "Successfully added item <strong>%{record}</strong> to inventory <strong>%{repository}</strong>"
update: update:
success_flash: "Successfully updated item <strong>%{record}</strong> in inventory <strong>%{repository}</strong>" success_flash: "Inventory items were successfully updated."
destroy: destroy:
success_flash: "%{records_number} item(s) successfully deleted." success_flash: "%{records_number} item(s) successfully deleted."
contains_other_records_flash: "%{records_number} item(s) successfully deleted. %{other_records_number} of the selected item(s) were created by other users and were not deleted." contains_other_records_flash: "%{records_number} item(s) successfully deleted. %{other_records_number} of the selected item(s) were created by other users and were not deleted."