PageAccessoriesModal.jsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import {
  4. Modal, ModalBody, Nav, NavItem, NavLink, TabContent,
  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 PageContainer from '../services/PageContainer';
  13. const PageAccessoriesModal = (props) => {
  14. const { t } = props;
  15. function closeModalHandler() {
  16. if (props.onClose == null) {
  17. return;
  18. }
  19. props.onClose();
  20. }
  21. function switchTabHandler(clickedTab) {
  22. if (props.onSwitch == null) {
  23. return;
  24. }
  25. props.onSwitch(clickedTab);
  26. }
  27. return (
  28. <React.Fragment>
  29. <Modal
  30. size="lg"
  31. isOpen={props.isOpen}
  32. toggle={closeModalHandler}
  33. className="grw-page-accessories-modal"
  34. >
  35. <ModalBody>
  36. <Nav className="nav-title border-bottom">
  37. <NavItem className={`nav-link ${props.activeTab === 'pageList' && 'active'}`}>
  38. <NavLink
  39. onClick={() => { switchTabHandler('pageList') }}
  40. >
  41. <PageListIcon />
  42. { t('page_list') }
  43. </NavLink>
  44. </NavItem>
  45. <NavItem className={`nav-link ${props.activeTab === 'timeLine' && 'active'}`}>
  46. <NavLink
  47. onClick={() => { switchTabHandler('timeLine') }}
  48. >
  49. <TimeLineIcon />
  50. { t('Timeline View') }
  51. </NavLink>
  52. </NavItem>
  53. <NavItem className={`nav-link ${props.activeTab === 'recentChanges' && 'active'}`}>
  54. <NavLink
  55. onClick={() => { switchTabHandler('recentChanges') }}
  56. >
  57. <RecentChangesIcon />
  58. { t('History') }
  59. </NavLink>
  60. </NavItem>
  61. <NavItem className={`nav-link ${props.activeTab === 'attachment' && 'active'}`}>
  62. <NavLink
  63. onClick={() => { switchTabHandler('attachment') }}
  64. >
  65. <AttachmentIcon />
  66. { t('attachment_data') }
  67. </NavLink>
  68. </NavItem>
  69. </Nav>
  70. <TabContent>
  71. </TabContent>
  72. </ModalBody>
  73. </Modal>
  74. </React.Fragment>
  75. );
  76. };
  77. /**
  78. * Wrapper component for using unstated
  79. */
  80. const PageAccessoriesModalWrapper = withUnstatedContainers(PageAccessoriesModal, [PageContainer]);
  81. PageAccessoriesModal.propTypes = {
  82. t: PropTypes.func.isRequired, // i18next
  83. pageContainer: PropTypes.instanceOf(PageContainer).isRequired,
  84. isOpen: PropTypes.bool.isRequired,
  85. onClose: PropTypes.func,
  86. activeTab: PropTypes.string.isRequired,
  87. onSwitch: PropTypes.func,
  88. };
  89. export default withTranslation()(PageAccessoriesModalWrapper);