private parseDatesFromPowerBi()

in packages/timebrush-powerbi/src/TimeBrushVisual.ts [270:318]


    private parseDatesFromPowerBi(dataView: powerbi.DataView, hasDataChanged: boolean) {
        const objects: any = get(dataView, "metadata.objects", undefined);
        let filterStartDate;
        let filterEndDate;
        let dataSourceChanged = hasDataChanged;

        const objFilter = get(objects, "general.filter", undefined);
        if (objFilter) {

            const appliedFilter = filter.FilterManager.restoreFilter(objFilter) as models.AdvancedFilter;
            if (appliedFilter && appliedFilter.conditions && appliedFilter.conditions.length === 2) {
                filterStartDate = appliedFilter.conditions[0].value;
                filterEndDate = appliedFilter.conditions[1].value;

                // Sometimes the appliedFilter.target is null, so lets just assume that the dataSource didn't change.
                dataSourceChanged = false;

                if (appliedFilter.target) {
                    const { table, column } = getFilterTargetFromColumn(this.timeColumn);
                    dataSourceChanged =
                        table !== appliedFilter.target.table ||
                        column !== appliedFilter.target["column"];
                }
            }

            // Attempt legacy load
            if (!filterStartDate && !filterEndDate) {
                const legacyConditions = get(objects, "general.filter.whereItems[0].condition", undefined);
                if (legacyConditions && legacyConditions.upper && legacyConditions.lower) {
                    filterStartDate = (legacyConditions.lower).value;
                    filterEndDate = (legacyConditions.upper).value;

                    // Here we detect if the underlying datasource has changed
                    const colExpr = legacyConditions.arg;
                    if (colExpr && colExpr.source) {
                        const filterSource = colExpr.source;
                        const source = this.timeColumn && (<any>this.timeColumn.source.expr).source;
                        if (source) {
                            dataSourceChanged =
                                filterSource.entity !== source.entity ||
                                filterSource.schema !== source.schema;
                        }
                    }
                }
            }
        }

        return {dataSourceChanged, filterStartDate, filterEndDate};
    }