You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by er...@apache.org on 2020/05/08 17:51:20 UTC

[incubator-superset] branch master updated: fix bug where error at import dashboard fails to show toast in "welcome" app (#9714)

This is an automated email from the ASF dual-hosted git repository.

erikrit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git


The following commit(s) were added to refs/heads/master by this push:
     new b6df5da  fix bug where error at import dashboard fails to show toast in "welcome" app (#9714)
b6df5da is described below

commit b6df5da1950f2c88a89b9a430d4e8a59006a36d3
Author: Phillip Kelley-Dotson <pk...@yahoo.com>
AuthorDate: Fri May 8 10:50:55 2020 -0700

    fix bug where error at import dashboard fails to show toast in "welcome" app (#9714)
    
    * fix bug where error at import dashboard fails
    
    * fix: make reusable component for messages and bring to app level
    
    * fix: add liscence
    
    * fix: lint errors and tests
    
    * fix
    
    * fix: lint
    
    * fix: lint error
    
    * add suggestions
    
    * add suggestions
    
    Co-authored-by: Phillip Kelley-Dotson <pk...@pkd.lan>
---
 superset-frontend/src/components/FlashProvider.tsx | 53 +++++++++++++++++++
 .../src/views/dashboardList/DashboardList.tsx      |  1 -
 superset-frontend/src/welcome/App.jsx              | 61 ++++++++++++----------
 3 files changed, 85 insertions(+), 30 deletions(-)

diff --git a/superset-frontend/src/components/FlashProvider.tsx b/superset-frontend/src/components/FlashProvider.tsx
new file mode 100644
index 0000000..d4b1ddb
--- /dev/null
+++ b/superset-frontend/src/components/FlashProvider.tsx
@@ -0,0 +1,53 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import React from 'react';
+import withToasts from 'src/messageToasts/enhancers/withToasts';
+
+type Message = Array<string>;
+
+interface CommonObject {
+  flash_messages: Array<Message>;
+}
+interface Props {
+  children: Node;
+  common: CommonObject;
+}
+
+const flashObj = {
+  info: 'addInfoToast',
+  danger: 'addDangerToast',
+  warning: 'addWarningToast',
+  success: 'addSuccessToast',
+};
+
+class FlashProvider extends React.PureComponent<Props> {
+  componentDidMount() {
+    const flashMessages = this.props.common.flash_messages;
+    flashMessages.forEach(message => {
+      const [type, text] = message;
+      const flash = flashObj[type];
+      this.props[flash](text);
+    });
+  }
+  render() {
+    return this.props.children;
+  }
+}
+
+export default withToasts(FlashProvider);
diff --git a/superset-frontend/src/views/dashboardList/DashboardList.tsx b/superset-frontend/src/views/dashboardList/DashboardList.tsx
index 25569af..912c76d 100644
--- a/superset-frontend/src/views/dashboardList/DashboardList.tsx
+++ b/superset-frontend/src/views/dashboardList/DashboardList.tsx
@@ -482,7 +482,6 @@ class DashboardList extends React.PureComponent<Props, State> {
       filters,
       dashboardToEdit,
     } = this.state;
-
     return (
       <div className="container welcome">
         <Panel>
diff --git a/superset-frontend/src/welcome/App.jsx b/superset-frontend/src/welcome/App.jsx
index 9cef320..f4a65b6 100644
--- a/superset-frontend/src/welcome/App.jsx
+++ b/superset-frontend/src/welcome/App.jsx
@@ -29,6 +29,7 @@ import { initFeatureFlags } from 'src/featureFlags';
 import { supersetTheme } from '@superset-ui/style';
 import ErrorBoundary from 'src/components/ErrorBoundary';
 import Menu from 'src/components/Menu/Menu';
+import FlashProvider from 'src/components/FlashProvider';
 import DashboardList from 'src/views/dashboardList/DashboardList';
 import ChartList from 'src/views/chartList/ChartList';
 import DatasetList from 'src/views/datasetList/DatasetList';
@@ -47,7 +48,7 @@ const container = document.getElementById('app');
 const bootstrap = JSON.parse(container.getAttribute('data-bootstrap'));
 const user = { ...bootstrap.user };
 const menu = { ...bootstrap.common.menu_data };
-
+const common = { ...bootstrap.common };
 initFeatureFlags(bootstrap.common.feature_flags);
 
 const store = createStore(
@@ -61,34 +62,36 @@ const store = createStore(
 const App = () => (
   <Provider store={store}>
     <ThemeProvider theme={supersetTheme}>
-      <Router>
-        <QueryParamProvider ReactRouterRoute={Route}>
-          <Menu data={menu} />
-          <Switch>
-            <Route path="/superset/welcome/">
-              <ErrorBoundary>
-                <Welcome user={user} />
-              </ErrorBoundary>
-            </Route>
-            <Route path="/dashboard/list/">
-              <ErrorBoundary>
-                <DashboardList user={user} />
-              </ErrorBoundary>
-            </Route>
-            <Route path="/chart/list/">
-              <ErrorBoundary>
-                <ChartList user={user} />
-              </ErrorBoundary>
-            </Route>
-            <Route path="/tablemodelview/list/">
-              <ErrorBoundary>
-                <DatasetList user={user} />
-              </ErrorBoundary>
-            </Route>
-          </Switch>
-          <ToastPresenter />
-        </QueryParamProvider>
-      </Router>
+      <FlashProvider common={common}>
+        <Router>
+          <QueryParamProvider ReactRouterRoute={Route}>
+            <Menu data={menu} />
+            <Switch>
+              <Route path="/superset/welcome/">
+                <ErrorBoundary>
+                  <Welcome user={user} />
+                </ErrorBoundary>
+              </Route>
+              <Route path="/dashboard/list/">
+                <ErrorBoundary>
+                  <DashboardList user={user} />
+                </ErrorBoundary>
+              </Route>
+              <Route path="/chart/list/">
+                <ErrorBoundary>
+                  <ChartList user={user} />
+                </ErrorBoundary>
+              </Route>
+              <Route path="/tablemodelview/list/">
+                <ErrorBoundary>
+                  <DatasetList user={user} />
+                </ErrorBoundary>
+              </Route>
+            </Switch>
+            <ToastPresenter />
+          </QueryParamProvider>
+        </Router>
+      </FlashProvider>
     </ThemeProvider>
   </Provider>
 );