diff --git a/resources/assets/js/components/shelf-sort.js b/resources/assets/js/components/shelf-sort.js index 91713ab41..59ac712a4 100644 --- a/resources/assets/js/components/shelf-sort.js +++ b/resources/assets/js/components/shelf-sort.js @@ -5,6 +5,7 @@ class ShelfSort { this.elem = elem; this.sortGroup = this.initSortable(); this.input = document.getElementById('books-input'); + this.setupListeners(); } initSortable() { @@ -21,10 +22,39 @@ class ShelfSort { }); } + setupListeners() { + this.elem.addEventListener('click', event => { + const sortItem = event.target.closest('.scroll-box-item:not(.instruction)'); + if (sortItem) { + event.preventDefault(); + this.sortItemClick(sortItem); + } + }); + } + + /** + * Called when a sort item is clicked. + * @param {Element} sortItem + */ + sortItemClick(sortItem) { + const lists = this.elem.querySelectorAll('.scroll-box'); + const newList = Array.from(lists).filter(list => sortItem.parentElement !== list); + if (newList.length > 0) { + newList[0].appendChild(sortItem); + } + this.onChange(); + } + onDrop($item, container, _super) { + this.onChange(); + _super($item, container); + } + + onChange() { const data = this.sortGroup.sortable('serialize').get(); this.input.value = data[0].map(item => item.id).join(','); - _super($item, container); + const instruction = this.elem.querySelector('.scroll-box-item.instruction'); + instruction.parentNode.insertBefore(instruction, instruction.parentNode.children[0]); } getPlaceholderHTML() { diff --git a/resources/views/shelves/form.blade.php b/resources/views/shelves/form.blade.php index 2a4b38b8b..142e5c69e 100644 --- a/resources/views/shelves/form.blade.php +++ b/resources/views/shelves/form.blade.php @@ -10,9 +10,9 @@ @include('form/textarea', ['name' => 'description']) -
+
-
+