|
1 | | -import { bindable, bindingMode, inject } from "aurelia-framework"; |
| 1 | +import { inject } from "aurelia-framework"; |
2 | 2 | import * as Sortable from "sortablejs"; |
3 | 3 |
|
4 | 4 | @inject(Element) |
5 | 5 | export class SortableCustomAttribute { |
6 | 6 |
|
7 | | - @bindable({ defaultBindingMode: bindingMode.oneTime }) |
8 | | - public options; |
9 | | - |
10 | 7 | private sortable; |
11 | 8 |
|
12 | | - private defaultOptions = { |
13 | | - onAdd: event => this.dispatch("on-add", event), |
14 | | - onEnd: event => this.dispatch("on-end", event), |
15 | | - onFilter: event => this.dispatch("on-filter", event), |
16 | | - onMove: event => this.dispatch("on-move", event), |
17 | | - onRemove: event => this.dispatch("on-remove", event), |
18 | | - onSort: event => this.dispatch("on-sort", event), |
19 | | - onStart: event => this.dispatch("on-start", event), |
20 | | - onUpdate: event => this.dispatch("on-update", event), |
21 | | - }; |
22 | | - |
23 | 9 | constructor(private element: Element) { } |
24 | 10 |
|
| 11 | + public detached() { |
| 12 | + this.sortable.destroy(); |
| 13 | + } |
| 14 | + |
25 | 15 | public attached() { |
26 | | - this.sortable = Sortable.create(this.element, Object.assign(this.defaultOptions, this.options || {})); |
| 16 | + if (!this.sortable) { |
| 17 | + this.sortable = Sortable.create(this.element, {}); |
| 18 | + } |
27 | 19 | } |
28 | 20 |
|
29 | | - public detached() { |
30 | | - this.sortable.destroy(); |
| 21 | + public valueChanged(newValue) { |
| 22 | + if (this.sortable) { |
| 23 | + this.sortable.destroy(); |
| 24 | + } |
| 25 | + |
| 26 | + this.sortable = Sortable.create(this.element, Object.assign({}, newValue || {})); |
| 27 | + this.attachListeners(); |
| 28 | + } |
| 29 | + |
| 30 | + private attachListeners() { |
| 31 | + Sortable.utils.on(this.element, "add", event => this.dispatch("sortable-add", event)); |
| 32 | + Sortable.utils.on(this.element, "end", event => this.dispatch("sortable-end", event)); |
| 33 | + Sortable.utils.on(this.element, "filter", event => this.dispatch("sortable-filter", event)); |
| 34 | + Sortable.utils.on(this.element, "move", event => this.dispatch("sortable-move", event)); |
| 35 | + Sortable.utils.on(this.element, "remove", event => this.dispatch("sortable-remove", event)); |
| 36 | + Sortable.utils.on(this.element, "sort", event => this.dispatch("sortable-sort", event)); |
| 37 | + Sortable.utils.on(this.element, "start", event => this.dispatch("sortable-start", event)); |
| 38 | + Sortable.utils.on(this.element, "update", event => this.dispatch("sortable-update", event)); |
31 | 39 | } |
32 | 40 |
|
33 | 41 | private dispatch(name, data) { |
|
0 commit comments