Skip to content

Commit 64ab29c

Browse files
Merge pull request #575 from mkszepp/fix-item-undefined
Fix error `TypeError: items[0] is undefined` in `sortable-item` modifier
2 parents d2003aa + 5d58268 commit 64ab29c

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

addon/src/modifiers/sortable-item.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -826,7 +826,7 @@ export default class SortableItemModifier extends Modifier {
826826
*/
827827
get transitionDuration() {
828828
const items = this.sortableGroup.sortedItems.filter((x) => !x.isDragging && !x.isDropping);
829-
let el = items[0].element ?? this.element; // Fallback when only one element is present in list
829+
let el = items[0]?.element ?? this.element; // Fallback when only one element is present in list
830830
let rule = getComputedStyle(el).transitionDuration;
831831
let match = rule.match(/([\d.]+)([ms]*)/);
832832

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { module, test } from 'qunit';
2+
import { setupRenderingTest } from 'ember-qunit';
3+
import { find, render } from '@ember/test-helpers';
4+
import { set } from '@ember/object';
5+
import { drag } from 'ember-sortable/test-support';
6+
import hbs from 'htmlbars-inline-precompile';
7+
8+
module('Integration | Modifier | sortable-item', function (hooks) {
9+
setupRenderingTest(hooks);
10+
11+
test('Drag works with one item', async function (assert) {
12+
this.items = ['Uno'];
13+
14+
this.update = (items) => {
15+
set(this, 'items', items);
16+
};
17+
18+
await render(hbs`
19+
<ol id="test-list" {{sortable-group onChange=this.update}}>
20+
{{#each this.items as |item|}}
21+
<li data-test-item {{sortable-item model=item}}>{{item}}</li>
22+
{{/each}}
23+
</ol>
24+
`);
25+
26+
await drag('mouse', '[data-test-item]', () => {
27+
return { dy: 10 };
28+
});
29+
30+
assert.equal(contents('#test-list'), 'Uno');
31+
});
32+
33+
function contents(selector) {
34+
return find(selector).textContent.replace(//g, '').replace(/\s+/g, ' ').replace(/^\s+/, '').replace(/\s+$/, '');
35+
}
36+
});

0 commit comments

Comments
 (0)