SubscribeButton.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import React, { FC, useCallback } from 'react';
  2. import { SubscriptionStatusType } from '@growi/core';
  3. import { useTranslation } from 'next-i18next';
  4. import { UncontrolledTooltip } from 'reactstrap';
  5. import styles from './SubscribeButton.module.scss';
  6. type Props = {
  7. isGuestUser?: boolean,
  8. status?: SubscriptionStatusType,
  9. onClick?: () => Promise<void>,
  10. };
  11. const SubscribeButton: FC<Props> = (props: Props) => {
  12. const { t } = useTranslation();
  13. const { isGuestUser, status } = props;
  14. const isSubscribing = status === SubscriptionStatusType.SUBSCRIBE;
  15. const getTooltipMessage = useCallback(() => {
  16. if (isSubscribing) {
  17. return 'tooltip.stop_notification';
  18. }
  19. return 'tooltip.receive_notifications';
  20. }, [isSubscribing]);
  21. return (
  22. <>
  23. <button
  24. type="button"
  25. id="subscribe-button"
  26. onClick={props.onClick}
  27. className={`shadow-none btn btn-subscribe ${styles['btn-subscribe']} border-0
  28. ${isSubscribing ? 'active' : ''} ${isGuestUser ? 'disabled' : ''}`}
  29. >
  30. <span className={`material-symbols-outlined ${isSubscribing ? 'fill' : ''}`}>
  31. {isSubscribing ? 'notifications' : 'notifications_off'}
  32. </span>
  33. </button>
  34. <UncontrolledTooltip data-testid="subscribe-button-tooltip" placement="top" target="subscribe-button" fade={false}>
  35. {t(getTooltipMessage())}
  36. </UncontrolledTooltip>
  37. </>
  38. );
  39. };
  40. export default SubscribeButton;