[dateHistogram] only use bucket bounds and auto interval when the time field is the indexPatterns time field
This commit is contained in:
parent
ec2384f695
commit
f0a981e2f3
|
@ -4,7 +4,8 @@ define(function (require) {
|
||||||
|
|
||||||
return function orderedDateAxis(vis, chart) {
|
return function orderedDateAxis(vis, chart) {
|
||||||
var aspects = chart.aspects;
|
var aspects = chart.aspects;
|
||||||
var buckets = aspects.x.agg.buckets;
|
var xAgg = aspects.x.agg;
|
||||||
|
var buckets = xAgg.buckets;
|
||||||
var format = buckets.getScaledDateFormat();
|
var format = buckets.getScaledDateFormat();
|
||||||
|
|
||||||
chart.xAxisFormatter = function (val) {
|
chart.xAxisFormatter = function (val) {
|
||||||
|
@ -16,8 +17,10 @@ define(function (require) {
|
||||||
interval: buckets.getInterval(),
|
interval: buckets.getInterval(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var axisOnTimeField = xAgg.fieldName() === xAgg.vis.indexPattern.timeFieldName;
|
||||||
var bounds = buckets.getBounds();
|
var bounds = buckets.getBounds();
|
||||||
if (bounds) {
|
|
||||||
|
if (bounds && axisOnTimeField) {
|
||||||
chart.ordered.min = bounds.min;
|
chart.ordered.min = bounds.min;
|
||||||
chart.ordered.max = bounds.max;
|
chart.ordered.max = bounds.max;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,8 +10,10 @@ define(function (require) {
|
||||||
{
|
{
|
||||||
display: 'Auto',
|
display: 'Auto',
|
||||||
val: 'auto',
|
val: 'auto',
|
||||||
enabled: function (aggConfig) {
|
enabled: function (agg) {
|
||||||
return !!aggConfig.vis.indexPattern.timeFieldName;
|
// not only do we need a time field, but the selected field needs
|
||||||
|
// to be the time field. (see #3028)
|
||||||
|
return agg.fieldIsTimeField();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,6 +8,12 @@ define(function (require) {
|
||||||
|
|
||||||
var tzOffset = moment().format('Z');
|
var tzOffset = moment().format('Z');
|
||||||
|
|
||||||
|
function setBounds(agg, force) {
|
||||||
|
if (agg.buckets._alreadySet && !force) return;
|
||||||
|
agg.buckets._alreadySet = true;
|
||||||
|
agg.buckets.setBounds(agg.fieldIsTimeField() && timefilter.getActiveBounds());
|
||||||
|
}
|
||||||
|
|
||||||
require('filters/field_type');
|
require('filters/field_type');
|
||||||
|
|
||||||
return new BucketAggType({
|
return new BucketAggType({
|
||||||
|
@ -32,7 +38,8 @@ define(function (require) {
|
||||||
|
|
||||||
buckets = new TimeBuckets();
|
buckets = new TimeBuckets();
|
||||||
buckets.setInterval(_.get(this, ['params', 'interval']));
|
buckets.setInterval(_.get(this, ['params', 'interval']));
|
||||||
buckets.setBounds(timefilter.getActiveBounds());
|
setBounds(this);
|
||||||
|
|
||||||
return buckets;
|
return buckets;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,6 +51,9 @@ define(function (require) {
|
||||||
filterFieldTypes: 'date',
|
filterFieldTypes: 'date',
|
||||||
default: function (agg) {
|
default: function (agg) {
|
||||||
return agg.vis.indexPattern.timeFieldName;
|
return agg.vis.indexPattern.timeFieldName;
|
||||||
|
},
|
||||||
|
onChange: function (agg) {
|
||||||
|
setBounds(agg, true);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -54,15 +64,10 @@ define(function (require) {
|
||||||
options: Private(require('components/agg_types/buckets/_interval_options')),
|
options: Private(require('components/agg_types/buckets/_interval_options')),
|
||||||
editor: require('text!components/agg_types/controls/interval.html'),
|
editor: require('text!components/agg_types/controls/interval.html'),
|
||||||
onRequest: function (agg) {
|
onRequest: function (agg) {
|
||||||
// flag that prevents us from clobbering on subsequest calls to write()
|
setBounds(agg, true);
|
||||||
agg.buckets._sentToEs = true;
|
|
||||||
agg.buckets.setBounds(timefilter.getActiveBounds());
|
|
||||||
},
|
},
|
||||||
write: function (agg, output) {
|
write: function (agg, output) {
|
||||||
if (!agg.buckets._sentToEs) {
|
setBounds(agg);
|
||||||
agg.buckets.setBounds(timefilter.getActiveBounds());
|
|
||||||
}
|
|
||||||
|
|
||||||
agg.buckets.setInterval(agg.params.interval);
|
agg.buckets.setInterval(agg.params.interval);
|
||||||
|
|
||||||
var interval = agg.buckets.getInterval();
|
var interval = agg.buckets.getInterval();
|
||||||
|
|
|
@ -22,7 +22,8 @@
|
||||||
name="field"
|
name="field"
|
||||||
required
|
required
|
||||||
ng-model="agg.params.field"
|
ng-model="agg.params.field"
|
||||||
ng-options="field as field.displayName group by field.type for field in indexedFields">
|
ng-options="field as field.displayName group by field.type for field in indexedFields"
|
||||||
|
ng-change="aggParam.onChange(agg)">
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
</div>
|
</div>
|
|
@ -292,10 +292,10 @@ define(function (require) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function cacheBreaker(prop) {
|
function cacheBreaker(prop) {
|
||||||
var breaker = breakers[prop];
|
var resource = resources[breakers[prop]];
|
||||||
var setup = breaker.setup;
|
var setup = resource.setup;
|
||||||
var changes = breaker.changes;
|
var changes = resource.changes;
|
||||||
var deps = breaker.deps;
|
var deps = resource.deps;
|
||||||
var fn = self[prop];
|
var fn = self[prop];
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
@ -304,7 +304,7 @@ define(function (require) {
|
||||||
var ret = fn.apply(self, arguments);
|
var ret = fn.apply(self, arguments);
|
||||||
|
|
||||||
if (changes.call(self, prev)) {
|
if (changes.call(self, prev)) {
|
||||||
cache = _.omit(cache, deps);
|
cache = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -330,8 +330,13 @@ define(function (require) {
|
||||||
};
|
};
|
||||||
|
|
||||||
var breakers = {
|
var breakers = {
|
||||||
setBounds: {
|
setBounds: 'bounds',
|
||||||
deps: ['getBounds', 'hasBounds', 'getDuration', 'getInterval', 'getScaledDateFormat'],
|
clearBounds: 'bounds',
|
||||||
|
setInterval: 'interval'
|
||||||
|
};
|
||||||
|
|
||||||
|
var resources = {
|
||||||
|
bounds: {
|
||||||
setup: function () {
|
setup: function () {
|
||||||
return [self._lb, self._ub];
|
return [self._lb, self._ub];
|
||||||
},
|
},
|
||||||
|
@ -339,8 +344,7 @@ define(function (require) {
|
||||||
return !sameMoment(prev[0], self._lb) || !sameMoment(prev[1], self._ub);
|
return !sameMoment(prev[0], self._lb) || !sameMoment(prev[1], self._ub);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
setInterval: {
|
interval: {
|
||||||
deps: ['getInterval', 'getScaledDateFormat'],
|
|
||||||
setup: function () {
|
setup: function () {
|
||||||
return self._i;
|
return self._i;
|
||||||
},
|
},
|
||||||
|
|
|
@ -282,6 +282,11 @@ define(function (require) {
|
||||||
return field ? (field.displayName || this.fieldName()) : '';
|
return field ? (field.displayName || this.fieldName()) : '';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
AggConfig.prototype.fieldIsTimeField = function () {
|
||||||
|
var timeFieldName = this.vis.indexPattern.timeFieldName;
|
||||||
|
return timeFieldName && this.fieldName() === timeFieldName;
|
||||||
|
};
|
||||||
|
|
||||||
return AggConfig;
|
return AggConfig;
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue