This is an automated email from the ASF dual-hosted git repository. lyndsi pushed a commit to branch lyndsi/split-save-btn in repository https://gitbox.apache.org/repos/asf/superset.git
commit 61bdc42398bc3e8f458d1ba27536a4322b8e5097 Author: lyndsiWilliams <[email protected]> AuthorDate: Mon Jul 25 14:40:59 2022 -0500 Addressed review comments --- .../src/SqlLab/components/ResultSet/index.tsx | 38 +++++++++++++++------- .../components/SaveDatasetActionButton/index.tsx | 8 ++--- .../src/SqlLab/components/SaveQuery/index.tsx | 4 +-- superset-frontend/src/components/Chart/Chart.jsx | 21 ------------ .../src/components/Chart/ChartErrorMessage.tsx | 1 + 5 files changed, 32 insertions(+), 40 deletions(-) diff --git a/superset-frontend/src/SqlLab/components/ResultSet/index.tsx b/superset-frontend/src/SqlLab/components/ResultSet/index.tsx index c3d9a54d1e..daba987802 100644 --- a/superset-frontend/src/SqlLab/components/ResultSet/index.tsx +++ b/superset-frontend/src/SqlLab/components/ResultSet/index.tsx @@ -29,14 +29,19 @@ import { SaveDatasetModal, } from 'src/SqlLab/components/SaveDatasetModal'; import { UserWithPermissionsAndRoles } from 'src/types/bootstrapTypes'; +import { EXPLORE_CHART_DEFAULT } from 'src/SqlLab/types'; +import { mountExploreUrl } from 'src/explore/exploreUtils'; +import { postFormData } from 'src/explore/exploreUtils/formData'; import ProgressBar from 'src/components/ProgressBar'; import Loading from 'src/components/Loading'; import FilterableTable, { MAX_COLUMNS_FOR_TABLE, } from 'src/components/FilterableTable'; import CopyToClipboard from 'src/components/CopyToClipboard'; +import { addDangerToast } from 'src/components/MessageToasts/actions'; import { prepareCopyToClipboardTabularData } from 'src/utils/common'; import { CtasEnum } from 'src/SqlLab/actions/sqlLab'; +import { URL_PARAMS } from 'src/constants'; import ExploreCtasResultsButton from '../ExploreCtasResultsButton'; import ExploreResultsButton from '../ExploreResultsButton'; import HighlightedSql from '../HighlightedSql'; @@ -213,6 +218,26 @@ export default class ResultSet extends React.PureComponent< } } + createExploreResultsOnClick = async () => { + const { results } = this.props.query; + + if (results?.query_id) { + const key = await postFormData(results.query_id, 'query', { + ...EXPLORE_CHART_DEFAULT, + datasource: `${results.query_id}__query`, + ...{ + all_columns: results.columns.map(column => column.name), + }, + }); + const url = mountExploreUrl(null, { + [URL_PARAMS.formDataKey.name]: key, + }); + window.open(url, '_blank', 'noreferrer'); + } else { + addDangerToast(t('Unable to create chart without a query id.')); + } + }; + renderControls() { if (this.props.search || this.props.visualize || this.props.csv) { let { data } = this.props.query.results; @@ -250,18 +275,7 @@ export default class ResultSet extends React.PureComponent< this.props.database?.allows_virtual_table_explore && ( <ExploreResultsButton database={this.props.database} - onClick={() => { - // There is currently redux / state issue where sometimes a query will have serverId - // and other times it will not. We need this attribute consistently for this to work - // const qid = this.props?.query?.results?.query_id; - // if (qid) { - // // This will open explore using the query as datasource - // window.location.href = `/explore/?dataset_type=query&dataset_id=${qid}`; - // } else { - // this.setState({ showSaveDatasetModal: true }); - // } - this.setState({ showSaveDatasetModal: true }); - }} + onClick={() => this.setState({ showSaveDatasetModal: true })} /> )} {this.props.csv && ( diff --git a/superset-frontend/src/SqlLab/components/SaveDatasetActionButton/index.tsx b/superset-frontend/src/SqlLab/components/SaveDatasetActionButton/index.tsx index 8a6e7a41ec..42095643a6 100644 --- a/superset-frontend/src/SqlLab/components/SaveDatasetActionButton/index.tsx +++ b/superset-frontend/src/SqlLab/components/SaveDatasetActionButton/index.tsx @@ -24,12 +24,12 @@ import Button from 'src/components/Button'; import { DropdownButtonProps } from 'antd/lib/dropdown'; interface Props { - toggleSave: () => void; + setShowSave: (arg0: boolean) => void; overlayMenu: JSX.Element | null; } export default function SaveDatasetActionButton({ - toggleSave, + setShowSave, overlayMenu, }: Props) { const theme = useTheme(); @@ -58,7 +58,7 @@ export default function SaveDatasetActionButton({ return !overlayMenu ? ( <Button - onClick={toggleSave} + onClick={() => setShowSave(true)} buttonStyle="primary" css={{ width: theme.gridUnit * 25 }} > @@ -66,7 +66,7 @@ export default function SaveDatasetActionButton({ </Button> ) : ( <StyledDropdownButton - onClick={toggleSave} + onClick={() => setShowSave(true)} overlay={overlayMenu} icon={ <Icons.CaretDown diff --git a/superset-frontend/src/SqlLab/components/SaveQuery/index.tsx b/superset-frontend/src/SqlLab/components/SaveQuery/index.tsx index 6fb4a4ffcc..1b02fa9315 100644 --- a/superset-frontend/src/SqlLab/components/SaveQuery/index.tsx +++ b/superset-frontend/src/SqlLab/components/SaveQuery/index.tsx @@ -129,8 +129,6 @@ export default function SaveQuery({ setDescription(e.target.value); }; - const toggleSave = () => setShowSave(!showSave); - const renderModalBody = () => ( <Form layout="vertical"> <Row> @@ -171,7 +169,7 @@ export default function SaveQuery({ return ( <Styles className="SaveQuery"> <SaveDatasetActionButton - toggleSave={toggleSave} + setShowSave={setShowSave} overlayMenu={canExploreDatabase ? overlayMenu : null} /> <SaveDatasetModal diff --git a/superset-frontend/src/components/Chart/Chart.jsx b/superset-frontend/src/components/Chart/Chart.jsx index 48f59c0b5d..5792d6970a 100644 --- a/superset-frontend/src/components/Chart/Chart.jsx +++ b/superset-frontend/src/components/Chart/Chart.jsx @@ -25,7 +25,6 @@ import { PLACEHOLDER_DATASOURCE } from 'src/dashboard/constants'; import Loading from 'src/components/Loading'; import { EmptyStateBig } from 'src/components/EmptyState'; import ErrorBoundary from 'src/components/ErrorBoundary'; -import { SaveDatasetModal } from 'src/SqlLab/components/SaveDatasetModal'; import { Logger, LOG_ACTIONS_RENDER_CHART } from 'src/logger/LogUtils'; import { URL_PARAMS } from 'src/constants'; import { getUrlParam } from 'src/utils/urlUtils'; @@ -123,10 +122,8 @@ const MonospaceDiv = styled.div` class Chart extends React.PureComponent { constructor(props) { super(props); - this.state = { showSaveDatasetModal: false }; this.handleRenderContainerFailure = this.handleRenderContainerFailure.bind(this); - this.toggleSaveDatasetModal = this.toggleSaveDatasetModal.bind(this); } componentDidMount() { @@ -139,12 +136,6 @@ class Chart extends React.PureComponent { } } - toggleSaveDatasetModal = () => { - this.setState(({ showSaveDatasetModal }) => ({ - showSaveDatasetModal: !showSaveDatasetModal, - })); - }; - componentDidUpdate() { // during migration, hold chart queries before user choose review or cancel if ( @@ -245,7 +236,6 @@ class Chart extends React.PureComponent { link={queryResponse ? queryResponse.link : null} source={dashboardId ? 'dashboard' : 'explore'} stackTrace={chartStackTrace} - errorMitigationFunction={this.toggleSaveDatasetModal} /> ); } @@ -262,7 +252,6 @@ class Chart extends React.PureComponent { width, } = this.props; - const { showSaveDatasetModal } = this.state; const isLoading = chartStatus === 'loading'; this.renderContainerStartTime = Logger.getTimestamp(); if (chartStatus === 'failed') { @@ -328,16 +317,6 @@ class Chart extends React.PureComponent { {isLoading && !isDeactivatedViz && <Loading />} </Styles> </ErrorBoundary> - {showSaveDatasetModal && ( - <SaveDatasetModal - key={Math.random()} - visible={showSaveDatasetModal} - onHide={this.toggleSaveDatasetModal} - buttonTextOnSave={t('Save')} - buttonTextOnOverwrite={t('Overwrite')} - datasource={this.props.datasource} - /> - )} </> ); } diff --git a/superset-frontend/src/components/Chart/ChartErrorMessage.tsx b/superset-frontend/src/components/Chart/ChartErrorMessage.tsx index 162abd0d98..077ca2282a 100644 --- a/superset-frontend/src/components/Chart/ChartErrorMessage.tsx +++ b/superset-frontend/src/components/Chart/ChartErrorMessage.tsx @@ -42,5 +42,6 @@ export const ChartErrorMessage: React.FC<Props> = ({ ...error, extra: { ...error.extra, owners }, }; + return <ErrorMessageWithStackTrace {...props} error={ownedError} />; };
