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: 'Default'}, {field: 'showOrder, price', name: 'Color'}, {field: '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; const newFilterList = []; if (!items) return; items.forEach(item => { // Add new tag filters item.tags.forEach(itemTag => { const alreadyAdded = newFilterList.findIndex(filter => { return filter.field == itemTag.tagFk; }); if (alreadyAdded == -1) { newFilterList.push({ name: itemTag.name, field: itemTag.tagFk, isTag: true }); } }); }); // Add default filters - Replaces tags with same name this.defaultFieldList.forEach(defaultField => { const index = newFilterList.findIndex(newfield => { return newfield.name == defaultField.name; }); if (index > -1) newFilterList[index] = defaultField; else newFilterList.push(defaultField); }); this.fieldList = newFilterList; } /** * 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: '<', } });