This is an automated email from the ASF dual-hosted git repository.

yongjiezhao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 59437ea6e7 feat(plugin-chart-echarts): able to sort bar on the bar 
chart V2 (#21356)
59437ea6e7 is described below

commit 59437ea6e7ec02267c6e03e174be39a6cae48893
Author: Stephen Liu <[email protected]>
AuthorDate: Tue Sep 13 23:09:09 2022 +0800

    feat(plugin-chart-echarts): able to sort bar on the bar chart V2 (#21356)
---
 .../src/operators/sortOperator.ts                  | 22 ++++---
 .../test/operators/sortOperator.test.ts            | 76 +++++++++++-----------
 .../src/Timeseries/buildQuery.ts                   |  2 +
 3 files changed, 55 insertions(+), 45 deletions(-)

diff --git 
a/superset-frontend/packages/superset-ui-chart-controls/src/operators/sortOperator.ts
 
b/superset-frontend/packages/superset-ui-chart-controls/src/operators/sortOperator.ts
index 277d2df559..3af1378bc1 100644
--- 
a/superset-frontend/packages/superset-ui-chart-controls/src/operators/sortOperator.ts
+++ 
b/superset-frontend/packages/superset-ui-chart-controls/src/operators/sortOperator.ts
@@ -17,24 +17,30 @@
  * specific language governing permissions and limitationsxw
  * under the License.
  */
-import { DTTM_ALIAS, PostProcessingSort, RollingType } from 
'@superset-ui/core';
+import {
+  ensureIsArray,
+  getColumnLabel,
+  getMetricLabel,
+  PostProcessingSort,
+} from '@superset-ui/core';
 import { PostProcessingFactory } from './types';
 
 export const sortOperator: PostProcessingFactory<PostProcessingSort> = (
   formData,
   queryObject,
 ) => {
-  const { x_axis: xAxis } = formData;
-  if (
-    (xAxis || queryObject.is_timeseries) &&
-    Object.values(RollingType).includes(formData.rolling_type)
-  ) {
-    const index = xAxis || DTTM_ALIAS;
+  const { columns, metrics, timeseries_limit_metric, order_desc } = 
queryObject;
+  const metricLabels = ensureIsArray(metrics).map(getMetricLabel);
+  const columnLabels = ensureIsArray(columns).map(getColumnLabel);
+  const column: string[] = ensureIsArray(timeseries_limit_metric).map(
+    getMetricLabel,
+  );
+  if (metricLabels.includes(column[0]) || columnLabels.includes(column[0])) {
     return {
       operation: 'sort',
       options: {
         columns: {
-          [index]: true,
+          [column[0]]: !order_desc,
         },
       },
     };
diff --git 
a/superset-frontend/packages/superset-ui-chart-controls/test/operators/sortOperator.test.ts
 
b/superset-frontend/packages/superset-ui-chart-controls/test/operators/sortOperator.test.ts
index 6f0267d913..8cb32dc940 100644
--- 
a/superset-frontend/packages/superset-ui-chart-controls/test/operators/sortOperator.test.ts
+++ 
b/superset-frontend/packages/superset-ui-chart-controls/test/operators/sortOperator.test.ts
@@ -34,6 +34,7 @@ const queryObject: QueryObject = {
     'count(*)',
     { label: 'sum(val)', expressionType: 'SQL', sqlExpression: 'sum(val)' },
   ],
+  columns: ['state'],
   time_range: '2015 : 2016',
   granularity: 'month',
   post_processing: [
@@ -55,88 +56,89 @@ const queryObject: QueryObject = {
 test('skip sort', () => {
   expect(sortOperator(formData, queryObject)).toEqual(undefined);
   expect(
-    sortOperator(formData, { ...queryObject, is_timeseries: false }),
-  ).toEqual(undefined);
-  expect(
-    sortOperator(
-      { ...formData, rolling_type: 'xxxx' },
-      { ...queryObject, is_timeseries: true },
-    ),
-  ).toEqual(undefined);
-  expect(
-    sortOperator(formData, { ...queryObject, is_timeseries: true }),
+    sortOperator(formData, { ...queryObject, timeseries_limit_metric: 'bar' }),
   ).toEqual(undefined);
 });
 
-test('sort by __timestamp', () => {
+test('sort by metric', () => {
   expect(
-    sortOperator(
-      { ...formData, rolling_type: 'cumsum' },
-      { ...queryObject, is_timeseries: true },
-    ),
+    sortOperator(formData, {
+      ...queryObject,
+      timeseries_limit_metric: 'count(*)',
+    }),
   ).toEqual({
     operation: 'sort',
     options: {
       columns: {
-        __timestamp: true,
+        'count(*)': true,
       },
     },
   });
 
   expect(
-    sortOperator(
-      { ...formData, rolling_type: 'sum' },
-      { ...queryObject, is_timeseries: true },
-    ),
+    sortOperator(formData, {
+      ...queryObject,
+      timeseries_limit_metric: 'count(*)',
+      order_desc: true,
+    }),
   ).toEqual({
     operation: 'sort',
     options: {
       columns: {
-        __timestamp: true,
+        'count(*)': false,
       },
     },
   });
 
   expect(
-    sortOperator(
-      { ...formData, rolling_type: 'mean' },
-      { ...queryObject, is_timeseries: true },
-    ),
+    sortOperator(formData, {
+      ...queryObject,
+      timeseries_limit_metric: {
+        label: 'sum(val)',
+        expressionType: 'SQL',
+        sqlExpression: 'sum(val)',
+      },
+    }),
   ).toEqual({
     operation: 'sort',
     options: {
       columns: {
-        __timestamp: true,
+        'sum(val)': true,
       },
     },
   });
 
   expect(
-    sortOperator(
-      { ...formData, rolling_type: 'std' },
-      { ...queryObject, is_timeseries: true },
-    ),
+    sortOperator(formData, {
+      ...queryObject,
+      timeseries_limit_metric: {
+        label: 'sum(val)',
+        expressionType: 'SQL',
+        sqlExpression: 'sum(val)',
+      },
+      order_desc: false,
+    }),
   ).toEqual({
     operation: 'sort',
     options: {
       columns: {
-        __timestamp: true,
+        'sum(val)': true,
       },
     },
   });
 });
 
-test('sort by named x-axis', () => {
+test('sort by column', () => {
   expect(
-    sortOperator(
-      { ...formData, x_axis: 'ds', rolling_type: 'cumsum' },
-      { ...queryObject },
-    ),
+    sortOperator(formData, {
+      ...queryObject,
+      timeseries_limit_metric: 'state',
+    }),
   ).toEqual({
     operation: 'sort',
     options: {
       columns: {
-        ds: true,
+        state: true,
       },
     },
   });
diff --git 
a/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/buildQuery.ts 
b/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/buildQuery.ts
index 085635209a..fe3bd931a6 100644
--- 
a/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/buildQuery.ts
+++ 
b/superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/buildQuery.ts
@@ -35,6 +35,7 @@ import {
   prophetOperator,
   timeComparePivotOperator,
   flattenOperator,
+  sortOperator,
 } from '@superset-ui/chart-controls';
 
 export default function buildQuery(formData: QueryFormData) {
@@ -97,6 +98,7 @@ export default function buildQuery(formData: QueryFormData) {
             is_timeseries,
           }),
           contributionOperator(formData, baseQueryObject),
+          sortOperator(formData, baseQueryObject),
           flattenOperator(formData, baseQueryObject),
           // todo: move prophet before flatten
           prophetOperator(formData, baseQueryObject),

Reply via email to