UNPKG

1.25 kBPlain TextView Raw
1import Sortable from 'sortablejs';
2
3export function createSortable(el: any, options: any, vnode: any) {
4 return Sortable.create(el, {
5 ...options,
6 onStart(/** Event */evt: any) {
7 evt.clone.className = 'draggable';
8 },
9 onEnd(evt: any) {
10 const data = vnode.context.data;
11 const item = data[evt.oldIndex];
12 if (evt.newIndex > evt.oldIndex) {
13 for (let i = evt.oldIndex; i < evt.newIndex; i++) {
14 data[i] = data[i + 1];
15 }
16 } else {
17 for (let i = evt.oldIndex; i > evt.newIndex; i--) {
18 data[i] = data[i - 1];
19 }
20 }
21 data[evt.newIndex] = item;
22 },
23 });
24}
25
26export const TableSortable = {
27 name: 'table-sortable',
28 bind(el: any, binding: any, vnode: any) {
29 const table = el.querySelector('table');
30 table._sortable = createSortable(table.querySelector('tbody'), binding.value, vnode);
31 },
32 update(el: any, binding: any, vnode: any) {
33 const table = el.querySelector('table');
34 table._sortable.destroy();
35 table._sortable = createSortable(table.querySelector('tbody'), binding.value, vnode);
36 },
37 unbind(el: any) {
38 const table = el.querySelector('table');
39 table._sortable.destroy();
40 },
41};
42
43export default TableSortable;