this.elem = elem;
this.sortGroup = this.initSortable();
this.input = document.getElementById('books-input');
+ this.setupListeners();
}
initSortable() {
});
}
+ 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() {
@include('form/textarea', ['name' => 'description'])
</div>
-<div class="row">
+<div shelf-sort class="row">
<div class="col-md-6">
- <div shelf-sort class="form-group">
+ <div class="form-group">
<label for="books">{{ trans('entities.shelves_books') }}</label>
<input type="hidden" id="books-input" name="books"
value="{{ isset($shelf) ? $shelf->books->implode('id', ',') : '' }}">