mirror of
https://github.com/apache/superset.git
synced 2024-09-06 13:57:40 -04:00
fix(Explore): Pivot table V2 sort by failure with D&D enabled (#18835)
* wip * Add tests and clean up * Clean up * Remove unused import
This commit is contained in:
parent
c56dc8eace
commit
eafe0cfc6f
@ -21,9 +21,12 @@
|
|||||||
import {
|
import {
|
||||||
AdhocFilter,
|
AdhocFilter,
|
||||||
QueryFieldAliases,
|
QueryFieldAliases,
|
||||||
|
QueryFormColumn,
|
||||||
QueryFormData,
|
QueryFormData,
|
||||||
QueryObject,
|
QueryObject,
|
||||||
QueryObjectFilterClause,
|
QueryObjectFilterClause,
|
||||||
|
isPhysicalColumn,
|
||||||
|
isAdhocColumn,
|
||||||
} from './types';
|
} from './types';
|
||||||
import processFilters from './processFilters';
|
import processFilters from './processFilters';
|
||||||
import extractExtras from './extractExtras';
|
import extractExtras from './extractExtras';
|
||||||
@ -89,6 +92,12 @@ export default function buildQueryObject<T extends QueryFormData>(
|
|||||||
...extras,
|
...extras,
|
||||||
...filterFormData,
|
...filterFormData,
|
||||||
});
|
});
|
||||||
|
const normalizeSeriesLimitMetric = (column: QueryFormColumn | undefined) => {
|
||||||
|
if (isAdhocColumn(column) || isPhysicalColumn(column)) {
|
||||||
|
return column;
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
};
|
||||||
|
|
||||||
let queryObject: QueryObject = {
|
let queryObject: QueryObject = {
|
||||||
// fallback `null` to `undefined` so they won't be sent to the backend
|
// fallback `null` to `undefined` so they won't be sent to the backend
|
||||||
@ -113,13 +122,14 @@ export default function buildQueryObject<T extends QueryFormData>(
|
|||||||
: numericRowOffset,
|
: numericRowOffset,
|
||||||
series_columns,
|
series_columns,
|
||||||
series_limit,
|
series_limit,
|
||||||
series_limit_metric,
|
series_limit_metric: normalizeSeriesLimitMetric(series_limit_metric),
|
||||||
timeseries_limit: limit ? Number(limit) : 0,
|
timeseries_limit: limit ? Number(limit) : 0,
|
||||||
timeseries_limit_metric: timeseries_limit_metric || undefined,
|
timeseries_limit_metric: timeseries_limit_metric || undefined,
|
||||||
order_desc: typeof order_desc === 'undefined' ? true : order_desc,
|
order_desc: typeof order_desc === 'undefined' ? true : order_desc,
|
||||||
url_params: url_params || undefined,
|
url_params: url_params || undefined,
|
||||||
custom_params,
|
custom_params,
|
||||||
};
|
};
|
||||||
|
|
||||||
// override extra form data used by native and cross filters
|
// override extra form data used by native and cross filters
|
||||||
queryObject = overrideExtraFormData(queryObject, overrides);
|
queryObject = overrideExtraFormData(queryObject, overrides);
|
||||||
|
|
||||||
|
@ -54,7 +54,11 @@ export interface Column {
|
|||||||
export default {};
|
export default {};
|
||||||
|
|
||||||
export function isPhysicalColumn(
|
export function isPhysicalColumn(
|
||||||
column: AdhocColumn | PhysicalColumn,
|
column?: AdhocColumn | PhysicalColumn,
|
||||||
): column is PhysicalColumn {
|
): column is PhysicalColumn {
|
||||||
return typeof column === 'string';
|
return typeof column === 'string';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function isAdhocColumn(column?: AdhocColumn | PhysicalColumn) {
|
||||||
|
return (column as AdhocColumn)?.sqlExpression !== undefined;
|
||||||
|
}
|
||||||
|
@ -152,6 +152,28 @@ describe('buildQueryObject', () => {
|
|||||||
expect(query.timeseries_limit_metric).toEqual(metric);
|
expect(query.timeseries_limit_metric).toEqual(metric);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should build series_limit_metric', () => {
|
||||||
|
const metric = 'country';
|
||||||
|
query = buildQueryObject({
|
||||||
|
datasource: '5__table',
|
||||||
|
granularity_sqla: 'ds',
|
||||||
|
viz_type: 'pivot_table_v2',
|
||||||
|
series_limit_metric: metric,
|
||||||
|
});
|
||||||
|
expect(query.series_limit_metric).toEqual(metric);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should build series_limit_metric as undefined when empty array', () => {
|
||||||
|
const metric: any = [];
|
||||||
|
query = buildQueryObject({
|
||||||
|
datasource: '5__table',
|
||||||
|
granularity_sqla: 'ds',
|
||||||
|
viz_type: 'pivot_table_v2',
|
||||||
|
series_limit_metric: metric,
|
||||||
|
});
|
||||||
|
expect(query.series_limit_metric).toEqual(undefined);
|
||||||
|
});
|
||||||
|
|
||||||
it('should handle null and non-numeric row_limit and row_offset', () => {
|
it('should handle null and non-numeric row_limit and row_offset', () => {
|
||||||
const baseQuery = {
|
const baseQuery = {
|
||||||
datasource: '5__table',
|
datasource: '5__table',
|
||||||
|
Loading…
Reference in New Issue
Block a user