salix/front/core/components/th/index.js

96 lines
2.0 KiB
JavaScript
Raw Normal View History

import ngModule from '../../module';
2020-11-13 08:30:40 +00:00
import Component from '../../lib/component';
import './style.scss';
export default class Th extends Component {
constructor($element, $, $transclude) {
super($element, $);
this._order = 'ASC';
this.column = $element[0];
2019-02-10 21:52:35 +00:00
$element.on('click', () => this.onToggleOrder());
2020-11-13 08:30:40 +00:00
$transclude($clone => {
const text = this.$t($clone.text()); // Not updating translations
$element.append(text ? text : $clone);
});
}
2019-02-10 21:52:35 +00:00
/**
2019-04-05 13:20:12 +00:00
* Changes the order if the cell has a field and defaultOrder property
*/
$onInit() {
if (!this.field) return;
if (this.defaultOrder)
this.order = this.defaultOrder;
this.updateArrow();
}
set order(order) {
this._order = order;
this.table.setOrder(this.field, order);
}
get order() {
return this._order;
}
get field() {
return this.column.getAttribute('field');
}
2019-02-10 21:52:35 +00:00
/**
2019-04-05 13:20:12 +00:00
* Toggle order ASC/DESC
*/
toggleOrder() {
2019-04-05 13:20:12 +00:00
if (this.order === 'ASC')
this.order = 'DESC';
2019-04-05 13:20:12 +00:00
else
this.order = 'ASC';
}
2019-02-10 21:52:35 +00:00
/**
2019-04-05 13:20:12 +00:00
* Applies a new filter order to the model and
* updates the cell arrow
*/
onToggleOrder() {
if (!this.field) return;
2019-04-05 13:20:12 +00:00
if (this.table.field == this.field)
this.toggleOrder();
2019-04-05 13:20:12 +00:00
else
this.table.setOrder(this.field, this.order);
2019-04-05 13:20:12 +00:00
this.updateArrow();
2018-07-16 06:00:04 +00:00
this.table.applyOrder(this.field, this.order);
}
2019-02-10 21:52:35 +00:00
/**
2019-04-05 13:20:12 +00:00
* Set cell class to asc/desc
*/
updateArrow() {
this.column.classList.remove('asc', 'desc');
2019-04-05 13:20:12 +00:00
if (this.order === 'DESC')
this.column.classList.add('desc');
2019-04-05 13:20:12 +00:00
else
this.column.classList.add('asc');
}
}
2020-11-13 08:30:40 +00:00
Th.$inject = ['$element', '$scope', '$transclude'];
ngModule.vnComponent('vnTh', {
transclude: true,
controller: Th,
bindings: {
defaultOrder: '@?'
},
require: {
table: '^^vnTable'
}
});