EditDataSourcePage.tsx 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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 { DataSource, NavModel } from 'app/types';
  6. import { loadDataSource } from './state/actions';
  7. import { getNavModel } from '../../core/selectors/navModel';
  8. import { getRouteParamsId, getRouteParamsPage } from '../../core/selectors/location';
  9. import { getDataSourceLoadingNav } from './state/navModel';
  10. import { getDataSource } from './state/selectors';
  11. export interface Props {
  12. navModel: NavModel;
  13. dataSource: DataSource;
  14. dataSourceId: number;
  15. pageName: string;
  16. loadDataSource: typeof loadDataSource;
  17. }
  18. enum PageTypes {
  19. Settings = 'settings',
  20. Permissions = 'permissions',
  21. Dashboards = 'dashboards',
  22. }
  23. export class EditDataSourcePage extends PureComponent<Props> {
  24. componentDidMount() {
  25. this.fetchDataSource();
  26. }
  27. async fetchDataSource() {
  28. await this.props.loadDataSource(this.props.dataSourceId);
  29. }
  30. isValidPage(currentPage) {
  31. return (Object as any).values(PageTypes).includes(currentPage);
  32. }
  33. getCurrentPage() {
  34. const currentPage = this.props.pageName;
  35. return this.isValidPage(currentPage) ? currentPage : PageTypes.Permissions;
  36. }
  37. renderPage() {
  38. switch (this.getCurrentPage()) {
  39. case PageTypes.Permissions:
  40. return <div>Permissions</div>;
  41. }
  42. return null;
  43. }
  44. render() {
  45. const { navModel } = this.props;
  46. return (
  47. <div>
  48. <PageHeader model={navModel} />
  49. <div className="page-container page-body">{this.renderPage()}</div>
  50. </div>
  51. );
  52. }
  53. }
  54. function mapStateToProps(state) {
  55. const pageName = getRouteParamsPage(state.location) || PageTypes.Permissions;
  56. const dataSourceId = getRouteParamsId(state.location);
  57. const dataSourceLoadingNav = getDataSourceLoadingNav(pageName);
  58. return {
  59. navModel: getNavModel(state.navIndex, `datasource-${pageName}-${dataSourceId}`, dataSourceLoadingNav),
  60. dataSourceId: dataSourceId,
  61. dataSource: getDataSource(state.dataSources, dataSourceId),
  62. pageName: pageName,
  63. };
  64. }
  65. const mapDispatchToProps = {
  66. loadDataSource,
  67. };
  68. export default hot(module)(connect(mapStateToProps, mapDispatchToProps)(EditDataSourcePage));