SeenUserInfo.tsx 1.6 KB

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