From 094f35fa0b4f3ef590e35dacad5bf634d594749a Mon Sep 17 00:00:00 2001 From: cccs-jc <56140112+cccs-jc@users.noreply.github.com> Date: Tue, 3 Aug 2021 11:07:33 -0400 Subject: [PATCH] feat(plugin-chart-table): added emit target name (#1157) * added emit target name * code review fix * code review fix * liting Co-authored-by: cccs-jc --- .../ColumnConfigControl/ColumnConfigControl.tsx | 17 +++++++++++++++++ .../ColumnConfigControl/constants.tsx | 13 +++++++++++++ .../plugin-chart-table/src/TableChart.tsx | 14 ++++++++++---- .../plugin-chart-table/src/controlPanel.tsx | 1 + 4 files changed, 41 insertions(+), 4 deletions(-) diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-chart-controls/src/shared-controls/components/ColumnConfigControl/ColumnConfigControl.tsx b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-chart-controls/src/shared-controls/components/ColumnConfigControl/ColumnConfigControl.tsx index 385244760d07..9021a34801e8 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-chart-controls/src/shared-controls/components/ColumnConfigControl/ColumnConfigControl.tsx +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-chart-controls/src/shared-controls/components/ColumnConfigControl/ColumnConfigControl.tsx @@ -32,6 +32,7 @@ export type ColumnConfigControlProps = ControlComponentP queryResponse?: ChartDataResponseResult; configFormLayout?: ColumnConfigFormLayout; appliedColumnNames?: string[]; + emitFilter: boolean; }; /** @@ -48,8 +49,24 @@ export default function ColumnConfigControl({ value, onChange, configFormLayout = DEFAULT_CONFIG_FORM_LAYOUT, + emitFilter, ...props }: ColumnConfigControlProps) { + if (emitFilter) { + Object.values(configFormLayout).forEach(array_of_array => { + if (!array_of_array.some(arr => arr.includes('emitTarget'))) { + array_of_array.push(['emitTarget']); + } + }); + } else { + Object.values(configFormLayout).forEach(array_of_array => { + const index = array_of_array.findIndex(arr => arr.includes('emitTarget')); + if (index > -1) { + array_of_array.splice(index, 1); + } + }); + } + const { colnames: _colnames, coltypes: _coltypes } = queryResponse || {}; let colnames: string[] = []; let coltypes: GenericDataType[] = []; diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-chart-controls/src/shared-controls/components/ColumnConfigControl/constants.tsx b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-chart-controls/src/shared-controls/components/ColumnConfigControl/constants.tsx index 1cfe1b521fd6..b15ae5152796 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-chart-controls/src/shared-controls/components/ColumnConfigControl/constants.tsx +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-chart-controls/src/shared-controls/components/ColumnConfigControl/constants.tsx @@ -35,12 +35,24 @@ export type SharedColumnConfigProp = | 'colorPositiveNegative' | 'columnWidth' | 'fractionDigits' + | 'emitTarget' | 'd3NumberFormat' | 'd3SmallNumberFormat' | 'd3TimeFormat' | 'horizontalAlign' | 'showCellBars'; +const emitTarget: ControlFormItemSpec<'Input'> = { + controlType: 'Input', + label: t('Emit Target'), + description: t( + 'If you wish to specify a different target column than the original column, it can be entered here', + ), + defaultValue: '', + debounceDelay: 500, + validators: undefined, +}; + const d3NumberFormat: ControlFormItemSpec<'Select'> = { controlType: 'Select', label: t('D3 format'), @@ -131,6 +143,7 @@ const colorPositiveNegative: ControlFormItemSpec<'Checkbox'> = { */ export const SHARED_COLUMN_CONFIG_PROPS = { d3NumberFormat, + emitTarget, d3SmallNumberFormat: { ...d3NumberFormat, label: t('Small number format'), diff --git a/superset-frontend/temporary_superset_ui/superset-ui/plugins/plugin-chart-table/src/TableChart.tsx b/superset-frontend/temporary_superset_ui/superset-ui/plugins/plugin-chart-table/src/TableChart.tsx index b925dcdd8af1..cae47e7bdb2d 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/plugins/plugin-chart-table/src/TableChart.tsx +++ b/superset-frontend/temporary_superset_ui/superset-ui/plugins/plugin-chart-table/src/TableChart.tsx @@ -232,18 +232,24 @@ export default function TableChart( [filters], ); + function getEmitTarget(col: string) { + const meta = columnsMeta?.find(x => x.key === col); + return meta?.config?.emitTarget || col; + } + const toggleFilter = useCallback( function toggleFilter(key: string, val: DataRecordValue) { let updatedFilters = { ...(filters || {}) }; - if (filters && isActiveFilterValue(key, val)) { + const target = getEmitTarget(key); + if (filters && isActiveFilterValue(target, val)) { updatedFilters = {}; } else { updatedFilters = { - [key]: [val], + [target]: [val], }; } - if (Array.isArray(updatedFilters[key]) && updatedFilters[key].length === 0) { - delete updatedFilters[key]; + if (Array.isArray(updatedFilters[target]) && updatedFilters[target].length === 0) { + delete updatedFilters[target]; } handleChange(updatedFilters); }, diff --git a/superset-frontend/temporary_superset_ui/superset-ui/plugins/plugin-chart-table/src/controlPanel.tsx b/superset-frontend/temporary_superset_ui/superset-ui/plugins/plugin-chart-table/src/controlPanel.tsx index 7041df515bee..855e46ef369e 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/plugins/plugin-chart-table/src/controlPanel.tsx +++ b/superset-frontend/temporary_superset_ui/superset-ui/plugins/plugin-chart-table/src/controlPanel.tsx @@ -434,6 +434,7 @@ const config: ControlPanelConfig = { mapStateToProps(explore, control, chart) { return { queryResponse: chart?.queriesResponse?.[0] as ChartDataResponseResult | undefined, + emitFilter: explore?.controls?.table_filter?.value, }; }, },