PageAccessoriesModal.jsx 4.2 KB

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