Skip to content

Commit 767b36b

Browse files
rueckstiesskangas
authored andcommitted
INT-1552 allow building of open bounded range queries (#417)
* allow building of open bounded range queries * fix bug where slow bound crossing didn’t work
1 parent bca8c9b commit 767b36b

File tree

2 files changed

+34
-11
lines changed

2 files changed

+34
-11
lines changed

src/app/minicharts/d3fns/many.js

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ var minicharts_d3fns_many = function() {
6666

6767
function brushed() {
6868
var bars = d3.selectAll(options.view.queryAll('rect.selectable'));
69-
var numSelected = options.view.queryAll('rect.selectable.selected').length;
69+
// var numSelected = options.view.queryAll('rect.selectable.selected').length;
7070
var s = brush.extent();
7171

7272
bars.classed('selected', function(d) {
@@ -83,14 +83,16 @@ var minicharts_d3fns_many = function() {
8383
if (!options.view) {
8484
return;
8585
}
86-
if (numSelected !== options.view.queryAll('rect.selectable.selected').length) {
87-
// number of selected items has changed, trigger querybuilder event
88-
var evt = {
89-
type: 'drag',
90-
source: 'many'
91-
};
92-
options.view.trigger('querybuilder', evt);
93-
}
86+
var openLeft = d3.mouse(this)[0] <= 0;
87+
var openRight = d3.mouse(this)[0] >= width;
88+
// number of selected items has changed, trigger querybuilder event
89+
var evt = {
90+
type: 'drag',
91+
source: 'many',
92+
openLeft: openLeft,
93+
openRight: openRight
94+
};
95+
options.view.trigger('querybuilder', evt);
9496
}
9597

9698
function brushend() {
@@ -104,9 +106,13 @@ var minicharts_d3fns_many = function() {
104106
if (!options.view) {
105107
return;
106108
}
109+
var openLeft = d3.mouse(this)[0] <= 0;
110+
var openRight = d3.mouse(this)[0] >= width;
107111
var evt = {
108112
type: 'drag',
109-
source: 'many'
113+
source: 'many',
114+
openLeft: openLeft,
115+
openRight: openRight
110116
};
111117
options.view.trigger('querybuilder', evt);
112118
}

src/app/minicharts/querybuilder.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ var app = require('ampersand-app');
66
var LeafValue = require('mongodb-language-model').LeafValue;
77
var LeafClause = require('mongodb-language-model').LeafClause;
88
var ListOperator = require('mongodb-language-model').ListOperator;
9+
var ValueOperator = require('mongodb-language-model').ValueOperator;
910
var GeoOperator = require('mongodb-language-model').GeoOperator;
1011
var Range = require('mongodb-language-model').helpers.Range;
1112
var metrics = require('mongodb-js-metrics')();
@@ -287,6 +288,23 @@ module.exports = {
287288
throw new Error('message.selected should never be longer than 2 elements here!');
288289
}
289290

291+
var q;
292+
// in case one of the bounds is open
293+
if (message.data.openLeft) {
294+
message.upperOp = message.dx > 0 ? '$lt' : '$lte';
295+
q = {};
296+
q[message.upperOp] = message.selected[1];
297+
message.value = new ValueOperator(q, {parse: true});
298+
return message;
299+
}
300+
301+
// in case one of the bounds is open
302+
if (message.data.openRight) {
303+
message.lowerOp = '$gte';
304+
message.value = new ValueOperator({$gte: message.selected[0]}, {parse: true});
305+
return message;
306+
}
307+
290308
// at this point we definitely have 2 selected values to build a range
291309
message.lowerOp = '$gte';
292310
message.upperOp = message.dx > 0 ? '$lt' : '$lte';
@@ -324,7 +342,6 @@ module.exports = {
324342
return message;
325343
},
326344

327-
328345
/**
329346
* update the UI after a distinct query and mark appropriate elements with .select class.
330347
*

0 commit comments

Comments
 (0)