mirror of https://github.com/apache/superset.git
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 <pkd@pkd.lan>
This commit is contained in:
parent
3a213916c4
commit
b6df5da195
|
@ -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);
|
|
@ -482,7 +482,6 @@ class DashboardList extends React.PureComponent<Props, State> {
|
||||||
filters,
|
filters,
|
||||||
dashboardToEdit,
|
dashboardToEdit,
|
||||||
} = this.state;
|
} = this.state;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="container welcome">
|
<div className="container welcome">
|
||||||
<Panel>
|
<Panel>
|
||||||
|
|
|
@ -29,6 +29,7 @@ import { initFeatureFlags } from 'src/featureFlags';
|
||||||
import { supersetTheme } from '@superset-ui/style';
|
import { supersetTheme } from '@superset-ui/style';
|
||||||
import ErrorBoundary from 'src/components/ErrorBoundary';
|
import ErrorBoundary from 'src/components/ErrorBoundary';
|
||||||
import Menu from 'src/components/Menu/Menu';
|
import Menu from 'src/components/Menu/Menu';
|
||||||
|
import FlashProvider from 'src/components/FlashProvider';
|
||||||
import DashboardList from 'src/views/dashboardList/DashboardList';
|
import DashboardList from 'src/views/dashboardList/DashboardList';
|
||||||
import ChartList from 'src/views/chartList/ChartList';
|
import ChartList from 'src/views/chartList/ChartList';
|
||||||
import DatasetList from 'src/views/datasetList/DatasetList';
|
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 bootstrap = JSON.parse(container.getAttribute('data-bootstrap'));
|
||||||
const user = { ...bootstrap.user };
|
const user = { ...bootstrap.user };
|
||||||
const menu = { ...bootstrap.common.menu_data };
|
const menu = { ...bootstrap.common.menu_data };
|
||||||
|
const common = { ...bootstrap.common };
|
||||||
initFeatureFlags(bootstrap.common.feature_flags);
|
initFeatureFlags(bootstrap.common.feature_flags);
|
||||||
|
|
||||||
const store = createStore(
|
const store = createStore(
|
||||||
|
@ -61,6 +62,7 @@ const store = createStore(
|
||||||
const App = () => (
|
const App = () => (
|
||||||
<Provider store={store}>
|
<Provider store={store}>
|
||||||
<ThemeProvider theme={supersetTheme}>
|
<ThemeProvider theme={supersetTheme}>
|
||||||
|
<FlashProvider common={common}>
|
||||||
<Router>
|
<Router>
|
||||||
<QueryParamProvider ReactRouterRoute={Route}>
|
<QueryParamProvider ReactRouterRoute={Route}>
|
||||||
<Menu data={menu} />
|
<Menu data={menu} />
|
||||||
|
@ -89,6 +91,7 @@ const App = () => (
|
||||||
<ToastPresenter />
|
<ToastPresenter />
|
||||||
</QueryParamProvider>
|
</QueryParamProvider>
|
||||||
</Router>
|
</Router>
|
||||||
|
</FlashProvider>
|
||||||
</ThemeProvider>
|
</ThemeProvider>
|
||||||
</Provider>
|
</Provider>
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in New Issue