redux-devtools/packages/redux-devtools-app-core/src/containers/App.tsx

57 lines
1.5 KiB
TypeScript
Raw Normal View History

2019-01-03 17:14:25 +03:00
import React, { Component } from 'react';
import { connect, ResolveThunks } from 'react-redux';
import { Container, Notification } from '@redux-devtools/ui';
2019-01-03 17:14:25 +03:00
import { clearNotification } from '../actions';
import Header from '../components/Header';
import Actions from './Actions';
2019-01-03 17:14:25 +03:00
import Settings from '../components/Settings';
import { CoreStoreState } from '../reducers';
2019-01-03 17:14:25 +03:00
type StateProps = ReturnType<typeof mapStateToProps>;
type DispatchProps = ResolveThunks<typeof actionCreators>;
type OwnProps = {
extraSettingsTabs?: { name: string; component: React.ComponentType }[];
};
type Props = StateProps & DispatchProps & OwnProps;
class App extends Component<Props> {
2019-01-03 17:14:25 +03:00
render() {
const { extraSettingsTabs, section, theme, notification } = this.props;
2019-01-03 17:14:25 +03:00
let body;
switch (section) {
2019-01-10 21:51:14 +03:00
case 'Settings':
body = <Settings extraTabs={extraSettingsTabs} />;
2019-01-10 21:51:14 +03:00
break;
default:
body = <Actions />;
2019-01-03 17:14:25 +03:00
}
return (
<Container themeData={theme}>
<Header section={section} />
{body}
2019-01-10 21:51:14 +03:00
{notification && (
<Notification
type={notification.type}
onClose={this.props.clearNotification}
>
2019-01-03 17:14:25 +03:00
{notification.message}
</Notification>
2019-01-10 21:51:14 +03:00
)}
2019-01-03 17:14:25 +03:00
</Container>
);
}
}
const mapStateToProps = (state: CoreStoreState) => ({
section: state.section,
theme: state.theme,
notification: state.notification,
});
2019-01-03 17:14:25 +03:00
const actionCreators = {
clearNotification,
};
2019-01-03 17:14:25 +03:00
export default connect(mapStateToProps, actionCreators)(App);