fix(plugin-chart-table): Resetting controls when switching query mode (#19792)

This commit is contained in:
Kamil Gabryjelski 2022-04-20 17:25:31 +02:00 committed by GitHub
parent 9c20299039
commit fcc8080ff3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 1 deletions

View File

@ -117,6 +117,7 @@ const all_columns: typeof sharedControls.groupby = {
: [], : [],
}), }),
visibility: isRawMode, visibility: isRawMode,
resetOnHide: false,
}; };
const dnd_all_columns: typeof sharedControls.groupby = { const dnd_all_columns: typeof sharedControls.groupby = {
@ -140,6 +141,7 @@ const dnd_all_columns: typeof sharedControls.groupby = {
return newState; return newState;
}, },
visibility: isRawMode, visibility: isRawMode,
resetOnHide: false,
}; };
const percent_metrics: typeof sharedControls.metrics = { const percent_metrics: typeof sharedControls.metrics = {
@ -150,6 +152,7 @@ const percent_metrics: typeof sharedControls.metrics = {
), ),
multi: true, multi: true,
visibility: isAggMode, visibility: isAggMode,
resetOnHide: false,
mapStateToProps: ({ datasource, controls }, controlState) => ({ mapStateToProps: ({ datasource, controls }, controlState) => ({
columns: datasource?.columns || [], columns: datasource?.columns || [],
savedMetrics: datasource?.metrics || [], savedMetrics: datasource?.metrics || [],
@ -190,6 +193,7 @@ const config: ControlPanelConfig = {
name: 'groupby', name: 'groupby',
override: { override: {
visibility: isAggMode, visibility: isAggMode,
resetOnHide: false,
mapStateToProps: ( mapStateToProps: (
state: ControlPanelState, state: ControlPanelState,
controlState: ControlState, controlState: ControlState,
@ -220,6 +224,7 @@ const config: ControlPanelConfig = {
override: { override: {
validators: [], validators: [],
visibility: isAggMode, visibility: isAggMode,
resetOnHide: false,
mapStateToProps: ( mapStateToProps: (
{ controls, datasource, form_data }: ControlPanelState, { controls, datasource, form_data }: ControlPanelState,
controlState: ControlState, controlState: ControlState,
@ -263,6 +268,7 @@ const config: ControlPanelConfig = {
name: 'timeseries_limit_metric', name: 'timeseries_limit_metric',
override: { override: {
visibility: isAggMode, visibility: isAggMode,
resetOnHide: false,
}, },
}, },
{ {
@ -277,6 +283,7 @@ const config: ControlPanelConfig = {
choices: datasource?.order_by_choices || [], choices: datasource?.order_by_choices || [],
}), }),
visibility: isRawMode, visibility: isRawMode,
resetOnHide: false,
}, },
}, },
], ],
@ -329,6 +336,7 @@ const config: ControlPanelConfig = {
), ),
default: false, default: false,
visibility: isAggMode, visibility: isAggMode,
resetOnHide: false,
}, },
}, },
{ {
@ -339,6 +347,7 @@ const config: ControlPanelConfig = {
default: true, default: true,
description: t('Whether to sort descending or ascending'), description: t('Whether to sort descending or ascending'),
visibility: isAggMode, visibility: isAggMode,
resetOnHide: false,
}, },
}, },
], ],
@ -353,6 +362,7 @@ const config: ControlPanelConfig = {
'Show total aggregations of selected metrics. Note that row limit does not apply to the result.', 'Show total aggregations of selected metrics. Note that row limit does not apply to the result.',
), ),
visibility: isAggMode, visibility: isAggMode,
resetOnHide: false,
}, },
}, },
], ],

View File

@ -46,6 +46,7 @@ export type ControlProps = {
renderTrigger?: boolean; renderTrigger?: boolean;
default?: JsonValue; default?: JsonValue;
isVisible?: boolean; isVisible?: boolean;
resetOnHide?: boolean;
}; };
/** /**
@ -65,6 +66,7 @@ export default function Control(props: ControlProps) {
type, type,
hidden, hidden,
isVisible, isVisible,
resetOnHide = true,
} = props; } = props;
const [hovered, setHovered] = useState(false); const [hovered, setHovered] = useState(false);
@ -79,7 +81,8 @@ export default function Control(props: ControlProps) {
wasVisible === true && wasVisible === true &&
isVisible === false && isVisible === false &&
props.default !== undefined && props.default !== undefined &&
!isEqual(props.value, props.default) !isEqual(props.value, props.default) &&
resetOnHide
) { ) {
// reset control value if setting to invisible // reset control value if setting to invisible
setControlValue?.(name, props.default); setControlValue?.(name, props.default);