SeenUserInfo.tsx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import React, { FC, useState } from 'react';
  2. import { FootstampIcon } from '@growi/ui';
  3. import { useTranslation } from 'next-i18next';
  4. import { UncontrolledTooltip, Popover, PopoverBody } from 'reactstrap';
  5. import { IUser } from '~/interfaces/user';
  6. import UserPictureList from './UserPictureList';
  7. import styles from './SeenUserInfo.module.scss';
  8. interface Props {
  9. seenUsers: IUser[],
  10. sumOfSeenUsers?: number,
  11. disabled?: boolean,
  12. }
  13. const SeenUserInfo: FC<Props> = (props: Props) => {
  14. const { t } = useTranslation();
  15. const [isPopoverOpen, setIsPopoverOpen] = useState(false);
  16. const { seenUsers, sumOfSeenUsers, disabled } = props;
  17. const togglePopover = () => setIsPopoverOpen(!isPopoverOpen);
  18. return (
  19. <div className={`grw-seen-user-info ${styles['grw-seen-user-info']}`}>
  20. <button type="button" id="btn-seen-user" className="shadow-none btn btn-seen-user border-0">
  21. <span className="mr-1 footstamp-icon">
  22. <FootstampIcon />
  23. </span>
  24. <span className="seen-user-count">{sumOfSeenUsers || seenUsers.length}</span>
  25. </button>
  26. <Popover placement="bottom" isOpen={isPopoverOpen} target="btn-seen-user" toggle={togglePopover} trigger="legacy" disabled={disabled}>
  27. <PopoverBody className="user-list-popover">
  28. <div className="px-2 text-right user-list-content text-truncate text-muted">
  29. <UserPictureList users={seenUsers} />
  30. </div>
  31. </PopoverBody>
  32. </Popover>
  33. <UncontrolledTooltip placement="top" target="btn-seen-user" fade={false}>
  34. {t('tooltip.footprints')}
  35. </UncontrolledTooltip>
  36. </div>
  37. );
  38. };
  39. export default SeenUserInfo;