147 lines
3.5 KiB
JavaScript
147 lines
3.5 KiB
JavaScript
import ngModule from '../module';
|
|
import './style.scss';
|
|
|
|
class Controller {
|
|
constructor($scope, $state) {
|
|
this.$scope = $scope;
|
|
this.$state = $state;
|
|
this.$stateParams = $state.params;
|
|
|
|
// 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');
|
|
}
|
|
|
|
get isRefreshing() {
|
|
return this.$scope.model && this.$scope.model.status == 'loading';
|
|
}
|
|
}
|
|
|
|
Controller.$inject = ['$scope', '$state'];
|
|
|
|
ngModule.component('vnOrderCatalog', {
|
|
template: require('./index.html'),
|
|
controller: Controller,
|
|
bindings: {
|
|
order: '<',
|
|
}
|
|
});
|