PageAccessoriesModal.jsx 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import {
  4. Modal, ModalBody, Nav, NavItem, NavLink, TabContent, TabPane,
  5. } from 'reactstrap';
  6. import { withTranslation } from 'react-i18next';
  7. import PageListIcon from './Icons/PageListIcon';
  8. import TimeLineIcon from './Icons/TimeLineIcon';
  9. import RecentChangesIcon from './Icons/RecentChangesIcon';
  10. import AttachmentIcon from './Icons/AttachmentIcon';
  11. import { withUnstatedContainers } from './UnstatedUtils';
  12. import PageAccessoriesContainer from '../services/PageAccessoriesContainer';
  13. import PageAttachment from './PageAttachment';
  14. const PageAccessoriesModal = (props) => {
  15. const { t, pageAccessoriesContainer } = props;
  16. const { switchActiveTab } = pageAccessoriesContainer;
  17. const { activeTab } = pageAccessoriesContainer.state;
  18. function closeModalHandler() {
  19. if (props.onClose == null) {
  20. return;
  21. }
  22. props.onClose();
  23. }
  24. return (
  25. <React.Fragment>
  26. <Modal
  27. size="lg"
  28. isOpen={props.isOpen}
  29. toggle={closeModalHandler}
  30. className="grw-page-accessories-modal"
  31. >
  32. <ModalBody>
  33. <Nav className="nav-title border-bottom">
  34. <NavItem className={`nav-link ${activeTab === 'pagelist' && 'active active-border'}`}>
  35. <NavLink
  36. onClick={() => { switchActiveTab('pagelist') }}
  37. href="#pagelist"
  38. >
  39. <PageListIcon />
  40. { t('page_list') }
  41. </NavLink>
  42. </NavItem>
  43. <NavItem className={`nav-link ${activeTab === 'timeline' && 'active active-border'}`}>
  44. <NavLink
  45. onClick={() => { switchActiveTab('timeline') }}
  46. href="#timeline"
  47. >
  48. <TimeLineIcon />
  49. { t('Timeline View') }
  50. </NavLink>
  51. </NavItem>
  52. <NavItem className={`nav-link ${activeTab === 'recent-changes' && 'active active-border'}`}>
  53. <NavLink
  54. onClick={() => { switchActiveTab('recent-changes') }}
  55. href="#recent-changes"
  56. >
  57. <RecentChangesIcon />
  58. { t('History') }
  59. </NavLink>
  60. </NavItem>
  61. <NavItem className={`nav-link ${activeTab === 'attachment' && 'active active-border'}`}>
  62. <NavLink
  63. onClick={() => { switchActiveTab('attachment') }}
  64. href="#attachment"
  65. >
  66. <AttachmentIcon />
  67. { t('attachment_data') }
  68. </NavLink>
  69. </NavItem>
  70. </Nav>
  71. <TabContent activeTab={activeTab}>
  72. <TabPane tabId="pagelist"></TabPane>
  73. <TabPane tabId="timeline"></TabPane>
  74. <TabPane tabId="recent-changes"></TabPane>
  75. <TabPane tabId="attachment" className="p-4">
  76. {/* {pageAccessoriesContainer.activeComponents.has('attachment') && <PageAttachment /> } */}
  77. <PageAttachment />
  78. </TabPane>
  79. </TabContent>
  80. </ModalBody>
  81. </Modal>
  82. </React.Fragment>
  83. );
  84. };
  85. /**
  86. * Wrapper component for using unstated
  87. */
  88. const PageAccessoriesModalWrapper = withUnstatedContainers(PageAccessoriesModal, [PageAccessoriesContainer]);
  89. PageAccessoriesModal.propTypes = {
  90. t: PropTypes.func.isRequired, // i18next
  91. // pageContainer: PropTypes.instanceOf(PageContainer).isRequired,
  92. pageAccessoriesContainer: PropTypes.instanceOf(PageAccessoriesContainer).isRequired,
  93. isOpen: PropTypes.bool.isRequired,
  94. onClose: PropTypes.func,
  95. };
  96. export default withTranslation()(PageAccessoriesModalWrapper);