Skip to content

Commit

Permalink
#1264 Add isEmpty filter option
Browse files Browse the repository at this point in the history
  • Loading branch information
nadouani committed Mar 11, 2021
1 parent c3258ca commit 7eb1f41
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 52 deletions.
1 change: 1 addition & 0 deletions frontend/app/scripts/directives/dashboard/filter-editor.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
templateUrl: 'views/directives/dashboard/filter-editor.html',
link: function(scope) {
scope.dateOperator = {
empty: 'Empty',
custom: 'Custom',
today: 'Today',
last7days: 'Last 7 days',
Expand Down
142 changes: 95 additions & 47 deletions frontend/app/scripts/services/common/QueryBuilderSrv.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,15 @@
return null;
}
var operator = filter.value.operator || 'eq';

if(operator === 'empty') {
return {
_not: {
_contains: filter.field
}
};
}

var criterion = {};
criterion[filter.field] = filter.value.value;

Expand All @@ -50,33 +59,44 @@
return null;
}
var operator = filter.value.operator || 'any';
var values = _.pluck(filter.value.list, 'text');

if(values.length > 0) {
var criterions = _.map(values, function(val) {
return {_like: {
_field: filter.field,
_value: val
}};
});
if(operator === 'empty') {
return {
_not: {
_contains: filter.field
}
};
} else {
var values = _.pluck(filter.value.list, 'text');

var criteria = {};
switch(operator) {
case 'all':
criteria = criterions.length === 1 ? criterions[0] : { _and: criterions };
break;
case 'none':
criteria = {
_not: criterions.length === 1 ? criterions[0] : { _or: criterions }
};
break;
default:
criteria = criterions.length === 1 ? criterions[0] : { _or: criterions };
if(values.length > 0) {
var criterions = _.map(values, function(val) {
return {_like: {
_field: filter.field,
_value: val
}};
});

var criteria = {};
switch(operator) {
case 'all':
criteria = criterions.length === 1 ? criterions[0] : { _and: criterions };
break;
case 'none':
criteria = {
_not: criterions.length === 1 ? criterions[0] : { _or: criterions }
};
break;
default:
criteria = criterions.length === 1 ? criterions[0] : { _or: criterions };
}

return criteria;
}

return criteria;
}



return null;
};

Expand All @@ -85,36 +105,47 @@
return null;
}
var operator = filter.value.operator || 'any';
var values = _.pluck(filter.value.list, 'text');

if(values.length > 0) {
var criterions = _.map(values, function(val) {
return {
_like: {
_field: filter.field,
_value: val
}
};
});

var criteria = {};
switch(operator) {
case 'all':
criteria = criterions.length === 1 ? criterions[0] : { _and: criterions };
break;
case 'none':
criteria = {
_not: criterions.length === 1 ? criterions[0] : { _or: criterions }
if(operator === 'empty') {
return {
_not: {
_contains: filter.field
}
};
} else {
var values = _.pluck(filter.value.list, 'text');

if(values.length > 0) {
var criterions = _.map(values, function(val) {
return {
_like: {
_field: filter.field,
_value: val
}
};
break;
//case 'any':
default:
criteria = criterions.length === 1 ? criterions[0] : { _or: criterions };
});

var criteria = {};
switch(operator) {
case 'all':
criteria = criterions.length === 1 ? criterions[0] : { _and: criterions };
break;
case 'none':
criteria = {
_not: criterions.length === 1 ? criterions[0] : { _or: criterions }
};
break;
//case 'any':
default:
criteria = criterions.length === 1 ? criterions[0] : { _or: criterions };
}

return criteria;
}

return criteria;
}



return null;
};

Expand All @@ -123,6 +154,15 @@
return null;
}
var operator = filter.value.operator || 'any';

if(operator === 'empty') {
return {
_not: {
_contains: filter.field
}
};
}

var values = _.pluck(filter.value.list, 'text');

if(values.length > 0) {
Expand Down Expand Up @@ -157,6 +197,14 @@
start,
end;

if(operator === 'empty') {
return {
_not: {
_contains: filter.field
}
};
}

if(operator === 'custom') {
if(value.from && value.from !== null) {
start = _.isString(value.from) ? (new Date(value.from)).getTime() : value.from.getTime();
Expand Down
16 changes: 11 additions & 5 deletions frontend/app/views/directives/dashboard/filter-editor.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
{{filter.value.operator || '='}} <span class="caret"></span>
</button>
<ul class="dropdown-menu" uib-dropdown-menu>
<li><a href ng-click="filter.value.operator = 'empty'">is empty</a></li>
<li><a href style="font-size:20px;" ng-click="filter.value.operator = '='">=</a></li>
<li><a href style="font-size:20px;" ng-click="filter.value.operator = '!='">!=</a></li>
<li><a href style="font-size:20px;" ng-click="filter.value.operator = '<'">&lt;</a></li>
Expand All @@ -16,7 +17,7 @@
<li><a href style="font-size:20px;" ng-click="filter.value.operator = '>='">&gt;=</a></li>
</ul>
</div>
<div class="col-xs-10 pl-xxxs">
<div class="col-xs-10 pl-xxxs" ng-show="filter.value.operator !== 'empty'">
<input type="number" step=".01" class="form-control" ng-model="filter.value.value">
</div>
</div>
Expand All @@ -27,12 +28,13 @@
{{filter.value.operator || 'any'}} of <span class="caret"></span>
</button>
<ul class="dropdown-menu" uib-dropdown-menu>
<li><a href ng-click="filter.value.operator = 'empty'">is empty</a></li>
<li><a href ng-click="filter.value.operator = 'any'">any of</a></li>
<li><a href ng-click="filter.value.operator = 'all'">all of</a></li>
<li><a href ng-click="filter.value.operator = 'none'">none of</a></li>
</ul>
</div>
<div class="col-xs-10 pl-xxxs clear">
<div class="col-xs-10 pl-xxxs clear" ng-show="filter.value.operator !== 'empty'">
<div class="input-group">
<tags-input class="form-control-wrapper ti-tag-selector"
ng-model="filter.value.list"
Expand All @@ -57,12 +59,13 @@
{{filter.value.operator || 'any'}} of <span class="caret"></span>
</button>
<ul class="dropdown-menu" uib-dropdown-menu>
<li><a href ng-click="filter.value.operator = 'empty'">is empty</a></li>
<li><a href ng-click="filter.value.operator = 'any'">any of</a></li>
<li><a href ng-click="filter.value.operator = 'all'">all of</a></li>
<li><a href ng-click="filter.value.operator = 'none'">none of</a></li>
</ul>
</div>
<div class="col-xs-10 pl-xxxs">
<div class="col-xs-10 pl-xxxs" ng-show="filter.value.operator !== 'empty'">
<tags-input class="form-control-wrapper" min-length="2" ng-model="filter.value.list"
placeholder="ex: Firstname Lastname"
replace-spaces-with-dashes="false"
Expand All @@ -79,12 +82,13 @@
{{filter.value.operator || 'any'}} of <span class="caret"></span>
</button>
<ul class="dropdown-menu" uib-dropdown-menu>
<li><a href ng-click="filter.value.operator = 'empty'">is empty</a></li>
<li><a href ng-click="filter.value.operator = 'any'">any of</a></li>
<li><a href ng-click="filter.value.operator = 'all'">all of</a></li>
<li><a href ng-click="filter.value.operator = 'none'">none of</a></li>
</ul>
</div>
<div class="col-xs-10 pl-xxxs">
<div class="col-xs-10 pl-xxxs" ng-show="filter.value.operator !== 'empty'">
<tags-input class="form-control-wrapper" min-length="2"
ng-model="filter.value.list"
placeholder="Enter a {{filter.field}}"
Expand All @@ -98,12 +102,13 @@
{{filter.value.operator || 'any'}} of <span class="caret"></span>
</button>
<ul class="dropdown-menu" uib-dropdown-menu>
<li><a href ng-click="filter.value.operator = 'empty'">is empty</a></li>
<li><a href ng-click="filter.value.operator = 'any'">any of</a></li>
<li><a href ng-click="filter.value.operator = 'all'">all of</a></li>
<li><a href ng-click="filter.value.operator = 'none'">none of</a></li>
</ul>
</div>
<div class="col-xs-10 pl-xxxs">
<div class="col-xs-10 pl-xxxs" ng-show="filter.value.operator !== 'empty'">
<tags-input class="form-control-wrapper" min-length="2" ng-model="filter.value.list"
replace-spaces-with-dashes="false"
add-from-autocomplete-only="true"
Expand Down Expand Up @@ -134,6 +139,7 @@
{{dateOperator[filter.value.operator || 'custom']}} <span class="caret"></span>
</button>
<ul class="dropdown-menu" uib-dropdown-menu>
<li><a href ng-click="setDateFilterOperator(filter, 'empty')">Empty</a></li>
<li><a href ng-click="setDateFilterOperator(filter, 'custom')">Custom</a></li>
<li><a href ng-click="setDateFilterOperator(filter, 'today')">Today</a></li>
<li><a href ng-click="setDateFilterOperator(filter, 'last7days')">Last 7 days</a></li>
Expand Down

0 comments on commit 7eb1f41

Please sign in to comment.