in src/FacetsVisual.ts [180:234]
public update(options: VisualUpdateOptions) {
if (this.suppressNextUpdate) {
return (this.suppressNextUpdate = false);
}
if (options['resizeMode'] && this.data && this.data.facetsData) {
this.reDrawRangeFilter();
return this.updateSparklines();
}
if (!options.dataViews || !(options.dataViews.length > 0)) {
return;
}
if (!hasColumns(options.dataViews[0], REQUIRED_FIELDS)) {
return this.facets.replace([]);
}
this.previousData = this.data || {};
this.dataView = options.dataViews[0];
this.settings = this.validateSettings($.extend(true, {}, DEFAULT_SETTINGS, this.dataView.metadata.objects));
const isFreshData = (options['operationKind'] === VisualDataChangeOperationKind.Create);
const hasMoreData = Boolean(this.dataView.metadata.segment);
const rangeValueColumn = findColumn(this.dataView, 'rangeValue');
const bucketColumn = findColumn(this.dataView, 'bucket');
const sparklineColumn = findColumn(this.dataView, 'sparklineData');
const loadAllDataBeforeRender = Boolean(rangeValueColumn) || Boolean(bucketColumn) || Boolean(sparklineColumn);
this.facetsContainer.toggleClass('render-segments', Boolean(bucketColumn));
this.previousFreshData = isFreshData ? (this.data || {}) : this.previousFreshData;
this.retainFilters = this.previousFreshData.hasHighlight && this.retainFilters;
isFreshData && !this.retainFilters && this.clearFilters();
this.data = this.converter(this.dataView, this.colors, this.settings);
this.hasFilter() && (this.data = this.filterData(this.data));
// to ignore first update call series caused by selecting facets in highlighted state
this.selectionInHighlightedState = isFreshData
? (this.previousFreshData.hasHighlight && this.selectedInstances.length > 0)
: this.selectionInHighlightedState;
this.loadMoreCount = isFreshData ? 0 : ++this.loadMoreCount;
const shouldLoadMoreData = hasMoreData && this.loadMoreCount < MAX_DATA_LOADS;
if (this.selectionInHighlightedState) {
return shouldLoadMoreData && this.loadMoreData();
}
if (loadAllDataBeforeRender) {
isFreshData && this.toggleLoadingSpinner(true);
return shouldLoadMoreData
? this.loadMoreData()
: this.updateFacets();
}
isFreshData ? this.updateFacets() : this.syncFacets();
return shouldLoadMoreData && this.loadMoreData();
}