From 5e825cf06302841bece9b0a3463298ee0e63750c Mon Sep 17 00:00:00 2001 From: Ville Brofeldt <33317356+villebro@users.noreply.github.com> Date: Fri, 11 Jun 2021 11:44:16 +0300 Subject: [PATCH] fix(native-filters): handle descending sorting correctly (#15112) --- .../components/Select/buildQuery.test.ts | 41 ++++++++++++++++++- .../filters/components/Select/buildQuery.ts | 4 +- .../src/filters/components/Select/types.ts | 2 +- 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/superset-frontend/src/filters/components/Select/buildQuery.test.ts b/superset-frontend/src/filters/components/Select/buildQuery.test.ts index 2ad31b158..133e49fdc 100644 --- a/superset-frontend/src/filters/components/Select/buildQuery.test.ts +++ b/superset-frontend/src/filters/components/Select/buildQuery.test.ts @@ -25,7 +25,7 @@ describe('Select buildQuery', () => { datasource: '5__table', groupby: ['my_col'], viz_type: 'filter_select', - sortAscending: false, + sortAscending: undefined, sortMetric: undefined, filters: undefined, enableEmptyFilter: false, @@ -47,7 +47,7 @@ describe('Select buildQuery', () => { expect(query.orderby).toEqual([]); }); - it('should handle sort metric correctly', () => { + it('should sort descending by metric', () => { const queryContext = buildQuery({ ...formData, sortMetric: 'my_metric', @@ -60,6 +60,43 @@ describe('Select buildQuery', () => { expect(query.orderby).toEqual([['my_metric', false]]); }); + it('should sort ascending by metric', () => { + const queryContext = buildQuery({ + ...formData, + sortMetric: 'my_metric', + sortAscending: true, + }); + expect(queryContext.queries.length).toEqual(1); + const [query] = queryContext.queries; + expect(query.groupby).toEqual(['my_col']); + expect(query.metrics).toEqual(['my_metric']); + expect(query.orderby).toEqual([['my_metric', true]]); + }); + + it('should sort ascending by column', () => { + const queryContext = buildQuery({ + ...formData, + sortAscending: true, + }); + expect(queryContext.queries.length).toEqual(1); + const [query] = queryContext.queries; + expect(query.groupby).toEqual(['my_col']); + expect(query.metrics).toEqual([]); + expect(query.orderby).toEqual([['my_col', true]]); + }); + + it('should sort descending by column', () => { + const queryContext = buildQuery({ + ...formData, + sortAscending: false, + }); + expect(queryContext.queries.length).toEqual(1); + const [query] = queryContext.queries; + expect(query.groupby).toEqual(['my_col']); + expect(query.metrics).toEqual([]); + expect(query.orderby).toEqual([['my_col', false]]); + }); + it('should add text search parameter to query filter', () => { const queryContext = buildQuery(formData, { ownState: { diff --git a/superset-frontend/src/filters/components/Select/buildQuery.ts b/superset-frontend/src/filters/components/Select/buildQuery.ts index e442fcd6b..f85be4682 100644 --- a/superset-frontend/src/filters/components/Select/buildQuery.ts +++ b/superset-frontend/src/filters/components/Select/buildQuery.ts @@ -65,8 +65,8 @@ const buildQuery: BuildQuery = ( metrics: sortMetric ? [sortMetric] : [], filters: filters.concat(extra_filters), orderby: - sortMetric || sortAscending - ? sortColumns.map(column => [column, sortAscending]) + sortMetric || sortAscending !== undefined + ? sortColumns.map(column => [column, !!sortAscending]) : [], }, ]; diff --git a/superset-frontend/src/filters/components/Select/types.ts b/superset-frontend/src/filters/components/Select/types.ts index 36052e869..11e1d1d66 100644 --- a/superset-frontend/src/filters/components/Select/types.ts +++ b/superset-frontend/src/filters/components/Select/types.ts @@ -39,7 +39,7 @@ interface PluginFilterSelectCustomizeProps { defaultToFirstItem: boolean; inputRef?: RefObject; searchAllOptions: boolean; - sortAscending: boolean; + sortAscending?: boolean; sortMetric?: string; }