salix/modules/order/front/catalog/index.js

144 lines
3.3 KiB
JavaScript

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: '<',
}
});