comindware.ui
Version:
Comindware Core UI provides the basic components like editors, lists, dropdowns, popups that we so desperately need while creating Marionette-based single-page applications.
87 lines (72 loc) • 2.54 kB
JavaScript
/**
* Developer: Grigory Kuznetsov
* Date: 17.08.2015
* Copyright: 2009-2016 Comindware®
* All Rights Reserved
* Published under the MIT license
*/
'use strict';
import template from '../templates/columnHeader.hbs';
import { Handlebars } from 'lib';
import GridColumnHeaderView from '../../list/views/GridColumnHeaderView';
/**
* @name ColumnHeaderView
* @memberof module:core.nativeGrid.views
* @class ColumnHeaderView
* @constructor
* @description View для отображения ячейки заголовка (шапки) списка
* @extends module:core.list.views.GridColumnHeaderView {@link module:core.list.views.GridColumnHeaderView}
* @param {Object} options Constructor options
* @param {Array} options.columns Массив колонок
* @param {} options.gridEventAggregator ?
* */
const ColumnHeaderView = GridColumnHeaderView.extend({
initialize(options) {
GridColumnHeaderView.prototype.initialize.apply(this, arguments);
if (this.column.filterView) {
this.filterView = this.column.filterView;
this.listenTo(this.model, 'change:hasFilter', this.__resolveFilterClass, this);
}
this.gridEventAggregator = options.gridEventAggregator;
},
template: Handlebars.compile(template),
ui: {
cellContent: '.js-cell-content',
filterBtn: '.js-filter-btn'
},
events: {
'click @ui.cellContent': '__handleSorting',
'click @ui.filterBtn': 'showFilterPopout'
},
__resolveFilterClass() {
if (!this.column.filterView) {
return;
}
const hasFilter = this.model.get('hasFilter');
if (hasFilter) {
this.$el.addClass('has-filter');
} else {
this.$el.removeClass('has-filter');
}
},
showFilterPopout(event) {
event.preventDefault();
event.stopPropagation();
this.gridEventAggregator.trigger('showFilterView', {
columnHeader: this,
filterView: this.filterView,
position: $(event.currentTarget).offset()
});
},
templateHelpers() {
return {
sortingAsc: this.column.sorting === 'asc',
sortingDesc: this.column.sorting === 'desc',
filterView: this.filterView !== undefined
};
},
onRender() {
this.__resolveFilterClass();
}
});
export default ColumnHeaderView;