]> BookStack Code Mirror - bookstack/blob - resources/js/components/list-sort-control.js
Merge branch 'master' of git://github.com/almandin/BookStack into almandin-master
[bookstack] / resources / js / components / list-sort-control.js
1 /**
2  * ListSortControl
3  * Manages the logic for the control which provides list sorting options.
4  */
5 class ListSortControl {
6
7     constructor(elem) {
8         this.elem = elem;
9         this.menu = elem.querySelector('ul');
10
11         this.sortInput = elem.querySelector('[name="sort"]');
12         this.orderInput = elem.querySelector('[name="order"]');
13         this.form = elem.querySelector('form');
14
15         this.menu.addEventListener('click', event => {
16             if (event.target.closest('[data-sort-value]') !== null) {
17                 this.sortOptionClick(event);
18             }
19         });
20
21         this.elem.addEventListener('click', event => {
22             if (event.target.closest('[data-sort-dir]') !== null) {
23                 this.sortDirectionClick(event);
24             }
25         });
26     }
27
28     sortOptionClick(event) {
29         const sortOption = event.target.closest('[data-sort-value]');
30         this.sortInput.value = sortOption.getAttribute('data-sort-value');
31         event.preventDefault();
32         this.form.submit();
33     }
34
35     sortDirectionClick(event) {
36         const currentDir = this.orderInput.value;
37         const newDir = (currentDir === 'asc') ? 'desc' : 'asc';
38         this.orderInput.value = newDir;
39         event.preventDefault();
40         this.form.submit();
41     }
42
43 }
44
45 export default ListSortControl;