SubscribeButton.tsx 1.4 KB

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