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} />;
 };

Reply via email to