lemo-crm/web/app/components/sortable-list.js

42 lines
1.4 KiB
JavaScript

import Component from '@ember/component';
import $ from 'jquery'
export default Component.extend({
tagName: 'ul',
classNames: ['item-list'],
didInsertElement() {
let me = this;
me._super(...arguments);
me.set('prevIds', me.get('model').mapBy('id'));
$(me.element).sortable({
opacity: 0.8,
revert: true,
forceHelperSize: true,
placeholder: 'draggable-placeholder',
forcePlaceholderSize: true,
tolerance: 'pointer',
stop: function (event, ui) {
// just for Chrome!!!! so that dropdowns on items don't appear below other items after being moved
$(ui.item).css('z-index', 'auto');
if (me.get('onSortStopped')) {
let prevIds = me.get('prevIds');
let changed = false;
let ids = Array.prototype.map.call($('li', me.element), (li, i) => {
let id = $(li).data('item-id');
if (id !== prevIds[i] && !changed) {
changed = true;
}
return id;
});
if (changed) {
me.set('prevIds', ids);
me.sendAction('onSortStopped', ids);
}
}
}
});
}
});