From eea6094beea20e8b7a7675f530b9d6c170974f31 Mon Sep 17 00:00:00 2001 From: stephenLYZ <750188453@qq.com> Date: Sun, 23 Jan 2022 22:26:32 +0800 Subject: [PATCH 1/3] fix(native-filters): values is not sorted when setting sort option --- .../components/Select/SelectFilterPlugin.tsx | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/superset-frontend/src/filters/components/Select/SelectFilterPlugin.tsx b/superset-frontend/src/filters/components/Select/SelectFilterPlugin.tsx index 15d85eea9874f..23bc30dd93a09 100644 --- a/superset-frontend/src/filters/components/Select/SelectFilterPlugin.tsx +++ b/superset-frontend/src/filters/components/Select/SelectFilterPlugin.tsx @@ -266,17 +266,13 @@ export default function PluginFilterSelect(props: PluginFilterSelectProps) { return undefined; }, [filterState.validateMessage, filterState.validateStatus]); - const options = useMemo(() => { - const options: { label: string; value: DataRecordValue }[] = []; - data.forEach(row => { - const [value] = groupby.map(col => row[col]); - options.push({ - label: labelFormatter(value, datatype), - value, - }); - }); - return options; - }, [data, datatype, groupby, labelFormatter]); + const options = data.map(row => { + const [value] = groupby.map(col => row[col]); + return { + label: labelFormatter(value, datatype), + value, + }; + }); return ( @@ -309,6 +305,8 @@ export default function PluginFilterSelect(props: PluginFilterSelectProps) { invertSelection={inverseSelection} // @ts-ignore options={options} + // keep the options in their original order + sortComparator={() => 0} /> From 545899e2020c3d3150bdf9a841df39758fa3ac68 Mon Sep 17 00:00:00 2001 From: stephenLYZ <750188453@qq.com> Date: Sun, 23 Jan 2022 22:36:06 +0800 Subject: [PATCH 2/3] fix: revert --- .../components/Select/SelectFilterPlugin.tsx | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/superset-frontend/src/filters/components/Select/SelectFilterPlugin.tsx b/superset-frontend/src/filters/components/Select/SelectFilterPlugin.tsx index 23bc30dd93a09..8f945f774b628 100644 --- a/superset-frontend/src/filters/components/Select/SelectFilterPlugin.tsx +++ b/superset-frontend/src/filters/components/Select/SelectFilterPlugin.tsx @@ -266,13 +266,17 @@ export default function PluginFilterSelect(props: PluginFilterSelectProps) { return undefined; }, [filterState.validateMessage, filterState.validateStatus]); - const options = data.map(row => { - const [value] = groupby.map(col => row[col]); - return { - label: labelFormatter(value, datatype), - value, - }; - }); + const options = useMemo(() => { + const options: { label: string; value: DataRecordValue }[] = []; + data.forEach(row => { + const [value] = groupby.map(col => row[col]); + options.push({ + label: labelFormatter(value, datatype), + value, + }); + }); + return options; + }, [data, datatype, groupby, labelFormatter]); return ( From 7ff09f55aa0efb0833094f10bcb5aa31996290f8 Mon Sep 17 00:00:00 2001 From: stephenLYZ <750188453@qq.com> Date: Wed, 26 Jan 2022 09:45:59 +0800 Subject: [PATCH 3/3] pass sortComparator --- .../components/Select/SelectFilterPlugin.tsx | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/superset-frontend/src/filters/components/Select/SelectFilterPlugin.tsx b/superset-frontend/src/filters/components/Select/SelectFilterPlugin.tsx index 8f945f774b628..a34891e98cc97 100644 --- a/superset-frontend/src/filters/components/Select/SelectFilterPlugin.tsx +++ b/superset-frontend/src/filters/components/Select/SelectFilterPlugin.tsx @@ -30,11 +30,13 @@ import { t, tn, } from '@superset-ui/core'; +import { LabeledValue as AntdLabeledValue } from 'antd/lib/select'; import React, { useCallback, useEffect, useState, useMemo } from 'react'; import { Select } from 'src/components'; import debounce from 'lodash/debounce'; import { SLOW_DEBOUNCE } from 'src/constants'; import { useImmerReducer } from 'use-immer'; +import { propertyComparator } from 'src/components/Select/Select'; import { PluginFilterSelectProps, SelectValue } from './types'; import { StyledFormItem, FilterPluginStyle, StatusMessage } from '../common'; import { getDataRecordFormatter, getSelectExtraFormData } from '../../utils'; @@ -278,6 +280,17 @@ export default function PluginFilterSelect(props: PluginFilterSelectProps) { return options; }, [data, datatype, groupby, labelFormatter]); + const sortComparator = useCallback( + (a: AntdLabeledValue, b: AntdLabeledValue) => { + const labelComparator = propertyComparator('label'); + if (formData.sortAscending) { + return labelComparator(a, b); + } + return labelComparator(b, a); + }, + [formData.sortAscending], + ); + return ( 0} + sortComparator={sortComparator} />