BrickTracker/static/scripts/grid/sort_button.js

50 lines
1.2 KiB
JavaScript

// Grid sort button
class BrickGridSortButton {
constructor(button, grid) {
this.button = button;
this.grid = grid;
this.data = this.button.dataset;
// Setup
button.addEventListener("click", ((grid, button) => (e) => {
grid.sort(button);
})(grid, this));
}
// Active
active() {
this.button.classList.remove("btn-outline-primary");
this.button.classList.add("btn-primary");
}
// Inactive
inactive() {
delete this.button.dataset.sortOrder;
this.button.classList.remove("btn-primary");
this.button.classList.add("btn-outline-primary");
}
// Toggle sorting
toggle(order) {
// Cleanup
delete this.button.dataset.sortOrder;
let icon = this.button.querySelector("i.ri");
if (icon) {
this.button.removeChild(icon);
}
// Set order
if (order) {
this.active();
this.button.dataset.sortOrder = order;
icon = document.createElement("i");
icon.classList.add("ri", "ms-1", `ri-sort-${order}`);
this.button.append(icon);
}
}
}