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 {
|
||||
AdhocFilter,
|
||||
QueryFieldAliases,
|
||||
QueryFormColumn,
|
||||
QueryFormData,
|
||||
QueryObject,
|
||||
QueryObjectFilterClause,
|
||||
isPhysicalColumn,
|
||||
isAdhocColumn,
|
||||
} from './types';
|
||||
import processFilters from './processFilters';
|
||||
import extractExtras from './extractExtras';
|
||||
@ -89,6 +92,12 @@ export default function buildQueryObject<T extends QueryFormData>(
|
||||
...extras,
|
||||
...filterFormData,
|
||||
});
|
||||
const normalizeSeriesLimitMetric = (column: QueryFormColumn | undefined) => {
|
||||
if (isAdhocColumn(column) || isPhysicalColumn(column)) {
|
||||
return column;
|
||||
}
|
||||
return undefined;
|
||||
};
|
||||
|
||||
let queryObject: QueryObject = {
|
||||
// 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,
|
||||
series_columns,
|
||||
series_limit,
|
||||
series_limit_metric,
|
||||
series_limit_metric: normalizeSeriesLimitMetric(series_limit_metric),
|
||||
timeseries_limit: limit ? Number(limit) : 0,
|
||||
timeseries_limit_metric: timeseries_limit_metric || undefined,
|
||||
order_desc: typeof order_desc === 'undefined' ? true : order_desc,
|
||||
url_params: url_params || undefined,
|
||||
custom_params,
|
||||
};
|
||||
|
||||
// override extra form data used by native and cross filters
|
||||
queryObject = overrideExtraFormData(queryObject, overrides);
|
||||
|
||||
|
@ -54,7 +54,11 @@ export interface Column {
|
||||
export default {};
|
||||
|
||||
export function isPhysicalColumn(
|
||||
column: AdhocColumn | PhysicalColumn,
|
||||
column?: AdhocColumn | PhysicalColumn,
|
||||
): column is PhysicalColumn {
|
||||
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);
|
||||
});
|
||||
|
||||
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', () => {
|
||||
const baseQuery = {
|
||||
datasource: '5__table',
|
||||
|
Loading…
Reference in New Issue
Block a user