feat: Move cross filters to Dashboard (#22785)

This commit is contained in:
Geido
2023-01-25 18:01:06 +01:00
committed by GitHub
parent 262c947273
commit 9ed2326a20
87 changed files with 814 additions and 640 deletions

View File

@@ -30,12 +30,12 @@ export default function EchartsBoxPlot(props: BoxPlotChartTransformedProps) {
labelMap,
groupby,
selectedValues,
formData,
refs,
emitCrossFilters,
} = props;
const handleChange = useCallback(
(values: string[]) => {
if (!formData.emitFilter) {
if (!emitCrossFilters) {
return;
}

View File

@@ -28,7 +28,6 @@ import {
D3_FORMAT_OPTIONS,
D3_TIME_FORMAT_OPTIONS,
sections,
emitFilterControl,
ControlPanelConfig,
getStandardizedControls,
ControlState,
@@ -77,7 +76,6 @@ const config: ControlPanelConfig = {
['groupby'],
['metrics'],
['adhoc_filters'],
emitFilterControl,
['series_limit'],
['series_limit_metric'],
[

View File

@@ -53,6 +53,7 @@ export default function transformProps(
filterState,
queriesData,
inContextMenu,
emitCrossFilters,
} = chartProps;
const { data = [] } = queriesData[0];
const { setDataMask = () => {}, onContextMenu } = hooks;
@@ -64,7 +65,6 @@ export default function transformProps(
numberFormat,
dateFormat,
xTicksLayout,
emitFilter,
legendOrientation = 'top',
xAxisTitle,
yAxisTitle,
@@ -291,7 +291,7 @@ export default function transformProps(
height,
echartOptions,
setDataMask,
emitFilter,
emitCrossFilters,
labelMap,
groupby,
selectedValues,

View File

@@ -30,7 +30,6 @@ export type BoxPlotQueryFormData = QueryFormData & {
numberFormat?: string;
whiskerOptions?: BoxPlotFormDataWhiskerOptions;
xTickLayout?: BoxPlotFormXTickLayout;
emitFilter: boolean;
} & TitleFormData;
export type BoxPlotFormDataWhiskerOptions =
@@ -48,7 +47,6 @@ export type BoxPlotFormXTickLayout =
// @ts-ignore
export const DEFAULT_FORM_DATA: BoxPlotQueryFormData = {
emitFilter: false,
...DEFAULT_TITLE_FORM_DATA,
};

View File

@@ -30,12 +30,12 @@ export default function EchartsFunnel(props: FunnelChartTransformedProps) {
labelMap,
groupby,
selectedValues,
formData,
emitCrossFilters,
refs,
} = props;
const handleChange = useCallback(
(values: string[]) => {
if (!formData.emitFilter) {
if (!emitCrossFilters) {
return;
}

View File

@@ -24,7 +24,6 @@ import {
sections,
sharedControls,
ControlStateMapping,
emitFilterControl,
getStandardizedControls,
} from '@superset-ui/chart-controls';
import { DEFAULT_FORM_DATA, EchartsFunnelLabelTypeType } from './types';
@@ -45,7 +44,6 @@ const config: ControlPanelConfig = {
['groupby'],
['metric'],
['adhoc_filters'],
emitFilterControl,
[
{
name: 'row_limit',

View File

@@ -92,6 +92,7 @@ export default function transformProps(
width,
theme,
inContextMenu,
emitCrossFilters,
} = chartProps;
const data: DataRecord[] = queriesData[0].data || [];
@@ -110,7 +111,6 @@ export default function transformProps(
numberFormat,
showLabels,
showLegend,
emitFilter,
sliceId,
}: EchartsFunnelFormData = {
...DEFAULT_LEGEND_FORM_DATA,
@@ -238,7 +238,7 @@ export default function transformProps(
height,
echartOptions,
setDataMask,
emitFilter,
emitCrossFilters,
labelMap,
groupby,
selectedValues,

View File

@@ -40,7 +40,6 @@ export type EchartsFunnelFormData = QueryFormData &
gap: number;
sort: 'descending' | 'ascending' | 'none' | undefined;
orient: 'vertical' | 'horizontal' | undefined;
emitFilter: boolean;
};
export enum EchartsFunnelLabelTypeType {
@@ -70,7 +69,6 @@ export const DEFAULT_FORM_DATA: EchartsFunnelFormData = {
sort: 'descending',
orient: 'vertical',
gap: 0,
emitFilter: false,
};
export type FunnelChartTransformedProps =

View File

@@ -30,12 +30,12 @@ export default function EchartsGauge(props: GaugeChartTransformedProps) {
labelMap,
groupby,
selectedValues,
formData: { emitFilter },
emitCrossFilters,
refs,
} = props;
const handleChange = useCallback(
(values: string[]) => {
if (!emitFilter) {
if (!emitCrossFilters) {
return;
}

View File

@@ -23,7 +23,6 @@ import {
ControlPanelConfig,
D3_FORMAT_OPTIONS,
sections,
emitFilterControl,
getStandardizedControls,
} from '@superset-ui/chart-controls';
import { DEFAULT_FORM_DATA } from './types';
@@ -46,7 +45,6 @@ const config: ControlPanelConfig = {
],
['metric'],
['adhoc_filters'],
emitFilterControl,
[
{
name: 'row_limit',

View File

@@ -91,8 +91,16 @@ const calculateMax = (data: GaugeDataItemOption[]) =>
export default function transformProps(
chartProps: EchartsGaugeChartProps,
): GaugeChartTransformedProps {
const { width, height, formData, queriesData, hooks, filterState, theme } =
chartProps;
const {
width,
height,
formData,
queriesData,
hooks,
filterState,
theme,
emitCrossFilters,
} = chartProps;
const gaugeSeriesOptions = defaultGaugeSeriesOption(theme);
@@ -117,7 +125,6 @@ export default function transformProps(
intervals,
intervalColorIndices,
valueFormatter,
emitFilter,
sliceId,
}: EchartsGaugeFormData = { ...DEFAULT_GAUGE_FORM_DATA, ...formData };
const refs: Refs = {};
@@ -327,7 +334,7 @@ export default function transformProps(
height,
echartOptions,
setDataMask,
emitFilter,
emitCrossFilters,
labelMap: Object.fromEntries(columnsLabelMap),
groupby,
selectedValues: filterState.selectedValues || [],

View File

@@ -52,7 +52,6 @@ export type EchartsGaugeFormData = QueryFormData & {
intervals: string;
intervalColorIndices: string;
valueFormatter: string;
emitFilter: boolean;
};
export const DEFAULT_FORM_DATA: Partial<EchartsGaugeFormData> = {
@@ -76,7 +75,6 @@ export const DEFAULT_FORM_DATA: Partial<EchartsGaugeFormData> = {
intervals: '',
intervalColorIndices: '',
valueFormatter: '{value}',
emitFilter: false,
};
export interface EchartsGaugeChartProps

View File

@@ -39,6 +39,7 @@ export default function EchartsMixedTimeseries({
groupbyB,
selectedValues,
formData,
emitCrossFilters,
seriesBreakdown,
onContextMenu,
xValueFormatter,
@@ -52,10 +53,7 @@ export default function EchartsMixedTimeseries({
const handleChange = useCallback(
(values: string[], seriesIndex: number) => {
const emitFilter = isFirstQuery(seriesIndex)
? formData.emitFilter
: formData.emitFilterB;
if (!emitFilter) {
if (!emitCrossFilters) {
return;
}

View File

@@ -24,7 +24,6 @@ import {
ControlPanelSectionConfig,
ControlSetRow,
CustomControlItem,
emitFilterControl,
getStandardizedControls,
sections,
sharedControls,
@@ -79,14 +78,6 @@ function createQuerySection(
config: sharedControls.adhoc_filters,
},
],
emitFilterControl.length > 0
? [
{
...emitFilterControl[0],
name: `emit_filter${controlSuffix}`,
},
]
: [],
[
{
name: `limit${controlSuffix}`,

View File

@@ -95,6 +95,7 @@ export default function transformProps(
datasource,
theme,
inContextMenu,
emitCrossFilters,
} = chartProps;
const { verboseMap = {} } = datasource;
const { label_map: labelMap } =
@@ -144,8 +145,6 @@ export default function transformProps(
xAxisLabelRotation,
groupby,
groupbyB,
emitFilter,
emitFilterB,
xAxis: xAxisOrig,
xAxisTitle,
yAxisTitle,
@@ -504,8 +503,7 @@ export default function transformProps(
height,
echartOptions,
setDataMask,
emitFilter,
emitFilterB,
emitCrossFilters,
labelMap,
labelMapB,
groupby,

View File

@@ -86,7 +86,6 @@ export type EchartsMixedTimeseriesFormData = QueryFormData & {
yAxisIndexB?: number;
groupby: QueryFormColumn[];
groupbyB: QueryFormColumn[];
emitFilter: boolean;
} & LegendFormData &
TitleFormData;
@@ -143,7 +142,6 @@ export type EchartsMixedTimeseriesChartTransformedProps =
BaseTransformedProps<EchartsMixedTimeseriesFormData> &
ContextMenuTransformedProps &
CrossFilterTransformedProps & {
emitFilterB: boolean;
groupbyB: QueryFormColumn[];
labelMapB: Record<string, string[]>;
seriesBreakdown: number;

View File

@@ -30,12 +30,12 @@ export default function EchartsPie(props: PieChartTransformedProps) {
labelMap,
groupby,
selectedValues,
formData,
refs,
emitCrossFilters,
} = props;
const handleChange = useCallback(
(values: string[]) => {
if (!formData.emitFilter) {
if (!emitCrossFilters) {
return;
}

View File

@@ -25,7 +25,6 @@ import {
D3_FORMAT_OPTIONS,
D3_TIME_FORMAT_OPTIONS,
sections,
emitFilterControl,
getStandardizedControls,
} from '@superset-ui/chart-controls';
import { DEFAULT_FORM_DATA } from './types';
@@ -52,7 +51,6 @@ const config: ControlPanelConfig = {
['groupby'],
['metric'],
['adhoc_filters'],
emitFilterControl,
['row_limit'],
[
{

View File

@@ -144,6 +144,7 @@ export default function transformProps(
width,
theme,
inContextMenu,
emitCrossFilters,
} = chartProps;
const { data = [] } = queriesData[0];
const coltypeMapping = getColtypesMapping(queriesData[0]);
@@ -166,7 +167,6 @@ export default function transformProps(
showLabels,
showLegend,
showLabelsThreshold,
emitFilter,
sliceId,
showTotal,
}: EchartsPieFormData = {
@@ -339,11 +339,11 @@ export default function transformProps(
height,
echartOptions,
setDataMask,
emitFilter,
labelMap,
groupby,
selectedValues,
onContextMenu,
refs,
emitCrossFilters,
};
}

View File

@@ -45,7 +45,6 @@ export type EchartsPieFormData = QueryFormData &
numberFormat: string;
dateFormat: string;
showLabelsThreshold: number;
emitFilter: boolean;
};
export enum EchartsPieLabelType {
@@ -77,7 +76,6 @@ export const DEFAULT_FORM_DATA: EchartsPieFormData = {
showLabels: true,
labelsOutside: true,
showLabelsThreshold: 5,
emitFilter: false,
dateFormat: 'smart_date',
};

View File

@@ -30,12 +30,12 @@ export default function EchartsRadar(props: RadarChartTransformedProps) {
labelMap,
groupby,
selectedValues,
formData,
emitCrossFilters,
refs,
} = props;
const handleChange = useCallback(
(values: string[]) => {
if (!formData.emitFilter) {
if (!emitCrossFilters) {
return;
}

View File

@@ -31,7 +31,6 @@ import {
D3_TIME_FORMAT_OPTIONS,
sections,
sharedControls,
emitFilterControl,
ControlFormItemSpec,
getStandardizedControls,
} from '@superset-ui/chart-controls';
@@ -68,7 +67,6 @@ const config: ControlPanelConfig = {
['metrics'],
['timeseries_limit_metric'],
['adhoc_filters'],
emitFilterControl,
[
{
name: 'row_limit',

View File

@@ -80,6 +80,7 @@ export default function transformProps(
width,
theme,
inContextMenu,
emitCrossFilters,
} = chartProps;
const refs: Refs = {};
const { data = [] } = queriesData[0];
@@ -101,7 +102,6 @@ export default function transformProps(
isCircle,
columnConfig,
sliceId,
emitFilter,
}: EchartsRadarFormData = {
...DEFAULT_LEGEND_FORM_DATA,
...DEFAULT_RADAR_FORM_DATA,
@@ -252,7 +252,7 @@ export default function transformProps(
width,
height,
echartOptions,
emitFilter,
emitCrossFilters,
setDataMask,
labelMap: Object.fromEntries(columnsLabelMap),
groupby,

View File

@@ -50,7 +50,6 @@ export type EchartsRadarFormData = QueryFormData &
isCircle: boolean;
numberFormat: string;
dateFormat: string;
emitFilter: boolean;
};
export enum EchartsRadarLabelType {
@@ -73,7 +72,6 @@ export const DEFAULT_FORM_DATA: EchartsRadarFormData = {
legendType: LegendType.Scroll,
numberFormat: 'SMART_NUMBER',
showLabels: true,
emitFilter: false,
dateFormat: 'smart_date',
isCircle: false,
};

View File

@@ -38,13 +38,14 @@ export default function EchartsSunburst(props: SunburstTransformedProps) {
formData,
onContextMenu,
refs,
emitCrossFilters,
} = props;
const { emitFilter, columns } = formData;
const { columns } = formData;
const handleChange = useCallback(
(values: string[]) => {
if (!emitFilter) {
if (!emitCrossFilters) {
return;
}
@@ -75,7 +76,7 @@ export default function EchartsSunburst(props: SunburstTransformedProps) {
},
});
},
[emitFilter, setDataMask, columns, labelMap],
[emitCrossFilters, setDataMask, columns, labelMap],
);
const eventHandlers: EventHandlers = {

View File

@@ -24,7 +24,6 @@ import {
D3_FORMAT_DOCS,
D3_FORMAT_OPTIONS,
D3_TIME_FORMAT_OPTIONS,
emitFilterControl,
getStandardizedControls,
sections,
} from '@superset-ui/chart-controls';
@@ -43,7 +42,6 @@ const config: ControlPanelConfig = {
['metric'],
['secondary_metric'],
['adhoc_filters'],
emitFilterControl,
['row_limit'],
[
{

View File

@@ -163,6 +163,7 @@ export default function transformProps(
width,
theme,
inContextMenu,
emitCrossFilters,
} = chartProps;
const { data = [] } = queriesData[0];
const coltypeMapping = getColtypesMapping(queriesData[0]);
@@ -180,7 +181,6 @@ export default function transformProps(
showLabelsThreshold,
showTotal,
sliceId,
emitFilter,
} = formData;
const refs: Refs = {};
const numberFormatter = getNumberFormatter(numberFormat);
@@ -352,7 +352,7 @@ export default function transformProps(
height,
echartOptions,
setDataMask,
emitFilter,
emitCrossFilters,
labelMap: Object.fromEntries(columnsLabelMap),
groupby,
selectedValues: filterState.selectedValues || [],

View File

@@ -36,7 +36,6 @@ export type EchartsSunburstFormData = QueryFormData & {
secondaryMetric?: QueryFormMetric;
colorScheme?: string;
linearColorScheme?: string;
emitFilter: boolean;
};
export enum EchartsSunburstLabelType {
@@ -51,7 +50,6 @@ export const DEFAULT_FORM_DATA: Partial<EchartsSunburstFormData> = {
labelType: EchartsSunburstLabelType.Key,
showLabels: false,
dateFormat: 'smart_date',
emitFilter: false,
};
export interface EchartsSunburstChartProps

View File

@@ -49,8 +49,9 @@ export default function EchartsTimeseries({
xValueFormatter,
xAxis,
refs,
emitCrossFilters,
}: TimeseriesChartTransformedProps) {
const { emitFilter, stack } = formData;
const { stack } = formData;
const echartRef = useRef<EchartsHandler | null>(null);
// eslint-disable-next-line no-param-reassign
refs.echartRef = echartRef;
@@ -109,7 +110,7 @@ export default function EchartsTimeseries({
const handleChange = useCallback(
(values: string[]) => {
if (!emitFilter) {
if (!emitCrossFilters) {
return;
}
const groupbyValues = values.map(value => labelMap[value]);
@@ -140,7 +141,7 @@ export default function EchartsTimeseries({
},
});
},
[groupby, labelMap, setDataMask, emitFilter],
[groupby, labelMap, setDataMask, emitCrossFilters],
);
const eventHandlers: EventHandlers = {

View File

@@ -57,7 +57,6 @@ export const DEFAULT_FORM_DATA: EchartsTimeseriesFormData = {
zoomable: false,
richTooltip: true,
xAxisLabelRotation: 0,
emitFilter: false,
groupby: [],
showValue: false,
onlyTotal: false,

View File

@@ -99,6 +99,7 @@ export default function transformProps(
datasource,
theme,
inContextMenu,
emitCrossFilters,
} = chartProps;
const { verboseMap = {} } = datasource;
const [queryData] = queriesData;
@@ -134,7 +135,6 @@ export default function transformProps(
richTooltip,
xAxis: xAxisOrig,
xAxisLabelRotation,
emitFilter,
groupby,
showValue,
onlyTotal,
@@ -448,7 +448,7 @@ export default function transformProps(
return {
echartOptions,
emitFilter,
emitCrossFilters,
formData,
groupby,
height,

View File

@@ -80,7 +80,6 @@ export type EchartsTimeseriesFormData = QueryFormData & {
zoomable: boolean;
richTooltip: boolean;
xAxisLabelRotation: number;
emitFilter: boolean;
groupby: QueryFormColumn[];
showValue: boolean;
onlyTotal: boolean;

View File

@@ -29,7 +29,7 @@ import { TreemapTransformedProps } from './types';
export default function EchartsTreemap({
echartOptions,
formData,
emitCrossFilters,
groupby,
height,
labelMap,
@@ -41,7 +41,7 @@ export default function EchartsTreemap({
}: TreemapTransformedProps) {
const handleChange = useCallback(
(values: string[]) => {
if (!formData.emitFilter) {
if (!emitCrossFilters) {
return;
}

View File

@@ -24,7 +24,6 @@ import {
D3_FORMAT_OPTIONS,
D3_TIME_FORMAT_OPTIONS,
sections,
emitFilterControl,
getStandardizedControls,
} from '@superset-ui/chart-controls';
import { DEFAULT_FORM_DATA } from './types';
@@ -55,7 +54,6 @@ const config: ControlPanelConfig = {
},
],
['adhoc_filters'],
emitFilterControl,
],
},
{

View File

@@ -117,6 +117,7 @@ export default function transformProps(
filterState,
theme,
inContextMenu,
emitCrossFilters,
} = chartProps;
const { data = [] } = queriesData[0];
const { setDataMask = () => {}, onContextMenu } = hooks;
@@ -133,7 +134,6 @@ export default function transformProps(
showLabels,
showUpperLabels,
dashboardId,
emitFilter,
sliceId,
}: EchartsTreemapFormData = {
...DEFAULT_TREEMAP_FORM_DATA,
@@ -288,7 +288,7 @@ export default function transformProps(
height,
echartOptions,
setDataMask,
emitFilter,
emitCrossFilters,
labelMap: Object.fromEntries(columnsLabelMap),
groupby,
selectedValues: filterState.selectedValues || [],

View File

@@ -43,7 +43,6 @@ export type EchartsTreemapFormData = QueryFormData & {
numberFormat: string;
dateFormat: string;
dashboardId?: number;
emitFilter: boolean;
};
export enum EchartsTreemapLabelType {
@@ -66,7 +65,6 @@ export const DEFAULT_FORM_DATA: Partial<EchartsTreemapFormData> = {
showLabels: true,
showUpperLabels: true,
dateFormat: 'smart_date',
emitFilter: false,
};
export interface TreemapSeriesCallbackDataParams extends CallbackDataParams {
treePathInfo?: TreePathInfo[];

View File

@@ -130,12 +130,12 @@ export interface BaseTransformedProps<F> {
}
export type CrossFilterTransformedProps = {
emitFilter: boolean;
groupby: QueryFormColumn[];
labelMap: Record<string, string[]>;
setControlValue?: HandlerFunction;
setDataMask: SetDataMaskHook;
selectedValues: Record<number, string>;
emitCrossFilters?: boolean;
};
export type ContextMenuTransformedProps = {

View File

@@ -27,7 +27,6 @@ import { BoxPlotQueryFormData } from '../../src/BoxPlot/types';
describe('BoxPlot buildQuery', () => {
const formData: BoxPlotQueryFormData = {
...DEFAULT_TITLE_FORM_DATA,
emitFilter: false,
columns: [],
datasource: '5__table',
granularity_sqla: 'ds',

View File

@@ -46,7 +46,6 @@ const formDataMixedChart = {
row_limit: 10,
timeseries_limit_metric: 'count',
order_desc: true,
emit_filter: true,
truncate_metric: true,
show_empty_columns: true,
// -- query b
@@ -63,7 +62,6 @@ const formDataMixedChart = {
row_limit_b: 100,
timeseries_limit_metric_b: undefined,
order_desc_b: false,
emit_filter_b: undefined,
truncate_metric_b: true,
show_empty_columns_b: true,
// chart configs