From 7bf73984c460cb13bba44fb74bc23af75e4cb3b6 Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Mon, 30 Oct 2017 09:55:03 +0100 Subject: [PATCH] Fixed issue #1595 - Unable to sort overview by priority. --- .../_application_controller_table.coffee | 31 +-- .../app/models/_application_model.coffee | 4 +- public/assets/tests/table_extended.js | 227 +++++++++++++++++- 3 files changed, 244 insertions(+), 18 deletions(-) diff --git a/app/assets/javascripts/app/controllers/_application_controller_table.coffee b/app/assets/javascripts/app/controllers/_application_controller_table.coffee index 1d5b0684e..21fcab3e9 100644 --- a/app/assets/javascripts/app/controllers/_application_controller_table.coffee +++ b/app/assets/javascripts/app/controllers/_application_controller_table.coffee @@ -235,9 +235,9 @@ class App.ControllerTable extends App.Controller removedRows = _.difference(@currentRows, newRows) addedRows = _.difference(newRows, @currentRows) - #console.log('newRows', newRows) - #console.log('removedRows', removedRows) - #console.log('addedRows', addedRows) + @log 'debug', 'table newRows', newRows + @log 'debug', 'table removedRows', removedRows + @log 'debug', 'table addedRows', addedRows # if only rows are removed if (!_.isEmpty(addedRows) || !_.isEmpty(removedRows)) && addedRows.length < 10 && removedRows.length < 15 && removedRows.length < newRows.length && !_.isEmpty(newRows) @@ -267,24 +267,24 @@ class App.ControllerTable extends App.Controller else @$("tbody > tr:nth-child(#{position})").after(newCurrentRows[position]) @currentRows = newCurrentRows - #console.log('fullRender.contentRemoved', removePositions, addPositions) + @log 'debug', 'table.fullRender.contentRemoved', removePositions, addPositions @renderPager(@el, true) return ['fullRender.contentRemoved', removePositions, addPositions] if newRows.length isnt @currentRows.length result = ['fullRender.lenghtChanged', @currentRows.length, newRows.length] @renderTableFull(newRows) - #console.log('result', result) + @log 'debug', 'table.fullRender.lenghtChanged', result return result # compare rows result = @_isSame(newRows, @currentRows) if result isnt true @renderTableFull(newRows) - #console.log('result', "fullRender.contentChanged|row(#{result})") + @log 'debug', "table.fullRender.contentChanged|row(#{result})" return ['fullRender.contentChanged', result] - #console.log('result', 'noChanges') + @log 'debug', 'table.noChanges' return ['noChanges'] renderEmptyList: => @@ -293,7 +293,7 @@ class App.ControllerTable extends App.Controller ) renderTableFull: (rows) => - #console.log('renderTableFull', @orderBy, @orderDirection, @objects) + @log 'debug', 'table.renderTableFull', @orderBy, @orderDirection @tableHeaders() @sortList() bulkIds = @getBulkSelected() @@ -499,9 +499,8 @@ class App.ControllerTable extends App.Controller orderBy = @customOrderBy || @orderBy orderDirection = @customOrderDirection || @orderDirection - #console.log('LLL', @lastOrderBy, @orderBy, @lastOrderDirection, @orderDirection, @overviewAttributes, @lastOverview) if @headers && @lastOrderBy is orderBy && @lastOrderDirection is orderDirection && !@tableHeadersHasChanged() - #console.log('tableHeaders: same overviewAttributes just return headers', @headers) + @log 'debug', 'table.Headers: same overviewAttributes just return headers', @headers return ['headers are the same', @headers] @lastOverview = @overviewAttributes @@ -582,7 +581,7 @@ class App.ControllerTable extends App.Controller @columnsLength = @headers.length if @checkbox || @radio @columnsLength++ - #console.log('tableHeaders: new headers', @headers) + @log 'debug', 'table.Headers: new headers', @headers ['new headers', @headers] setMaxPage: => @@ -600,8 +599,8 @@ class App.ControllerTable extends App.Controller orderBy = @customOrderBy || @orderBy orderDirection = @customOrderDirection || @orderDirection - #console.log('order', @orderBy, @orderDirection) - #console.log('customOrder', @customOrderBy, @customOrderDirection) + @log 'debug', 'table.order', @orderBy, @orderDirection + @log 'debug', 'table.customOrder', @customOrderBy, @customOrderDirection return if _.isEmpty(orderBy) && _.isEmpty(@groupBy) @@ -609,9 +608,10 @@ class App.ControllerTable extends App.Controller @lastOrderDirection = orderDirection @lastOrderBy = orderBy + localObjects is undefined if orderBy for header in @headers - if header.name is orderBy || "#{header.name}_id" is orderBy + if header.name is orderBy || "#{header.name}_id" is orderBy || header.name is "#{orderBy}_id" localObjects = _.sortBy( @objects (item) -> @@ -649,7 +649,7 @@ class App.ControllerTable extends App.Controller # in case order by is not in show column, use orderBy attribute if !localObjects for attributeName, attribute of @attributesList - if attributeName is orderBy || "#{attributeName}_id" is orderBy + if attributeName is orderBy || "#{attributeName}_id" is orderBy || attributeName is "#{orderBy}_id" # order by localObjects = _.sortBy( @@ -722,6 +722,7 @@ class App.ControllerTable extends App.Controller localObjects = localObjects.concat groupObjects[group] groupObjects[group] = [] # release old array + return if localObjects is undefined @objects = localObjects @lastSortedobjects = localObjects diff --git a/app/assets/javascripts/app/models/_application_model.coffee b/app/assets/javascripts/app/models/_application_model.coffee index b6a3e62ce..cf41a2c23 100644 --- a/app/assets/javascripts/app/models/_application_model.coffee +++ b/app/assets/javascripts/app/models/_application_model.coffee @@ -196,7 +196,7 @@ set new attributes of model (remove already available attributes) for attribute in attributes App[@.className].attributes.push attribute.name attributesNew.push attribute - App[ @.className ].configure_attributes = attributesNew + App[@.className].configure_attributes = attributesNew ### @@ -226,7 +226,7 @@ set new attributes of model (remove already available attributes) @attributesGet: (screen = undefined, attributes = false, noDefaultAttributes = false) -> if !attributes - attributes = clone(App[ @.className ].configure_attributes, true) + attributes = clone(App[@.className].configure_attributes, true) else attributes = clone(attributes, true) diff --git a/public/assets/tests/table_extended.js b/public/assets/tests/table_extended.js index f1c3015ff..63a8c1476 100644 --- a/public/assets/tests/table_extended.js +++ b/public/assets/tests/table_extended.js @@ -1321,7 +1321,7 @@ test('table new - initial list', function() { equal(el.find('.js-pager').first().find('.js-page.is-selected').length, 1) equal(el.find('.js-pager').first().find('.js-page.is-selected').text(), '1') - $('#table').append('

table with data

') + $('#table').append('

table with data 7

') var el = $('#table-new7') App.TicketPriority.refresh([ @@ -1421,4 +1421,229 @@ test('table new - initial list', function() { equal(el.find('tbody > tr:nth-child(3) > td:nth-child(2)').text().trim(), '10.06.2014', 'check row 3') equal(el.find('tbody > tr:nth-child(4) > td').length, 0, 'check row 3') + $('#table').append('

table with data 8

') + var el = $('#table-new8') + App.TicketPriority.refresh([ + { + id: 1, + name: '1 low', + note: 'some note', + active: true, + created_at: '2014-06-12T11:17:34.000Z', + }, + { + id: 2, + name: '2 normal', + note: 'some note 2', + active: false, + created_at: '2014-06-10T10:17:34.000Z', + }, + { + id: 3, + name: '3 high', + note: 'some note 3', + active: false, + created_at: '2014-06-10T10:17:38.000Z', + }, + ], {clear: true}) + + var table = new App.ControllerTable({ + el: el, + overviewAttributes: ['name', 'created_at', 'active'], + model: App.TicketPriority, + objects: App.TicketPriority.all(), + checkbox: false, + radio: false, + orderBy: 'not_existing', + orderDirection: 'DESC', + }) + + equal(el.find('table > thead > tr').length, 1, 'row count') + equal(el.find('table > thead > tr > th:nth-child(1)').text().trim(), 'Name', 'check header') + equal(el.find('table > thead > tr > th:nth-child(2)').text().trim(), 'Erstellt', 'check header') + equal(el.find('table > thead > tr > th:nth-child(3)').text().trim(), 'Aktiv', 'check header') + equal(el.find('tbody > tr:nth-child(1) > td').length, 3, 'check row 1') + equal(el.find('tbody > tr:nth-child(1) > td:first').text().trim(), '1 niedrig', 'check row 1') + equal(el.find('tbody > tr:nth-child(1) > td:nth-child(2)').text().trim(), '12.06.2014', 'check row 1') + equal(el.find('tbody > tr:nth-child(1) > td:nth-child(3)').text().trim(), 'true', 'check row 1') + equal(el.find('tbody > tr:nth-child(2) > td').length, 3, 'check row 2') + equal(el.find('tbody > tr:nth-child(2) > td:first').text().trim(), '2 normal', 'check row 2') + equal(el.find('tbody > tr:nth-child(2) > td:nth-child(2)').text().trim(), '10.06.2014', 'check row 2') + equal(el.find('tbody > tr:nth-child(3) > td').length, 3, 'check row 3') + equal(el.find('tbody > tr:nth-child(3) > td:first').text().trim(), '3 hoch', 'check row 3') + equal(el.find('tbody > tr:nth-child(3) > td:nth-child(2)').text().trim(), '10.06.2014', 'check row 3') + equal(el.find('tbody > tr:nth-child(4) > td').length, 0, 'check row 3') + + result = table.update({sync: true, objects: App.TicketPriority.all(), orderBy: 'not_existing', orderDirection: 'ASC'}) + equal(result[0], 'noChanges') + + $('#table').append('

table with data 9

') + var el = $('#table-new9') + App.TicketPriority.refresh([ + { + id: 1, + name: '1 low', + external_id: 3, + note: 'some note', + active: true, + created_at: '2014-06-12T11:17:34.000Z', + }, + { + id: 2, + name: '2 normal', + external_id: 2, + note: 'some note 2', + active: false, + created_at: '2014-06-10T10:17:34.000Z', + }, + { + id: 3, + name: '3 high', + external_id: 1, + note: 'some note 3', + active: false, + created_at: '2014-06-10T10:17:38.000Z', + }, + ], {clear: true}) + + App.TicketPriority.resetAttributes() + App.TicketPriority.updateAttributes([{ + name: 'external_id', + display: 'External', + tag: 'input', + readonly: 1, + }]) + + var table = new App.ControllerTable({ + el: el, + overviewAttributes: ['name', 'created_at', 'active'], + model: App.TicketPriority, + objects: App.TicketPriority.all(), + checkbox: false, + radio: false, + orderBy: 'external', + orderDirection: 'DESC', + }) + + equal(el.find('table > thead > tr').length, 1, 'row count') + equal(el.find('table > thead > tr > th:nth-child(1)').text().trim(), 'Name', 'check header') + equal(el.find('table > thead > tr > th:nth-child(2)').text().trim(), 'Erstellt', 'check header') + equal(el.find('table > thead > tr > th:nth-child(3)').text().trim(), 'Aktiv', 'check header') + equal(el.find('tbody > tr:nth-child(1) > td').length, 3, 'check row 1') + equal(el.find('tbody > tr:nth-child(1) > td:first').text().trim(), '1 niedrig', 'check row 1') + equal(el.find('tbody > tr:nth-child(1) > td:nth-child(2)').text().trim(), '12.06.2014', 'check row 1') + equal(el.find('tbody > tr:nth-child(1) > td:nth-child(3)').text().trim(), 'true', 'check row 1') + equal(el.find('tbody > tr:nth-child(2) > td').length, 3, 'check row 2') + equal(el.find('tbody > tr:nth-child(2) > td:first').text().trim(), '2 normal', 'check row 2') + equal(el.find('tbody > tr:nth-child(2) > td:nth-child(2)').text().trim(), '10.06.2014', 'check row 2') + equal(el.find('tbody > tr:nth-child(3) > td').length, 3, 'check row 3') + equal(el.find('tbody > tr:nth-child(3) > td:first').text().trim(), '3 hoch', 'check row 3') + equal(el.find('tbody > tr:nth-child(3) > td:nth-child(2)').text().trim(), '10.06.2014', 'check row 3') + equal(el.find('tbody > tr:nth-child(4) > td').length, 0, 'check row 3') + + result = table.update({sync: true, objects: App.TicketPriority.all(), orderBy: 'external', orderDirection: 'ASC'}) + equal(result[0], 'fullRender.contentChanged') + equal(result[1], 0) + + equal(el.find('table > thead > tr').length, 1, 'row count') + equal(el.find('table > thead > tr > th:nth-child(1)').text().trim(), 'Name', 'check header') + equal(el.find('table > thead > tr > th:nth-child(2)').text().trim(), 'Erstellt', 'check header') + equal(el.find('table > thead > tr > th:nth-child(3)').text().trim(), 'Aktiv', 'check header') + equal(el.find('tbody > tr:nth-child(1) > td').length, 3, 'check row 3') + equal(el.find('tbody > tr:nth-child(1) > td:first').text().trim(), '3 hoch', 'check row 3') + equal(el.find('tbody > tr:nth-child(1) > td:nth-child(2)').text().trim(), '10.06.2014', 'check row 3') + equal(el.find('tbody > tr:nth-child(2) > td').length, 3, 'check row 2') + equal(el.find('tbody > tr:nth-child(2) > td:first').text().trim(), '2 normal', 'check row 2') + equal(el.find('tbody > tr:nth-child(2) > td:nth-child(2)').text().trim(), '10.06.2014', 'check row 2') + equal(el.find('tbody > tr:nth-child(3) > td').length, 3, 'check row 1') + equal(el.find('tbody > tr:nth-child(3) > td:first').text().trim(), '1 niedrig', 'check row 1') + equal(el.find('tbody > tr:nth-child(3) > td:nth-child(2)').text().trim(), '12.06.2014', 'check row 1') + equal(el.find('tbody > tr:nth-child(3) > td:nth-child(3)').text().trim(), 'true', 'check row 1') + + equal(el.find('tbody > tr:nth-child(4) > td').length, 0, 'check row 3') + + $('#table').append('

table with data 10

') + var el = $('#table-new10') + App.TicketPriority.refresh([ + { + id: 1, + name: '1 low', + external_id: 3, + note: 'some note', + active: true, + created_at: '2014-06-12T11:17:34.000Z', + }, + { + id: 2, + name: '2 normal', + external_id: 2, + note: 'some note 2', + active: false, + created_at: '2014-06-10T10:17:34.000Z', + }, + { + id: 3, + name: '3 high', + external_id: 1, + note: 'some note 3', + active: false, + created_at: '2014-06-10T10:17:38.000Z', + }, + ], {clear: true}) + App.TicketPriority.resetAttributes() + App.TicketPriority.updateAttributes([{ + name: 'external', + display: 'External', + tag: 'input', + readonly: 1, + }]) + + var table = new App.ControllerTable({ + el: el, + overviewAttributes: ['name', 'created_at', 'active'], + model: App.TicketPriority, + objects: App.TicketPriority.all(), + checkbox: false, + radio: false, + orderBy: 'external', + orderDirection: 'ASC', + }) + + equal(el.find('table > thead > tr').length, 1, 'row count') + equal(el.find('table > thead > tr > th:nth-child(1)').text().trim(), 'Name', 'check header') + equal(el.find('table > thead > tr > th:nth-child(2)').text().trim(), 'Erstellt', 'check header') + equal(el.find('table > thead > tr > th:nth-child(3)').text().trim(), 'Aktiv', 'check header') + equal(el.find('tbody > tr:nth-child(1) > td').length, 3, 'check row 1') + equal(el.find('tbody > tr:nth-child(1) > td:first').text().trim(), '1 niedrig', 'check row 1') + equal(el.find('tbody > tr:nth-child(1) > td:nth-child(2)').text().trim(), '12.06.2014', 'check row 1') + equal(el.find('tbody > tr:nth-child(1) > td:nth-child(3)').text().trim(), 'true', 'check row 1') + equal(el.find('tbody > tr:nth-child(2) > td').length, 3, 'check row 2') + equal(el.find('tbody > tr:nth-child(2) > td:first').text().trim(), '2 normal', 'check row 2') + equal(el.find('tbody > tr:nth-child(2) > td:nth-child(2)').text().trim(), '10.06.2014', 'check row 2') + equal(el.find('tbody > tr:nth-child(3) > td').length, 3, 'check row 3') + equal(el.find('tbody > tr:nth-child(3) > td:first').text().trim(), '3 hoch', 'check row 3') + equal(el.find('tbody > tr:nth-child(3) > td:nth-child(2)').text().trim(), '10.06.2014', 'check row 3') + equal(el.find('tbody > tr:nth-child(4) > td').length, 0, 'check row 3') + + result = table.update({sync: true, objects: App.TicketPriority.all(), orderBy: 'external', orderDirection: 'DESC'}) + equal(result[0], 'fullRender.contentChanged') + equal(result[1], 0) + + equal(el.find('table > thead > tr').length, 1, 'row count') + equal(el.find('table > thead > tr > th:nth-child(1)').text().trim(), 'Name', 'check header') + equal(el.find('table > thead > tr > th:nth-child(2)').text().trim(), 'Erstellt', 'check header') + equal(el.find('table > thead > tr > th:nth-child(3)').text().trim(), 'Aktiv', 'check header') + equal(el.find('tbody > tr:nth-child(1) > td').length, 3, 'check row 3') + equal(el.find('tbody > tr:nth-child(1) > td:first').text().trim(), '3 hoch', 'check row 3') + equal(el.find('tbody > tr:nth-child(1) > td:nth-child(2)').text().trim(), '10.06.2014', 'check row 3') + equal(el.find('tbody > tr:nth-child(2) > td').length, 3, 'check row 2') + equal(el.find('tbody > tr:nth-child(2) > td:first').text().trim(), '2 normal', 'check row 2') + equal(el.find('tbody > tr:nth-child(2) > td:nth-child(2)').text().trim(), '10.06.2014', 'check row 2') + equal(el.find('tbody > tr:nth-child(3) > td').length, 3, 'check row 1') + equal(el.find('tbody > tr:nth-child(3) > td:first').text().trim(), '1 niedrig', 'check row 1') + equal(el.find('tbody > tr:nth-child(3) > td:nth-child(2)').text().trim(), '12.06.2014', 'check row 1') + equal(el.find('tbody > tr:nth-child(3) > td:nth-child(3)').text().trim(), 'true', 'check row 1') + + equal(el.find('tbody > tr:nth-child(4) > td').length, 0, 'check row 3') + })