diff --git a/superset-frontend/src/components/FlashProvider.tsx b/superset-frontend/src/components/FlashProvider.tsx new file mode 100644 index 000000000..d4b1ddbff --- /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; + +interface CommonObject { + flash_messages: Array; +} +interface Props { + children: Node; + common: CommonObject; +} + +const flashObj = { + info: 'addInfoToast', + danger: 'addDangerToast', + warning: 'addWarningToast', + success: 'addSuccessToast', +}; + +class FlashProvider extends React.PureComponent { + 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 25569afa8..912c76d36 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 { filters, dashboardToEdit, } = this.state; - return (
diff --git a/superset-frontend/src/welcome/App.jsx b/superset-frontend/src/welcome/App.jsx index 9cef3206b..f4a65b62c 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 = () => ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + );