Merge pull request #4260 from artoscinote/ma_SCI_6982

Implement multiline editing in repositories [SCI-6982][SCI-6983]
This commit is contained in:
aignatov-bio 2022-11-10 11:07:30 +01:00 committed by GitHub
commit 2c17c05c7d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 97 additions and 30 deletions

View file

@ -38,7 +38,7 @@ var ChecklistColumnHelper = (function() {
}
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 $select = checklistSelect(select, checklistUrl, values);
var $hiddenField = checklistHiddenField(formId, columnId, values);

View file

@ -4,7 +4,7 @@
var ListColumnHelper = (function() {
function listSelect(select, url, value) {
var selectedOption = '';
var selectObject = $(`<select id="${select}"
var selectObject = $(`<select id="${select}"
data-placeholder = "${I18n.t('repositories.table.list.select_item')}"
data-ajax-url = "${url}" >${selectedOption}</select>`);
@ -26,7 +26,7 @@ var ListColumnHelper = (function() {
}
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 $select = listSelect(select, listUrl, value);
var $hiddenField = listHiddenField(formId, columnId, value);

View file

@ -4,7 +4,7 @@
var StatusColumnHelper = (function() {
function statusSelect(select, url, value) {
var selectedOption = '';
var selectObject = $(`<select id="${select}"
var selectObject = $(`<select id="${select}"
data-placeholder = "${I18n.t('repositories.table.status.set_status')}"
data-ajax-url = "${url}" ></select>`);
@ -26,7 +26,7 @@ var StatusColumnHelper = (function() {
}
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 $select = statusSelect(select, listUrl, value);
var $hiddenField = statusHiddenField(formId, columnId, value);

View file

@ -46,8 +46,12 @@ var RepositoryDatatable = (function(global) {
function updateButtons() {
if (currentMode === 'viewMode') {
$(TABLE_WRAPPER_ID).removeClass('editing');
$('.repository-save-changes-link').off('click');
$('.repository-edit-overlay').hide();
$('#saveCancel').hide();
$('.manage-repo-column-index').prop('disabled', false);
$('#shareRepoBtn').removeClass('disabled');
$('#viewSwitchButton').removeClass('disabled');
$('#addRepositoryRecord').prop('disabled', false);
$('.dataTables_length select').prop('disabled', false);
$('#repository-acitons-dropdown').prop('disabled', false);
@ -71,11 +75,7 @@ var RepositoryDatatable = (function(global) {
$('#editDeleteCopy').hide();
$('#toolbarPrintLabel').hide();
} else {
if (rowsSelected.length === 1) {
$('#editRepositoryRecord').prop('disabled', false);
} else {
$('#editRepositoryRecord').prop('disabled', true);
}
$('#editRepositoryRecord').prop('disabled', false);
$('#exportRepositoriesButton').removeClass('disabled');
$('#archiveRepositoryRecordsButton').prop('disabled', false);
$('#copyRepositoryRecords').prop('disabled', false);
@ -92,6 +92,9 @@ var RepositoryDatatable = (function(global) {
}
} else if (currentMode === 'editMode') {
$(TABLE_WRAPPER_ID).addClass('editing');
$('.repository-save-changes-link').on('click', function() {
$('#saveRecord').click();
});
$('#importRecordsButton').hide();
$('#editDeleteCopy').hide();
$('#addRepositoryRecord').hide();
@ -101,6 +104,8 @@ var RepositoryDatatable = (function(global) {
}
$('#saveCancel').show();
$('.manage-repo-column-index').prop('disabled', true);
$('#shareRepoBtn').addClass('disabled');
$('#viewSwitchButton').addClass('disabled');
$('#repository-acitons-dropdown').prop('disabled', true);
$('.dataTables_length select').prop('disabled', true);
$('#addRepositoryRecord').prop('disabled', true);
@ -113,6 +118,7 @@ var RepositoryDatatable = (function(global) {
$('.repository-row-selector').prop('disabled', true);
$('.dataTables_filter input').prop('disabled', true);
$('#toolbarPrintLabel').hide();
$('.repository-edit-overlay').show();
}
}
@ -140,10 +146,8 @@ var RepositoryDatatable = (function(global) {
function changeToEditMode() {
currentMode = 'editMode';
// Table specific stuff
TABLE.button(0).enable(false);
clearRowSelection();
$(TABLE_WRAPPER_ID).find('tr:not(.editing)').addClass('blocked');
updateButtons();
}
@ -259,9 +263,8 @@ var RepositoryDatatable = (function(global) {
checkAvailableColumns();
$(TABLE_ID).find('.repository-row-edit-icon').remove();
RepositoryDatatableRowEditor.switchRowToEditMode(row);
changeToEditMode();
});
}
@ -562,6 +565,19 @@ var RepositoryDatatable = (function(global) {
// Show number of selected rows near pages info
$('#repository-table_info').append('<span id="selected_info"></span>');
$('#selected_info').html(' (' + rowsSelected.length + ' entries selected)');
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();
}
if ($('.repository-show').hasClass('archived')) {
TABLE.columns([6, 7]).visible(true);
}
@ -795,15 +811,12 @@ var RepositoryDatatable = (function(global) {
.on('click', '#editRepositoryRecord', function() {
checkAvailableColumns();
if (rowsSelected.length !== 1) {
return;
}
let row = TABLE.row('#' + rowsSelected[0]);
$(TABLE_ID).find('.repository-row-edit-icon').remove();
RepositoryDatatableRowEditor.switchRowToEditMode(row);
rowsSelected.forEach(function(rowNumber) {
RepositoryDatatableRowEditor.switchRowToEditMode(TABLE.row('#' + rowNumber));
});
changeToEditMode();
adjustTableHeader();
})

View file

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

View file

@ -541,3 +541,47 @@
}
}
}
.repository-table {
.repository-edit-overlay {
background: $color-white;
color: $color-silver-chalice;
display: none;
z-index: 1000;
.repository-save-changes-link {
cursor: pointer;
}
}
.repository-edit-overlay--toolbar {
height: 3em;
line-height: 2em;
padding: .5em 1em .5em .5em;
position: absolute;
right: 0;
text-align: right;
top: 2em;
width: 50%;
}
.repository-edit-overlay--pagination {
bottom: 0;
height: 5em;
line-height: 5em;
padding: .5em;
position: fixed;
text-align: center;
width: calc(100% - var(--repository-sidebar-margin));
hr {
margin-top: -2.5em;
}
span {
background: $color-white;
display: inline-block;
padding: 0 .5em;
}
}
}

View file

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

View file

@ -66,4 +66,8 @@
</thead>
<tbody></tbody>
</table>
<div class="repository-edit-overlay repository-edit-overlay--pagination">
<span><%= t('repositories.pagination_edit_overlay_html') %></span>
<hr>
</div>
</div>

View file

@ -1,4 +1,7 @@
<template id="repositoryToolbar">
<div class="repository-edit-overlay repository-edit-overlay--toolbar">
<%= t('repositories.toolbar_edit_overlay_html') %>
</div>
<!-- LEFT TOOLBAR BLOCK -->
<div class="toolbar-left-block">
<% if @repository.active? %>

View file

@ -3,7 +3,7 @@
<% if can_manage_repository_rows?(@repository) %>
<button type="button" title="<%= t('repositories.show.button_tooltip.edit') %>"
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="button-text"><%= t("repositories.edit_record") %></span>
</button>

View file

@ -1760,7 +1760,8 @@ en:
errors:
too_long: "Item name is too long (maximum is %{max_length} characters)"
is_empty: "Item name should be filled"
pagination_edit_overlay_html: "Please <a class=\"repository-save-changes-link\">save your changes</a> before you go to another page"
toolbar_edit_overlay_html: "Please <a class=\"repository-save-changes-link\">save your changes</a> first before using filters"
add_new_record: "New item"
parse_sheet:
help_text: "Match the columns of your uploaded file with already existing columns in database."
@ -1838,7 +1839,7 @@ en:
create:
success_flash: "Successfully added item <strong>%{record}</strong> to inventory <strong>%{repository}</strong>"
update:
success_flash: "Successfully updated item <strong>%{record}</strong> in inventory <strong>%{repository}</strong>"
success_flash: "Inventory items were successfully updated."
destroy:
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."