Merge pull request #4320 from aignatov-bio/ai-sci-7048-update-label-templates-toolbar

Update labels index page [SCI-7048]
This commit is contained in:
aignatov-bio 2022-08-08 11:50:03 +02:00 committed by GitHub
commit 6403e2256c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 77 additions and 35 deletions

View file

@ -0,0 +1,8 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="16" height="16" rx="2" fill="#FFE000"/>
<path d="M9.35573 6.50012L10.4277 8.00012L9.35573 9.50012H5.5V6.50012H9.35573Z" stroke="#00A4CE"/>
<path d="M2.86206 6.03356C3.67218 3.96719 5.72174 2.5 8.12212 2.5C10.2516 2.5 12.1049 3.65468 13.0618 5.35803" stroke="#363332"/>
<path d="M13.1251 10.0001C12.3051 12.0487 10.2624 13.5 7.87241 13.5C5.75965 13.5 3.91837 12.3659 2.95312 10.6877" stroke="#363332"/>
<path d="M13.5 2.00012V5.50012H11" stroke="#363332"/>
<path d="M2.5 14.0001V10.5001H5" stroke="#363332"/>
</svg>

After

Width:  |  Height:  |  Size: 624 B

View file

@ -6,9 +6,22 @@
var LABEL_TEMPLATE_TABLE; var LABEL_TEMPLATE_TABLE;
var rowsSelected = []; var rowsSelected = [];
var defaultSelected = false;
var editUrl; function rowsSelectedIDs() {
var setDefaultUrl; return rowsSelected.map(i => i.id);
}
function defaultSelected() {
return rowsSelected.findIndex(v => v.default === 'true') >= 0;
}
function labelFormats() {
let uniqueFormats = rowsSelected.map(i => i.format).filter((v, i, a) => a.indexOf(v) === i);
if (uniqueFormats.length > 1) {
return 'mixed';
}
return uniqueFormats[0];
}
function renderCheckboxHTML(data, type, row) { function renderCheckboxHTML(data, type, row) {
return `<div class="sci-checkbox-container"> return `<div class="sci-checkbox-container">
@ -54,9 +67,9 @@
} }
function initSetDefaultButton() { function initSetDefaultButton() {
$('#setDefaultLabelTemplate').on('click', function() { $('#setZplDefaultLabelTemplate, #setFluicsDefaultLabelTemplate').on('click', function() {
if (rowsSelected.length === 1) { if (rowsSelected.length === 1) {
$.post(setDefaultUrl, function(response) { $.post(rowsSelected[0].setDefaultUrl, function(response) {
reloadTable(); reloadTable();
HelperModule.flashAlertMsg(response.message, 'success'); HelperModule.flashAlertMsg(response.message, 'success');
}).error((response) => { }).error((response) => {
@ -69,7 +82,7 @@
function initDuplicateButton() { function initDuplicateButton() {
$('#duplicateLabelTemplate').on('click', function() { $('#duplicateLabelTemplate').on('click', function() {
if (rowsSelected.length > 0) { if (rowsSelected.length > 0) {
$.post(this.dataset.url, { selected_ids: rowsSelected }, function(response) { $.post(this.dataset.url, { selected_ids: rowsSelectedIDs() }, function(response) {
reloadTable(); reloadTable();
HelperModule.flashAlertMsg(response.message, 'success'); HelperModule.flashAlertMsg(response.message, 'success');
}).error((response) => { }).error((response) => {
@ -88,7 +101,7 @@
function initDeleteButton() { function initDeleteButton() {
$('#confirmLabeleDeletion').on('click', function() { $('#confirmLabeleDeletion').on('click', function() {
if (rowsSelected.length > 0) { if (rowsSelected.length > 0) {
$.post(this.dataset.url, { selected_ids: rowsSelected }, function(response) { $.post(this.dataset.url, { selected_ids: rowsSelectedIDs() }, function(response) {
reloadTable(); reloadTable();
HelperModule.flashAlertMsg(response.message, 'success'); HelperModule.flashAlertMsg(response.message, 'success');
$('#deleteLabelTemplatesModal').modal('hide'); $('#deleteLabelTemplatesModal').modal('hide');
@ -108,11 +121,26 @@
function updateButtons() { function updateButtons() {
if (rowsSelected.length === 0) { if (rowsSelected.length === 0) {
$('.selected-actions').addClass('hidden'); $('.selected-actions').addClass('hidden');
$('.nonselected-actions').removeClass('hidden');
$('.fluics-warning').addClass('hidden');
} else { } else {
$('.fluics-warning').addClass('hidden');
$('.selected-actions').removeClass('hidden'); $('.selected-actions').removeClass('hidden');
$('#editLabelTemplate').attr('disabled', rowsSelected.length > 1); $('.nonselected-actions').addClass('hidden');
$('#deleteLabelTemplate').attr('disabled', defaultSelected); if (labelFormats() === 'ZPL') {
$('#setDefaultLabelTemplate').attr('disabled', (rowsSelected.length > 1 || defaultSelected)); $('#deleteLabelTemplate').toggleClass('hidden', defaultSelected());
$('#setZplDefaultLabelTemplate').toggleClass('hidden', (rowsSelected.length > 1 || defaultSelected()));
$('#setFluicsDefaultLabelTemplate').addClass('hidden');
} else if (labelFormats() === 'Fluics') {
$('#duplicateLabelTemplate').addClass('hidden');
$('#deleteLabelTemplate').addClass('hidden');
$('#setZplDefaultLabelTemplate').addClass('hidden');
$('#setFluicsDefaultLabelTemplate').toggleClass('hidden', (rowsSelected.length > 1 || defaultSelected()));
$('.fluics-warning').toggleClass('hidden', (rowsSelected.length === 1 && !defaultSelected()));
} else {
$('.fluics-warning').removeClass('hidden');
$('.selected-actions').addClass('hidden');
}
} }
} }
@ -152,32 +180,28 @@
} }
} }
function checkDefaultSelection() {
$.each($('.label-template-row .fa-thumbtack'), function(i, defaultLabel) {
let rowId = ($(defaultLabel).closest('.label-template-row').data('id')).toString();
let index = $.inArray(rowId, rowsSelected);
if (index >= 0) {
defaultSelected = true;
return;
}
defaultSelected = false;
});
}
function initRowSelection() { function initRowSelection() {
// Handle clicks on checkbox // Handle clicks on checkbox
$('#label-templates-table').on('change', '.label-row-checkbox', function(ev) { $('#label-templates-table').on('change', '.label-row-checkbox', function(ev) {
var rowId; var rowId;
var index; var index;
var row;
rowId = this.dataset.labelTemplateId; rowId = this.dataset.labelTemplateId;
row = $(this).closest('tr')[0];
// Determine whether row ID is in the list of selected row IDs // Determine whether row ID is in the list of selected row IDs
index = $.inArray(rowId, rowsSelected); index = rowsSelected.findIndex(v => v.id === rowId);
// If checkbox is checked and row ID is not in list of selected row IDs // If checkbox is checked and row ID is not in list of selected row IDs
if (this.checked && index === -1) { if (this.checked && index === -1) {
rowsSelected.push(rowId); rowsSelected.push({
id: rowId,
default: row.dataset.default,
editUrl: row.dataset.editUrl,
setDefaultUrl: row.dataset.setDefaultUrl,
format: row.dataset.format
});
// Otherwise, if checkbox is not checked and row ID is in list of selected row IDs // Otherwise, if checkbox is not checked and row ID is in list of selected row IDs
} else if (!this.checked && index !== -1) { } else if (!this.checked && index !== -1) {
rowsSelected.splice(index, 1); rowsSelected.splice(index, 1);
@ -189,14 +213,7 @@
$(this).closest('.label-template-row').removeClass('selected'); $(this).closest('.label-template-row').removeClass('selected');
} }
if (rowsSelected.length === 1) {
editUrl = $(`.label-template-row[data-id="${rowsSelected[0]}"]`).data('edit-url');
setDefaultUrl = $(`.label-template-row[data-id="${rowsSelected[0]}"]`).data('set-default-url');
}
updateDataTableSelectAllCtrl(); updateDataTableSelectAllCtrl();
checkDefaultSelection();
ev.stopPropagation(); ev.stopPropagation();
updateButtons(); updateButtons();

View file

@ -45,7 +45,9 @@ class LabelTemplateDatatable < CustomDatatable
'recordInfoUrl' => '', 'recordInfoUrl' => '',
'DT_RowAttr': { 'DT_RowAttr': {
'data-edit-url': label_template_path(record), 'data-edit-url': label_template_path(record),
'data-set-default-url': set_default_label_template_path(record) 'data-set-default-url': set_default_label_template_path(record),
'data-default': record.default,
'data-format': record.label_format
}, },
'manage_permission' => @manage_template 'manage_permission' => @manage_template
} }

View file

@ -5,6 +5,11 @@
<i class="fas fa-plus"></i> <i class="fas fa-plus"></i>
<span class="button-text"><%= t('label_templates.index.toolbar.new') %></span> <span class="button-text"><%= t('label_templates.index.toolbar.new') %></span>
</button> </button>
<button title="<%= t('label_templates.index.toolbar.check_for_updates') %>"
class="btn btn-light auto-shrink-button nonselected-actions " id="checkFluicsUpdates">
<%= image_tag 'label_template_icons/fluics_update' %>
<span class="button-text"><%= t('label_templates.index.toolbar.check_for_updates') %></span>
</button>
<div class="btn btn-light hidden selected-actions auto-shrink-button" <div class="btn btn-light hidden selected-actions auto-shrink-button"
title="<%= t('label_templates.index.toolbar.duplicate') %>" title="<%= t('label_templates.index.toolbar.duplicate') %>"
data-url="<%= duplicate_label_templates_path %>" data-url="<%= duplicate_label_templates_path %>"
@ -12,13 +17,20 @@
<i class="fas fa-clone"></i> <i class="fas fa-clone"></i>
<span class="button-text"><%= t('label_templates.index.toolbar.duplicate') %></span> <span class="button-text"><%= t('label_templates.index.toolbar.duplicate') %></span>
</div> </div>
<div class="btn btn-light hidden selected-actions auto-shrink-button" id="setDefaultLabelTemplate" title="<%= t('label_templates.index.toolbar.set_default') %>"> <div class="btn btn-light hidden selected-actions auto-shrink-button" id="setZplDefaultLabelTemplate" title="<%= t('label_templates.index.toolbar.set_zpl_default') %>">
<i class="fas fa-thumbtack"></i> <i class="fas fa-thumbtack"></i>
<span class="button-text"><%= t('label_templates.index.toolbar.set_default') %></span> <span class="button-text"><%= t('label_templates.index.toolbar.set_zpl_default') %></span>
</div>
<div class="btn btn-light hidden selected-actions auto-shrink-button" id="setFluicsDefaultLabelTemplate" title="<%= t('label_templates.index.toolbar.set_fluics_default') %>">
<i class="fas fa-thumbtack"></i>
<span class="button-text"><%= t('label_templates.index.toolbar.set_fluics_default') %></span>
</div> </div>
<div class="btn btn-light hidden selected-actions auto-shrink-button" id="deleteLabelTemplate" title="<%= t('label_templates.index.toolbar.delete') %>"> <div class="btn btn-light hidden selected-actions auto-shrink-button" id="deleteLabelTemplate" title="<%= t('label_templates.index.toolbar.delete') %>">
<i class="fas fa-trash"></i> <i class="fas fa-trash"></i>
<span class="button-text"><%= t('label_templates.index.toolbar.delete') %></span> <span class="button-text"><%= t('label_templates.index.toolbar.delete') %></span>
</div> </div>
<div class="fluics-warning hidden">
<%= t('label_templates.index.toolbar.fluics_warning') %>
</div>
<% end%> <% end%>
</template> </template>

View file

@ -839,10 +839,13 @@ en:
template_set_as_default: 'Successfully set template as default' template_set_as_default: 'Successfully set template as default'
toolbar: toolbar:
new: 'New template' new: 'New template'
check_for_updates: 'Check for updates'
edit: 'Edit' edit: 'Edit'
duplicate: 'Duplicate' duplicate: 'Duplicate'
delete: 'Delete' delete: 'Delete'
set_default: 'Set Default' set_zpl_default: 'Set as default ZPL label'
set_fluics_default: 'Set as default Fluics label'
fluics_warning: 'Built-in FLUICS templates cant be edited, deleted or duplicated'
delete_modal: delete_modal:
title: 'Delete Label template(s)' title: 'Delete Label template(s)'
description: 'Are you sure you want to delete the selected Label template(s)?' description: 'Are you sure you want to delete the selected Label template(s)?'