PluginListPage.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import React, { PureComponent } from 'react';
  2. import { hot } from 'react-hot-loader';
  3. import { connect } from 'react-redux';
  4. import PageHeader from '../../core/components/PageHeader/PageHeader';
  5. import PluginActionBar from './PluginActionBar';
  6. import PluginList from './PluginList';
  7. import { NavModel, Plugin } from '../../types';
  8. import { loadPlugins } from './state/actions';
  9. import { getNavModel } from '../../core/selectors/navModel';
  10. import { getLayoutMode, getPlugins } from './state/selectors';
  11. import { LayoutMode } from '../../core/components/LayoutSelector/LayoutSelector';
  12. export interface Props {
  13. navModel: NavModel;
  14. plugins: Plugin[];
  15. layoutMode: LayoutMode;
  16. loadPlugins: typeof loadPlugins;
  17. }
  18. export class PluginListPage extends PureComponent<Props> {
  19. componentDidMount() {
  20. this.fetchPlugins();
  21. }
  22. async fetchPlugins() {
  23. await this.props.loadPlugins();
  24. }
  25. render() {
  26. const { navModel, plugins, layoutMode } = this.props;
  27. return (
  28. <div>
  29. <PageHeader model={navModel} />
  30. <div className="page-container page-body">
  31. <PluginActionBar />
  32. {plugins && <PluginList plugins={plugins} layoutMode={layoutMode} />}
  33. </div>
  34. </div>
  35. );
  36. }
  37. }
  38. function mapStateToProps(state) {
  39. return {
  40. navModel: getNavModel(state.navIndex, 'plugins'),
  41. plugins: getPlugins(state.plugins),
  42. layoutMode: getLayoutMode(state.plugins),
  43. };
  44. }
  45. const mapDispatchToProps = {
  46. loadPlugins,
  47. };
  48. export default hot(module)(connect(mapStateToProps, mapDispatchToProps)(PluginListPage));