From a78a85edccaaaa249791089332e261873cb52b18 Mon Sep 17 00:00:00 2001 From: "Michael S. Molina" Date: Tue, 1 Aug 2023 16:10:58 -0300 Subject: [PATCH] fix: Explore misleading save action --- .../src/explore/actions/saveModalActions.js | 5 - .../src/explore/components/SaveModal.tsx | 205 +++++++++--------- .../src/explore/reducers/saveModalReducer.js | 3 - 3 files changed, 107 insertions(+), 106 deletions(-) diff --git a/superset-frontend/src/explore/actions/saveModalActions.js b/superset-frontend/src/explore/actions/saveModalActions.js index de4f7af84c37e..1a9970ab7582e 100644 --- a/superset-frontend/src/explore/actions/saveModalActions.js +++ b/superset-frontend/src/explore/actions/saveModalActions.js @@ -49,11 +49,6 @@ export function saveSliceSuccess(data) { return { type: SAVE_SLICE_SUCCESS, data }; } -export const REMOVE_SAVE_MODAL_ALERT = 'REMOVE_SAVE_MODAL_ALERT'; -export function removeSaveModalAlert() { - return { type: REMOVE_SAVE_MODAL_ALERT }; -} - const extractAddHocFiltersFromFormData = formDataToHandle => Object.entries(formDataToHandle).reduce( (acc, [key, value]) => diff --git a/superset-frontend/src/explore/components/SaveModal.tsx b/superset-frontend/src/explore/components/SaveModal.tsx index 592bab2f9f964..3142d6b75892a 100644 --- a/superset-frontend/src/explore/components/SaveModal.tsx +++ b/superset-frontend/src/explore/components/SaveModal.tsx @@ -67,7 +67,6 @@ interface SaveModalProps extends RouteComponentProps { type SaveModalState = { newSliceName?: string; datasetName: string; - alert: string | null; action: SaveActionType; isLoading: boolean; saveStatus?: string | null; @@ -92,7 +91,6 @@ class SaveModal extends React.Component { this.state = { newSliceName: props.sliceName, datasetName: props.datasource?.name, - alert: null, action: this.canOverwriteSlice() ? 'overwrite' : 'saveas', isLoading: false, vizType: props.form_data?.viz_type, @@ -103,7 +101,6 @@ class SaveModal extends React.Component { this.changeAction = this.changeAction.bind(this); this.saveOrOverwrite = this.saveOrOverwrite.bind(this); this.isNewDashboard = this.isNewDashboard.bind(this); - this.removeAlert = this.removeAlert.bind(this); this.onHide = this.onHide.bind(this); } @@ -163,8 +160,7 @@ class SaveModal extends React.Component { } async saveOrOverwrite(gotodash: boolean) { - this.setState({ alert: null, isLoading: true }); - this.props.actions.removeSaveModalAlert(); + this.setState({ isLoading: true }); // Create or retrieve dashboard type DashboardGetResponse = { @@ -324,89 +320,115 @@ class SaveModal extends React.Component { }; }; - renderSaveChartModal = () => ( -
- {(this.state.alert || this.props.alert) && ( - - )} - - this.changeAction('overwrite')} - data-test="save-overwrite-radio" - > - {t('Save (Overwrite)')} - - this.changeAction('saveas')} - > - {t('Save as...')} - - -
- - - - {this.props.datasource?.type === 'query' && ( - - + renderSaveChartModal = () => { + const info = this.info(); + return ( + + + this.changeAction('overwrite')} + data-test="save-overwrite-radio" + > + {t('Save (Overwrite)')} + + this.changeAction('saveas')} + > + {t('Save as...')} + + +
+ - )} - {!( - isFeatureEnabled(FeatureFlag.DASHBOARD_NATIVE_FILTERS) && - this.state.vizType === 'filter_box' - ) && ( - - - {t('Select')} - {t(' a dashboard OR ')} - {t('create')} - {t(' a new one')} - - } + {this.props.datasource?.type === 'query' && ( + + + + + )} + {!( + isFeatureEnabled(FeatureFlag.DASHBOARD_NATIVE_FILTERS) && + this.state.vizType === 'filter_box' + ) && ( + + + {t('Select')} + {t(' a dashboard OR ')} + {t('create')} + {t(' a new one')} + + } + /> + + )} + {info && } + {this.props.alert && ( + - - )} - - ); + )} + + ); + }; + + info = () => { + const isNewDashboard = this.isNewDashboard(); + let chartWillBeCreated = false; + if ( + this.props.slice && + (this.state.action !== 'overwrite' || !this.canOverwriteSlice()) + ) { + chartWillBeCreated = true; + } + if (chartWillBeCreated && isNewDashboard) { + return t('A new chart and dashboard will be created.'); + } + if (chartWillBeCreated) { + return t('A new chart will be created.'); + } + if (isNewDashboard) { + return t('A new dashboard will be created.'); + } + return null; + }; renderFooter = () => (
@@ -426,9 +448,7 @@ class SaveModal extends React.Component { } onClick={() => this.saveOrOverwrite(true)} > - {this.isNewDashboard() - ? t('Save & go to new dashboard') - : t('Save & go to dashboard')} + {t('Save & go to dashboard')}
); - removeAlert() { - if (this.props.alert) { - this.props.actions.removeSaveModalAlert(); - } - this.setState({ alert: null }); - } - render() { return (