fix: Time range filter applied on a dashboard is not persisting to the chart explore (#22920)

This commit is contained in:
Michael S. Molina 2023-01-31 12:01:47 -05:00 committed by GitHub
parent 30abefb519
commit e9423c3c87
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 45 additions and 6 deletions

View File

@ -48,6 +48,14 @@ const getExploreFormData = (overrides: JsonObject = {}) => ({
sqlExpression: "city = 'Warsaw'",
filterOptionName: '567',
},
{
clause: 'WHERE' as const,
expressionType: 'SIMPLE' as const,
operator: 'TEMPORAL_RANGE' as const,
subject: 'ds',
comparator: 'No filter',
filterOptionName: '678',
},
],
adhoc_filters_b: [
{
@ -158,6 +166,14 @@ const getExpectedResultFormData = (overrides: JsonObject = {}) => ({
sqlExpression: "city = 'Warsaw'",
filterOptionName: '567',
},
{
clause: 'WHERE',
expressionType: 'SIMPLE',
operator: 'TEMPORAL_RANGE',
subject: 'ds',
comparator: 'Last month',
filterOptionName: expect.any(String),
},
{
clause: 'WHERE',
expressionType: 'SIMPLE',
@ -279,7 +295,7 @@ const getExpectedResultFormData = (overrides: JsonObject = {}) => ({
...overrides,
});
it('merges dashboard context form data with explore form data', () => {
test('merges dashboard context form data with explore form data', () => {
const fullFormData = getFormDataWithDashboardContext(
getExploreFormData(),
getDashboardFormData(),

View File

@ -173,6 +173,25 @@ const mergeNativeFiltersToFormData = (
return nativeFiltersData;
};
const applyTimeRangeFilters = (
dashboardFormData: JsonObject,
adhocFilters: AdhocFilter[],
) => {
const extraFormData = dashboardFormData.extra_form_data || {};
if ('time_range' in extraFormData) {
return adhocFilters.map((filter: SimpleAdhocFilter) => {
if (filter.operator === 'TEMPORAL_RANGE') {
return {
...filter,
comparator: extraFormData.time_range,
};
}
return filter;
});
}
return adhocFilters;
};
export const getFormDataWithDashboardContext = (
exploreFormData: QueryFormData,
dashboardContextFormData: JsonObject,
@ -194,14 +213,18 @@ export const getFormDataWithDashboardContext = (
.reduce(
(acc, key) => ({
...acc,
[key]: removeAdhocFilterDuplicates([
...ensureIsArray(exploreFormData[key]),
...ensureIsArray(filterBoxData[key]),
...ensureIsArray(nativeFiltersData[key]),
]),
[key]: applyTimeRangeFilters(
dashboardContextFormData,
removeAdhocFilterDuplicates([
...ensureIsArray(exploreFormData[key]),
...ensureIsArray(filterBoxData[key]),
...ensureIsArray(nativeFiltersData[key]),
]),
),
}),
{},
);
return {
...exploreFormData,
...dashboardContextFormData,