feat: Adds drill to detail context menu for ECharts visualizations (#20891)

* feat: Adds drill to detail context menu for ECharts visualizations

* Rebases and adds time grain

* Fixes selected gauge values

* Fixes Treemap edge click

* Adds right click to big number trendline

* Address some comments
This commit is contained in:
Michael S. Molina
2022-08-09 17:02:31 -03:00
committed by GitHub
parent 0042ade66f
commit 3df8335f87
38 changed files with 734 additions and 249 deletions

View File

@@ -19,18 +19,19 @@
import React, { useCallback } from 'react';
import { RadarChartTransformedProps } from './types';
import Echart from '../components/Echart';
import { EventHandlers } from '../types';
import { allEventHandlers } from '../utils/eventHandlers';
export default function EchartsRadar({
height,
width,
echartOptions,
setDataMask,
labelMap,
groupby,
selectedValues,
formData,
}: RadarChartTransformedProps) {
export default function EchartsRadar(props: RadarChartTransformedProps) {
const {
height,
width,
echartOptions,
setDataMask,
labelMap,
groupby,
selectedValues,
formData,
} = props;
const handleChange = useCallback(
(values: string[]) => {
if (!formData.emitFilter) {
@@ -67,17 +68,7 @@ export default function EchartsRadar({
[groupby, labelMap, setDataMask, selectedValues],
);
const eventHandlers: EventHandlers = {
click: props => {
const { name } = props;
const values = Object.values(selectedValues);
if (values.includes(name)) {
handleChange(values.filter(v => v !== name));
} else {
handleChange([name]);
}
},
};
const eventHandlers = allEventHandlers(props, handleChange);
return (
<Echart

View File

@@ -70,8 +70,16 @@ export function formatLabel({
export default function transformProps(
chartProps: EchartsRadarChartProps,
): RadarChartTransformedProps {
const { formData, height, hooks, filterState, queriesData, width, theme } =
chartProps;
const {
formData,
height,
hooks,
filterState,
queriesData,
width,
theme,
inContextMenu,
} = chartProps;
const { data = [] } = queriesData[0];
const coltypeMapping = getColtypesMapping(queriesData[0]);
@@ -91,12 +99,13 @@ export default function transformProps(
isCircle,
columnConfig,
sliceId,
emitFilter,
}: EchartsRadarFormData = {
...DEFAULT_LEGEND_FORM_DATA,
...DEFAULT_RADAR_FORM_DATA,
...formData,
};
const { setDataMask = () => {} } = hooks;
const { setDataMask = () => {}, onContextMenu } = hooks;
const colorFn = CategoricalColorNamespace.getScale(colorScheme as string);
const numberFormatter = getNumberFormatter(numberFormat);
@@ -222,6 +231,7 @@ export default function transformProps(
},
tooltip: {
...defaultTooltip,
show: !inContextMenu,
trigger: 'item',
},
legend: {
@@ -240,9 +250,11 @@ export default function transformProps(
width,
height,
echartOptions,
emitFilter,
setDataMask,
labelMap: Object.fromEntries(columnsLabelMap),
groupby,
selectedValues,
onContextMenu,
};
}

View File

@@ -16,18 +16,16 @@
* specific language governing permissions and limitations
* under the License.
*/
import { EChartsCoreOption } from 'echarts';
import {
ChartDataResponseResult,
ChartProps,
DataRecordValue,
QueryFormColumn,
QueryFormData,
QueryFormMetric,
SetDataMaskHook,
} from '@superset-ui/core';
import {
EchartsLegendFormData,
EChartTransformedProps,
LabelPositionEnum,
LegendOrientation,
LegendType,
@@ -79,13 +77,5 @@ export const DEFAULT_FORM_DATA: EchartsRadarFormData = {
isCircle: false,
};
export interface RadarChartTransformedProps {
formData: EchartsRadarFormData;
height: number;
width: number;
echartOptions: EChartsCoreOption;
setDataMask: SetDataMaskHook;
labelMap: Record<string, DataRecordValue[]>;
groupby: QueryFormColumn[];
selectedValues: Record<number, string>;
}
export type RadarChartTransformedProps =
EChartTransformedProps<EchartsRadarFormData>;