@@ -4526,7 +4526,7 @@ angular.module('neObject',[])
45264526angular.module('neQuery',['neLocal','neObject'])
45274527.config(['neLocalProvider', function(localProvider){
45284528 localProvider.set('default', {
4529- $equal :'=',
4529+ $eq :'=',
45304530 $lt:'<',
45314531 $lte:'<=',
45324532 $gt:'>',
@@ -4638,7 +4638,7 @@ angular.module('neQuery',['neLocal','neObject'])
46384638 $templateCache.put('neQuery/date.html',
46394639 '<input type="text" '+
46404640 ' class="input-sm" '+
4641- ' placeholder="{{(query.field.isEmptyValue(query.value) ? (query.field.placeholder||\'type value\') : \'empty value\')|translate}}"'+
4641+ ' placeholder="{{(query.field.isEmptyValue(query.value) ? (query.field.placeholder||\'type value\') : \'empty value\')|translate}}" '+
46424642 ' uib-datepicker-popup '+
46434643 ' is-open="query.value_opened" '+
46444644 ' ng-click="query.value_opened=!query.value_opened" '+
@@ -4659,7 +4659,7 @@ angular.module('neQuery',['neLocal','neObject'])
46594659 $templateCache.put('neQuery/number.html',
46604660 '<input type="number" '+
46614661 ' class="input-sm" '+
4662- ' placeholder="{{(query.field.isEmptyValue(query.value) ? (query.field.placeholder||\'type value\') : \'empty value\')|translate}}"'+
4662+ ' placeholder="{{(query.field.isEmptyValue(query.value) ? (query.field.placeholder||\'type value\') : \'empty value\')|translate}}" '+
46634663 ' ng-model="query.value" '+
46644664 ' ng-change="onChange()" '+
46654665 ' style="width:142px;"/>');
@@ -4683,15 +4683,15 @@ angular.module('neQuery',['neLocal','neObject'])
46834683 $templateCache.put('neQuery/string.html',
46844684 '<input type="text" '+
46854685 ' class="input-sm" '+
4686- ' placeholder="{{(query.field.isEmptyValue(query.value) ? (query.field.placeholder||\'type value\') : \'empty value\')|translate}}"'+
4686+ ' placeholder="{{(query.field.isEmptyValue(query.value) ? (query.field.placeholder||\'type value\') : \'empty value\')|translate}}" '+
46874687 ' ng-model="query.value" '+
46884688 ' ng-change="onChange()"/>');
46894689
46904690 $templateCache.put('neQuery/string-suggestions.html',
46914691 '<div class="dropdown visible-inline-block" uib-dropdown keyboard-nav>'+
46924692 ' <input type="text" '+
46934693 ' class="input-sm" '+
4694- ' placeholder="{{(query.field.isEmptyValue(query.value) ? (query.field.placeholder||\'type value\') : \'empty value\')|translate}}"'+
4694+ ' placeholder="{{(query.field.isEmptyValue(query.value) ? (query.field.placeholder||\'type value\') : \'empty value\')|translate}}" '+
46954695 ' uib-dropdown-toggle '+
46964696 ' ng-model="query.suggestion" '+
46974697 ' ng-change="query.field.onlySuggestedValues ? query.value=null : query.value=query.suggestion;query.field.createSuggestions(query, query.suggestion);onChange()">'+
@@ -4842,23 +4842,23 @@ angular.module('neQuery',['neLocal','neObject'])
48424842 },
48434843 number:{
48444844 name:'number',
4845- operators:['$equal ','$lt','$lte','$gt','$gte'], // '=','<','<=','>','>='
4845+ operators:['$eq ','$lt','$lte','$gt','$gte'], // '=','<','<=','>','>='
48464846 template: templates.number
48474847 },
48484848 boolean:{
48494849 name:'boolean',
4850- operators:['$equal '], // 'is'
4850+ operators:['$eq '], // 'is'
48514851 template: templates.boolean,
48524852 onBuild: function(value){ if([true,'true','True',1,'yes','Yes'].indexOf(value)!==-1) return true; else return false; }
48534853 },
48544854 date:{
48554855 name:'date',
4856- operators:['$equal ','$lt','$lte','$gt','$gte'], // '=','<','<=','>','>='
4856+ operators:['$eq ','$lt','$lte','$gt','$gte'], // '=','<','<=','>','>='
48574857 template: templates.date
48584858 },
48594859 datetime:{
48604860 name:'datetime',
4861- operators:['$equal ','$lt','$lte','$gt','$gte'], // '=','<','<=','>','>='
4861+ operators:['$eq ','$lt','$lte','$gt','$gte'], // '=','<','<=','>','>='
48624862 template: templates.datetime
48634863 },
48644864 object:{
@@ -5077,10 +5077,10 @@ angular.module('neQuery',['neLocal','neObject'])
50775077
50785078 function addQuery(query, result, logical){
50795079 child = query.append(logical);
5080- child.setFieldByName(result.fieldName, true); // reset if defined, because default field (first) was already set
50815080 child.type = types[result.typeName];
5082- child.operator = result.operator;
50835081 child.value = result.value;
5082+ child.setFieldByName(result.fieldName, true); // reset if defined, because default field (first) was already set
5083+ child.operator = result.operator; // force change operator to show original query operator, even if field has disabled changing operator
50845084 }
50855085
50865086 return query;
@@ -5155,7 +5155,7 @@ angular.module('neQuery',['neLocal','neObject'])
51555155 if(type) return {
51565156 fieldName: key,
51575157 typeName: type,
5158- operator: type==='string' ? '$regex_exact' : '$equal ',
5158+ operator: type==='string' ? '$regex_exact' : '$eq ',
51595159 value: value
51605160 };
51615161 }
@@ -5182,9 +5182,20 @@ angular.module('neQuery',['neLocal','neObject'])
51825182 };
51835183 }
51845184 },
5185- $equal:{ // virtual, called on build when equal operator
5185+ $eq:{
51865186 build: function(value){
51875187 return value;
5188+ },
5189+ parse: function(key, value){
5190+ var vt = parseValueType(value), type = vt.type;
5191+ value = vt.value;
5192+
5193+ if(type) return {
5194+ fieldName: key,
5195+ typeName: type,
5196+ operator: type==='string' ? '$regex_exact' : '$eq',
5197+ value: value
5198+ };
51885199 }
51895200 },
51905201 $exists:{
@@ -5581,15 +5592,17 @@ angular.module('neQuery',['neLocal','neObject'])
55815592 return this.$dirty;
55825593 }
55835594
5584- function setFieldByName(fieldName, resetIfDefined){
5595+ function setFieldByName(fieldName, resetPrevField){
5596+ if(resetPrevField) delete this.field;
5597+
55855598 if(fieldName){
55865599 var fieldNameLower = fieldName.toLowerCase();
55875600 for(var i=0;i<this.fields.length;i++){
55885601 if(this.fields[i].key===fieldName || this.fields[i].nameLower===fieldNameLower){
55895602 return this.setField(this.fields[i]); // match with predefined fields
55905603 }
55915604 else if(this.fields[i].match && (fieldName.match(this.fields[i].match) || fieldNameLower.match(this.fields[i].match))){
5592- if(!resetIfDefined && this.field && this.field.field === this.fields[i].field) return;
5605+ if(this.field && this.field.field === this.fields[i].field) return;
55935606 else return this.setField(this.fields[i], fieldName); // match with predefined fields
55945607 }
55955608 }
@@ -5606,12 +5619,13 @@ angular.module('neQuery',['neLocal','neObject'])
56065619 // this.operator = this.type.operators[0];
56075620 this.value = null;
56085621 }
5622+ var prevField = this.field;
56095623 this.field = angular.copy(field||{});
56105624 this.fieldName = fieldName || this.field.name;
56115625
56125626 // set default operator, if field has operatorIndex
56135627 this.operator = this.type.operators[ this.field.operatorIndex||0 ];
5614- if(field.onSet) field.onSet(this);
5628+ if(field.onSet) field.onSet(this, prevField );
56155629 }
56165630
56175631 function setOperator(operator){
@@ -5814,10 +5828,14 @@ angular.module('neQuery',['neLocal','neObject'])
58145828 fields[i].onlySuggestedValues = fields[i].onlySuggestedValues;
58155829
58165830 if(fields[i].loadSuggestions) {
5817- fields[i].onSet = fields[i].onSet || function(query){
5818- query.value = null;
5819- query.suggestion = '';
5820- query.suggestions = [];
5831+ fields[i].resetOnFieldChange = true;
5832+ fields[i].onSet = fields[i].onSet || function(query, prevField){
5833+ if(prevField){
5834+ query.value = null;
5835+ query.suggestion = '';
5836+ query.suggestions = [];
5837+ }
5838+ else query.suggestion = query.suggestion || query.value;
58215839 };
58225840 fields[i].template = fields[i].template || templates.suggestions;
58235841 fields[i].createSuggestions = (function(field){
0 commit comments