1 | import Sortable from 'sortablejs';
|
2 |
|
3 | export function createSortable(el: any, options: any, vnode: any) {
|
4 | return Sortable.create(el, {
|
5 | ...options,
|
6 | onStart(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 |
|
26 | export 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 |
|
43 | export default TableSortable;
|