OrgDetailsPage.tsx 2.1 KB

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