EditDataSourcePage.tsx 2.3 KB

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