PageAccessoriesModalControl.jsx 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import React, { Fragment, useMemo } from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import { UncontrolledTooltip } from 'reactstrap';
  5. import PageAccessoriesContainer from '../services/PageAccessoriesContainer';
  6. import PageListIcon from './Icons/PageListIcon';
  7. import TimeLineIcon from './Icons/TimeLineIcon';
  8. import HistoryIcon from './Icons/HistoryIcon';
  9. import AttachmentIcon from './Icons/AttachmentIcon';
  10. import ShareLinkIcon from './Icons/ShareLinkIcon';
  11. import SeenUserInfo from './User/SeenUserInfo';
  12. import { withUnstatedContainers } from './UnstatedUtils';
  13. const PageAccessoriesModalControl = (props) => {
  14. const {
  15. t, pageAccessoriesContainer, isGuestUser, isSharedUser,
  16. } = props;
  17. const accessoriesBtnList = useMemo(() => {
  18. return [
  19. {
  20. name: 'pagelist',
  21. Icon: <PageListIcon />,
  22. disabled: isSharedUser,
  23. i18n: t('page_list'),
  24. },
  25. {
  26. name: 'timeline',
  27. Icon: <TimeLineIcon />,
  28. disabled: isSharedUser,
  29. i18n: t('Timeline View'),
  30. },
  31. {
  32. name: 'pageHistory',
  33. Icon: <HistoryIcon />,
  34. disabled: isGuestUser || isSharedUser,
  35. i18n: t('History'),
  36. },
  37. {
  38. name: 'attachment',
  39. Icon: <AttachmentIcon />,
  40. disabled: false,
  41. i18n: t('attachment_data'),
  42. },
  43. {
  44. name: 'shareLink',
  45. Icon: <ShareLinkIcon />,
  46. disabled: isGuestUser || isSharedUser,
  47. i18n: t('share_links.share_link_management'),
  48. },
  49. ];
  50. }, [t, isGuestUser, isSharedUser]);
  51. return (
  52. <div className="grw-page-accessories-control d-flex flex-nowrap align-items-center justify-content-end justify-content-lg-between">
  53. {accessoriesBtnList.map((accessory) => {
  54. return (
  55. <Fragment key={accessory.name}>
  56. <div id={`shareLink-btn-wrapper-for-tooltip-for-${accessory.name}`}>
  57. <button
  58. type="button"
  59. className={`btn btn-link grw-btn-page-accessories ${accessory.disabled ? 'disabled' : ''}`}
  60. onClick={() => pageAccessoriesContainer.openPageAccessoriesModal(accessory.name)}
  61. >
  62. {accessory.Icon}
  63. </button>
  64. </div>
  65. <UncontrolledTooltip placement="top" target={`shareLink-btn-wrapper-for-tooltip-for-${accessory.name}`} fade={false}>
  66. {accessory.disabled ? t('Not available for guest') : accessory.i18n}
  67. </UncontrolledTooltip>
  68. </Fragment>
  69. );
  70. })}
  71. <div className="d-flex align-items-center">
  72. <span className="border-left grw-border-vr">&nbsp;</span>
  73. <SeenUserInfo disabled={isSharedUser} />
  74. </div>
  75. </div>
  76. );
  77. };
  78. /**
  79. * Wrapper component for using unstated
  80. */
  81. const PageAccessoriesModalControlWrapper = withUnstatedContainers(PageAccessoriesModalControl, [PageAccessoriesContainer]);
  82. PageAccessoriesModalControl.propTypes = {
  83. t: PropTypes.func.isRequired, // i18next
  84. pageAccessoriesContainer: PropTypes.instanceOf(PageAccessoriesContainer).isRequired,
  85. isGuestUser: PropTypes.bool.isRequired,
  86. isSharedUser: PropTypes.bool.isRequired,
  87. };
  88. export default withTranslation()(PageAccessoriesModalControlWrapper);