TeamPages.tsx 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import React from 'react';
  2. import _ from 'lodash';
  3. import { hot } from 'react-hot-loader';
  4. import { inject, observer } from 'mobx-react';
  5. import config from 'app/core/config';
  6. import PageHeader from 'app/core/components/PageHeader/PageHeader';
  7. import { NavStore } from 'app/stores/NavStore/NavStore';
  8. import { TeamsStore, ITeam } from 'app/stores/TeamsStore/TeamsStore';
  9. import { ViewStore } from 'app/stores/ViewStore/ViewStore';
  10. import TeamMembers from './TeamMembers';
  11. import TeamSettings from './TeamSettings';
  12. import TeamGroupSync from './TeamGroupSync';
  13. interface Props {
  14. nav: typeof NavStore.Type;
  15. teams: typeof TeamsStore.Type;
  16. view: typeof ViewStore.Type;
  17. }
  18. @inject('nav', 'teams', 'view')
  19. @observer
  20. export class TeamPages extends React.Component<Props, any> {
  21. isSyncEnabled: boolean;
  22. currentPage: string;
  23. constructor(props) {
  24. super(props);
  25. this.isSyncEnabled = config.buildInfo.isEnterprise;
  26. this.currentPage = this.getCurrentPage();
  27. this.loadTeam();
  28. }
  29. async loadTeam() {
  30. const { teams, nav, view } = this.props;
  31. await teams.loadById(view.routeParams.get('id'));
  32. nav.initTeamPage(this.getCurrentTeam(), this.currentPage, this.isSyncEnabled);
  33. }
  34. getCurrentTeam(): ITeam {
  35. const { teams, view } = this.props;
  36. return teams.map.get(view.routeParams.get('id'));
  37. }
  38. getCurrentPage() {
  39. const pages = ['members', 'settings', 'groupsync'];
  40. const currentPage = this.props.view.routeParams.get('page');
  41. return _.includes(pages, currentPage) ? currentPage : pages[0];
  42. }
  43. render() {
  44. const { nav } = this.props;
  45. const currentTeam = this.getCurrentTeam();
  46. if (!nav.main) {
  47. return null;
  48. }
  49. return (
  50. <div>
  51. <PageHeader model={nav as any} />
  52. {currentTeam && (
  53. <div className="page-container page-body">
  54. {this.currentPage === 'members' && <TeamMembers team={currentTeam} />}
  55. {this.currentPage === 'settings' && <TeamSettings team={currentTeam} />}
  56. {this.currentPage === 'groupsync' && this.isSyncEnabled && <TeamGroupSync team={currentTeam} />}
  57. </div>
  58. )}
  59. </div>
  60. );
  61. }
  62. }
  63. export default hot(module)(TeamPages);