SubscribeButton.tsx 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import React, { FC, useCallback } from 'react';
  2. import { useTranslation } from 'react-i18next';
  3. import { UncontrolledTooltip } from 'reactstrap';
  4. import { SubscriptionStatusType } from '~/interfaces/subscription';
  5. type Props = {
  6. isGuestUser?: boolean,
  7. status?: SubscriptionStatusType,
  8. onClick?: () => Promise<void>,
  9. };
  10. const SubscribeButton: FC<Props> = (props: Props) => {
  11. const { t } = useTranslation();
  12. const { isGuestUser, status } = props;
  13. const isSubscribing = status === SubscriptionStatusType.SUBSCRIBE;
  14. const getTooltipMessage = useCallback(() => {
  15. if (isGuestUser) {
  16. return 'Not available for guest';
  17. }
  18. if (isSubscribing) {
  19. return 'tooltip.stop_notification';
  20. }
  21. return 'tooltip.receive_notifications';
  22. }, [isGuestUser, isSubscribing]);
  23. return (
  24. <>
  25. <button
  26. type="button"
  27. id="subscribe-button"
  28. onClick={props.onClick}
  29. className={`shadow-none btn btn-subscribe border-0
  30. ${isSubscribing ? 'active' : ''} ${isGuestUser ? 'disabled' : ''}`}
  31. >
  32. <i className={`fa ${isSubscribing ? 'fa-bell' : 'fa-bell-slash-o'}`}></i>
  33. </button>
  34. <UncontrolledTooltip placement="top" target="subscribe-button" fade={false}>
  35. {t(getTooltipMessage())}
  36. </UncontrolledTooltip>
  37. </>
  38. );
  39. };
  40. export default SubscribeButton;