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 { PieChartTransformedProps } from './types';
import Echart from '../components/Echart';
import { EventHandlers } from '../types';
import { allEventHandlers } from '../utils/eventHandlers';
export default function EchartsPie({
height,
width,
echartOptions,
setDataMask,
labelMap,
groupby,
selectedValues,
formData,
}: PieChartTransformedProps) {
export default function EchartsPie(props: PieChartTransformedProps) {
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 EchartsPie({
[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

@@ -134,8 +134,16 @@ function getTotalValuePadding({
export default function transformProps(
chartProps: EchartsPieChartProps,
): PieChartTransformedProps {
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]);
@@ -193,7 +201,7 @@ export default function transformProps(
{},
);
const { setDataMask = () => {} } = hooks;
const { setDataMask = () => {}, onContextMenu } = hooks;
const colorFn = CategoricalColorNamespace.getScale(colorScheme as string);
const numberFormatter = getNumberFormatter(numberFormat);
@@ -296,6 +304,7 @@ export default function transformProps(
...defaultGrid,
},
tooltip: {
show: !inContextMenu,
...defaultTooltip,
trigger: 'item',
formatter: (params: any) =>
@@ -335,5 +344,6 @@ export default function transformProps(
labelMap,
groupby,
selectedValues,
onContextMenu,
};
}

View File

@@ -16,16 +16,18 @@
* specific language governing permissions and limitations
* under the License.
*/
import { EChartsCoreOption } from 'echarts';
import {
ChartDataResponseResult,
ChartProps,
DataRecordValue,
QueryFormColumn,
QueryFormData,
SetDataMaskHook,
} from '@superset-ui/core';
import { EchartsLegendFormData, LegendOrientation, LegendType } from '../types';
import {
EchartsLegendFormData,
EChartTransformedProps,
LegendOrientation,
LegendType,
} from '../types';
import { DEFAULT_LEGEND_FORM_DATA } from '../constants';
export type EchartsPieFormData = QueryFormData &
@@ -81,14 +83,5 @@ export const DEFAULT_FORM_DATA: EchartsPieFormData = {
dateFormat: 'smart_date',
};
export interface PieChartTransformedProps {
formData: EchartsPieFormData;
height: number;
width: number;
echartOptions: EChartsCoreOption;
emitFilter: boolean;
setDataMask: SetDataMaskHook;
labelMap: Record<string, DataRecordValue[]>;
groupby: QueryFormColumn[];
selectedValues: Record<number, string>;
}
export type PieChartTransformedProps =
EChartTransformedProps<EchartsPieFormData>;