PageAccessoriesModal.jsx 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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. import PageTimeline from './PageTimeline';
  15. import PageList from './PageList';
  16. import PageHistory from './PageHistory';
  17. import ShareLink from './ShareLink/ShareLink';
  18. const PageAccessoriesModal = (props) => {
  19. const { t, pageAccessoriesContainer } = props;
  20. const { switchActiveTab } = pageAccessoriesContainer;
  21. const { activeTab } = pageAccessoriesContainer.state;
  22. function closeModalHandler() {
  23. if (props.onClose == null) {
  24. return;
  25. }
  26. props.onClose();
  27. }
  28. return (
  29. <React.Fragment>
  30. <Modal size="xl" isOpen={props.isOpen} toggle={closeModalHandler} className="grw-page-accessories-modal">
  31. <ModalBody>
  32. <Nav className="nav-title border-bottom">
  33. <NavItem type="button" className={`nav-link ${activeTab === 'pagelist' && 'active active-border'}`}>
  34. <NavLink
  35. onClick={() => {
  36. switchActiveTab('pagelist');
  37. }}
  38. >
  39. <PageListIcon />
  40. {t('page_list')}
  41. </NavLink>
  42. </NavItem>
  43. <NavItem type="button" className={`nav-link ${activeTab === 'timeline' && 'active active-border'}`}>
  44. <NavLink
  45. onClick={() => {
  46. switchActiveTab('timeline');
  47. }}
  48. >
  49. <TimeLineIcon />
  50. {t('Timeline View')}
  51. </NavLink>
  52. </NavItem>
  53. <NavItem type="button" className={`nav-link ${activeTab === 'page-history' && 'active active-border'}`}>
  54. <NavLink
  55. onClick={() => {
  56. switchActiveTab('page-history');
  57. }}
  58. >
  59. <RecentChangesIcon />
  60. {t('History')}
  61. </NavLink>
  62. </NavItem>
  63. <NavItem type="button" className={`nav-link ${activeTab === 'attachment' && 'active active-border'}`}>
  64. <NavLink
  65. onClick={() => {
  66. switchActiveTab('attachment');
  67. }}
  68. >
  69. <AttachmentIcon />
  70. {t('attachment_data')}
  71. </NavLink>
  72. </NavItem>
  73. <NavItem type="button" className={`nav-link ${activeTab === 'share-link' && 'active active-border'}`}>
  74. <NavLink
  75. onClick={() => {
  76. switchActiveTab('share-link');
  77. }}
  78. >
  79. <AttachmentIcon />
  80. {t('share_links.share_link_management')}
  81. </NavLink>
  82. </NavItem>
  83. </Nav>
  84. <TabContent activeTab={activeTab}>
  85. <TabPane tabId="pagelist">
  86. {pageAccessoriesContainer.state.activeComponents.has('pagelist') && <PageList />}
  87. </TabPane>
  88. <TabPane tabId="timeline" className="p-4">
  89. {pageAccessoriesContainer.state.activeComponents.has('timeline') && <PageTimeline /> }
  90. </TabPane>
  91. <TabPane tabId="page-history">
  92. <div className="overflow-auto">
  93. {pageAccessoriesContainer.state.activeComponents.has('page-history') && <PageHistory /> }
  94. </div>
  95. </TabPane>
  96. <TabPane tabId="attachment" className="p-4">
  97. {pageAccessoriesContainer.state.activeComponents.has('attachment') && <PageAttachment />}
  98. </TabPane>
  99. <TabPane tabId="share-link" className="p-4">
  100. {pageAccessoriesContainer.state.activeComponents.has('share-link') && <ShareLink />}
  101. </TabPane>
  102. </TabContent>
  103. </ModalBody>
  104. </Modal>
  105. </React.Fragment>
  106. );
  107. };
  108. /**
  109. * Wrapper component for using unstated
  110. */
  111. const PageAccessoriesModalWrapper = withUnstatedContainers(PageAccessoriesModal, [PageAccessoriesContainer]);
  112. PageAccessoriesModal.propTypes = {
  113. t: PropTypes.func.isRequired, // i18next
  114. // pageContainer: PropTypes.instanceOf(PageContainer).isRequired,
  115. pageAccessoriesContainer: PropTypes.instanceOf(PageAccessoriesContainer).isRequired,
  116. isOpen: PropTypes.bool.isRequired,
  117. onClose: PropTypes.func,
  118. };
  119. export default withTranslation()(PageAccessoriesModalWrapper);