import ngModule from '../module'; import './style.scss'; class Controller { constructor($scope, $state) { this.$scope = $scope; this.$state = $state; // Static autocomplete data this.wayList = [ {way: 'ASC', name: 'Ascendant'}, {way: 'DESC', name: 'Descendant'}, ]; this.defaultFieldList = [ {field: 'relevancy DESC, name', name: 'Name'}, {field: 'price', name: 'Price'} ]; this.fieldList = []; this.fieldList = this.fieldList.concat(this.defaultFieldList); this._way = this.wayList[0].way; this._field = this.fieldList[0].field; } /** * Fills order autocomplete with tags * obtained from last filtered */ onDataChange() { const items = this.$scope.model.data; if (!items) return; this.fieldList = []; this.fieldList = this.fieldList.concat(this.defaultFieldList); items.forEach(item => { item.tags.forEach(itemTag => { const alreadyAdded = this.fieldList.find(order => { return order.field == itemTag.tagFk; }); if (!alreadyAdded) this.fieldList.push({ name: itemTag.name, field: itemTag.tagFk, isTag: true }); }); }); } /** * Get order way ASC/DESC */ get way() { return this._way; } set way(value) { this._way = value; if (value) this.applyOrder(); } /** * Get order fields */ get field() { return this._field; } set field(value) { this._field = value; if (value) this.applyOrder(); } /** * Returns order param * * @return {Object} - Order param */ getOrderBy() { let field = this.$scope.field; let args = { field: this.field, way: this.way }; if (field.selection && field.selection.isTag) args.isTag = true; return args; } /** * Apply order to model */ applyOrder() { this.$scope.model.addFilter(null, {orderBy: this.getOrderBy()}); } preview(event, item) { event.preventDefault(); this.$scope.pricesPopover.show(event, item); } onDescriptorLoad() { this.$scope.popover.relocate(); } $onChanges() { if (this.order && this.order.isConfirmed) this.$state.go('order.card.line'); } } Controller.$inject = ['$scope', '$state']; ngModule.component('vnOrderCatalog', { template: require('./index.html'), controller: Controller, bindings: { order: '<', }, });