SeenUserInfo.jsx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import React, { useState } from 'react';
  4. import {
  5. Button, Popover, PopoverBody,
  6. } from 'reactstrap';
  7. import { FootstampIcon } from '@growi/ui';
  8. import UserPictureList from './UserPictureList';
  9. import { withUnstatedContainers } from '../UnstatedUtils';
  10. import PageContainer from '~/client/services/PageContainer';
  11. /* eslint react/no-multi-comp: 0, react/prop-types: 0 */
  12. const SeenUserInfo = (props) => {
  13. const [popoverOpen, setPopoverOpen] = useState(false);
  14. const toggle = () => setPopoverOpen(!popoverOpen);
  15. const { pageContainer, disabled } = props;
  16. return (
  17. <div className="grw-seen-user-info">
  18. <Button id="po-seen-user" color="link" className="px-2">
  19. <span className="mr-1 footstamp-icon">
  20. <FootstampIcon />
  21. </span>
  22. <span className="seen-user-count">{pageContainer.state.sumOfSeenUsers}</span>
  23. </Button>
  24. <Popover placement="bottom" isOpen={popoverOpen} target="po-seen-user" toggle={toggle} trigger="legacy" disabled={disabled}>
  25. <PopoverBody className="seen-user-popover">
  26. <div className="px-2 text-right user-list-content text-truncate text-muted">
  27. <UserPictureList users={pageContainer.state.seenUsers} />
  28. </div>
  29. </PopoverBody>
  30. </Popover>
  31. </div>
  32. );
  33. };
  34. SeenUserInfo.propTypes = {
  35. pageContainer: PropTypes.instanceOf(PageContainer).isRequired,
  36. disabled: PropTypes.bool,
  37. };
  38. /**
  39. * Wrapper component for using unstated
  40. */
  41. const SeenUserInfoWrapper = withUnstatedContainers(SeenUserInfo, [PageContainer]);
  42. export default (SeenUserInfoWrapper);