OrgDetailsPage.tsx 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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 PageLoader from '../../core/components/PageLoader/PageLoader';
  6. import OrgProfile from './OrgProfile';
  7. import OrgPreferences from './OrgPreferences';
  8. import {
  9. loadOrganization,
  10. loadOrganizationPreferences,
  11. setOrganizationName,
  12. updateOrganization,
  13. } from './state/actions';
  14. import { loadStarredDashboards } from '../../core/actions/user';
  15. import { NavModel, Organization, OrganizationPreferences, StoreState } from 'app/types';
  16. import { getNavModel } from '../../core/selectors/navModel';
  17. export interface Props {
  18. navModel: NavModel;
  19. organization: Organization;
  20. preferences: OrganizationPreferences;
  21. loadOrganization: typeof loadOrganization;
  22. loadOrganizationPreferences: typeof loadOrganizationPreferences;
  23. loadStarredDashboards: typeof loadStarredDashboards;
  24. setOrganizationName: typeof setOrganizationName;
  25. updateOrganization: typeof updateOrganization;
  26. }
  27. export class OrgDetailsPage extends PureComponent<Props> {
  28. async componentDidMount() {
  29. await this.props.loadStarredDashboards();
  30. await this.props.loadOrganization();
  31. await this.props.loadOrganizationPreferences();
  32. }
  33. onOrgNameChange = name => {
  34. this.props.setOrganizationName(name);
  35. };
  36. onUpdateOrganization = () => {
  37. this.props.updateOrganization();
  38. };
  39. render() {
  40. const { navModel, organization, preferences } = this.props;
  41. return (
  42. <div>
  43. <PageHeader model={navModel} />
  44. <div className="page-container page-body">
  45. {Object.keys(organization).length === 0 || Object.keys(preferences).length === 0 ? (
  46. <PageLoader pageName="Organization" />
  47. ) : (
  48. <div>
  49. <OrgProfile
  50. onOrgNameChange={name => this.onOrgNameChange(name)}
  51. onSubmit={this.onUpdateOrganization}
  52. orgName={organization.name}
  53. />
  54. <OrgPreferences />
  55. </div>
  56. )}
  57. </div>
  58. </div>
  59. );
  60. }
  61. }
  62. function mapStateToProps(state: StoreState) {
  63. return {
  64. navModel: getNavModel(state.navIndex, 'org-settings'),
  65. organization: state.organization.organization,
  66. preferences: state.organization.preferences,
  67. };
  68. }
  69. const mapDispatchToProps = {
  70. loadOrganization,
  71. loadOrganizationPreferences,
  72. loadStarredDashboards,
  73. setOrganizationName,
  74. updateOrganization,
  75. };
  76. export default hot(module)(connect(mapStateToProps, mapDispatchToProps)(OrgDetailsPage));