public update()

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();
    }