diff --git a/addon/-private/column-tree.js b/addon/-private/column-tree.js index a65917495..d5ce4d7f2 100644 --- a/addon/-private/column-tree.js +++ b/addon/-private/column-tree.js @@ -8,6 +8,7 @@ import { computed } from '@ember/object'; import { gt, readOnly } from '@ember/object/computed'; import { scheduler, Token } from 'ember-raf-scheduler'; +import { SUPPORTS_CLOSURE_ACTIONS } from 'ember-compatibility-helpers'; import { getOrCreate } from './meta-cache'; import { objectAt, move, splice } from './utils/array'; @@ -860,7 +861,13 @@ export default EmberObject.extend({ this.container.classList.remove('is-reordering'); - this.sendAction('onReorder', get(node, 'column'), get(closestColumn, 'column')); + if (SUPPORTS_CLOSURE_ACTIONS) { + if (typeof this.onReorder === 'function') { + this.onReorder(get(node, 'column'), get(closestColumn, 'column')); + } + } else { + this.sendAction('onReorder', get(node, 'column'), get(closestColumn, 'column')); + } }, startResize(node, clientX) { diff --git a/addon/components/ember-thead/component.js b/addon/components/ember-thead/component.js index 77da5e63b..16665fc70 100644 --- a/addon/components/ember-thead/component.js +++ b/addon/components/ember-thead/component.js @@ -205,6 +205,7 @@ export default Component.extend({ this.columnMetaCache = new Map(); this.columnTree = ColumnTree.create({ + onReorder: typeof this.onReorder === 'function' ? this.onReorder.bind(this) : null, sendAction: this.sendAction.bind(this), columnMetaCache: this.columnMetaCache, containerWidthAdjustment: this.containerWidthAdjustment, diff --git a/tests/helpers/generate-table.js b/tests/helpers/generate-table.js index 3187d9100..e30eeaf8f 100644 --- a/tests/helpers/generate-table.js +++ b/tests/helpers/generate-table.js @@ -24,7 +24,7 @@ const fullTable = hbs` onUpdateSorts="onUpdateSorts" - onReorder="onReorder" + onReorder=(if supportsClosureActions onReorder "onReorder") onResize="onResize" as |h| diff --git a/tests/integration/components/headers/reorder-test.js b/tests/integration/components/headers/reorder-test.js index 4cb21d6ee..666707745 100644 --- a/tests/integration/components/headers/reorder-test.js +++ b/tests/integration/components/headers/reorder-test.js @@ -10,6 +10,8 @@ import { getScale } from 'ember-table/test-support/helpers/element'; import TablePage from 'ember-table/test-support/pages/ember-table'; import { toBase26 } from 'dummy/utils/base-26'; +import { SUPPORTS_CLOSURE_ACTIONS } from 'ember-compatibility-helpers'; + const table = new TablePage(); export async function scrollToEdge(targetElement, edgeOffset, direction) { @@ -58,13 +60,17 @@ module('Integration | headers | reorder', function() { assert.equal(table.headers.objectAt(0).text.trim(), 'A', 'First column is swapped forward'); }); - test('column reorder action is sent up to controller', async function(assert) { - this.on('onReorder', function(insertedColumn, insertedAfter) { + test('calls the closure action onReorder or sendAction given the ember version', async function(assert) { + let onReorder = function(insertedColumn, insertedAfter) { assert.equal(insertedColumn.name, 'A', 'old column index is correct'); assert.equal(insertedAfter.name, 'B', 'new column index is correct'); - }); - - await generateTable(this); + }; + if (SUPPORTS_CLOSURE_ACTIONS) { + await generateTable(this, { onReorder, supportsClosureActions: SUPPORTS_CLOSURE_ACTIONS }); + } else { + this.on('onReorder', onReorder); + await generateTable(this); + } await table.headers.objectAt(0).reorderBy(1); });