From 51cb951e067402a63b14e0d932aa8c9b79b506ed Mon Sep 17 00:00:00 2001 From: Anton Date: Mon, 8 Aug 2022 10:28:17 +0200 Subject: [PATCH] Update labels index page [SCI-7048] --- .../label_template_icons/fluics_update.svg | 8 ++ .../label_templates_datatable.js | 79 +++++++++++-------- app/datatables/label_template_datatable.rb | 4 +- app/models/label_template.rb | 2 +- .../label_templates/_index_toolbar.html.erb | 16 +++- config/locales/en.yml | 5 +- 6 files changed, 78 insertions(+), 36 deletions(-) create mode 100644 app/assets/images/label_template_icons/fluics_update.svg diff --git a/app/assets/images/label_template_icons/fluics_update.svg b/app/assets/images/label_template_icons/fluics_update.svg new file mode 100644 index 000000000..63218a50b --- /dev/null +++ b/app/assets/images/label_template_icons/fluics_update.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/assets/javascripts/label_templates/label_templates_datatable.js b/app/assets/javascripts/label_templates/label_templates_datatable.js index 23f376f7e..91723bb41 100644 --- a/app/assets/javascripts/label_templates/label_templates_datatable.js +++ b/app/assets/javascripts/label_templates/label_templates_datatable.js @@ -6,9 +6,22 @@ var LABEL_TEMPLATE_TABLE; var rowsSelected = []; - var defaultSelected = false; - var editUrl; - var setDefaultUrl; + + function rowsSelectedIDs() { + 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) { return `
@@ -54,9 +67,9 @@ } function initSetDefaultButton() { - $('#setDefaultLabelTemplate').on('click', function() { + $('#setZplDefaultLabelTemplate, #setFluicsDefaultLabelTemplate').on('click', function() { if (rowsSelected.length === 1) { - $.post(setDefaultUrl, function(response) { + $.post(rowsSelected[0].setDefaultUrl, function(response) { reloadTable(); HelperModule.flashAlertMsg(response.message, 'success'); }).error((response) => { @@ -69,7 +82,7 @@ function initDuplicateButton() { $('#duplicateLabelTemplate').on('click', function() { if (rowsSelected.length > 0) { - $.post(this.dataset.url, { selected_ids: rowsSelected }, function(response) { + $.post(this.dataset.url, { selected_ids: rowsSelectedIDs() }, function(response) { reloadTable(); HelperModule.flashAlertMsg(response.message, 'success'); }).error((response) => { @@ -88,7 +101,7 @@ function initDeleteButton() { $('#confirmLabeleDeletion').on('click', function() { if (rowsSelected.length > 0) { - $.post(this.dataset.url, { selected_ids: rowsSelected }, function(response) { + $.post(this.dataset.url, { selected_ids: rowsSelectedIDs() }, function(response) { reloadTable(); HelperModule.flashAlertMsg(response.message, 'success'); $('#deleteLabelTemplatesModal').modal('hide'); @@ -108,11 +121,26 @@ function updateButtons() { if (rowsSelected.length === 0) { $('.selected-actions').addClass('hidden'); + $('.nonselected-actions').removeClass('hidden'); + $('.fluics-warning').addClass('hidden'); } else { + $('.fluics-warning').addClass('hidden'); $('.selected-actions').removeClass('hidden'); - $('#editLabelTemplate').attr('disabled', rowsSelected.length > 1); - $('#deleteLabelTemplate').attr('disabled', defaultSelected); - $('#setDefaultLabelTemplate').attr('disabled', (rowsSelected.length > 1 || defaultSelected)); + $('.nonselected-actions').addClass('hidden'); + if (labelFormats() === 'ZPL') { + $('#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() { // Handle clicks on checkbox $('#label-templates-table').on('change', '.label-row-checkbox', function(ev) { var rowId; var index; + var row; rowId = this.dataset.labelTemplateId; + row = $(this).closest('tr')[0]; // 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 (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 } else if (!this.checked && index !== -1) { rowsSelected.splice(index, 1); @@ -189,14 +213,7 @@ $(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(); - checkDefaultSelection(); ev.stopPropagation(); updateButtons(); diff --git a/app/datatables/label_template_datatable.rb b/app/datatables/label_template_datatable.rb index 55e40894b..202eaceba 100644 --- a/app/datatables/label_template_datatable.rb +++ b/app/datatables/label_template_datatable.rb @@ -45,7 +45,9 @@ class LabelTemplateDatatable < CustomDatatable 'recordInfoUrl' => '', 'DT_RowAttr': { '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 } diff --git a/app/models/label_template.rb b/app/models/label_template.rb index 7a0c1bd9f..788b93dc4 100644 --- a/app/models/label_template.rb +++ b/app/models/label_template.rb @@ -40,7 +40,7 @@ class LabelTemplate < ApplicationRecord private def ensure_single_default_template! - if default && self.class.where(team_id: team_id, default: true, language_type: language_type) + if default && self.class.where(team_id: team_id, default: true, type: type) .where.not(id: id).any? errors.add(:default, I18n.t('activerecord.errors.models.label_template.attributes.default.already_exist')) end diff --git a/app/views/label_templates/_index_toolbar.html.erb b/app/views/label_templates/_index_toolbar.html.erb index 00ac0e79a..18ca41108 100644 --- a/app/views/label_templates/_index_toolbar.html.erb +++ b/app/views/label_templates/_index_toolbar.html.erb @@ -5,6 +5,11 @@ <%= t('label_templates.index.toolbar.new') %> + -