SubscribeButton.tsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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 buttonClass = `${isSubscribing ? 'active' : ''} ${isGuestUser ? 'disabled' : ''}`;
  15. const iconClass = isSubscribing === false ? 'fa fa-eye-slash' : 'fa fa-eye';
  16. const getTooltipMessage = useCallback(() => {
  17. if (isGuestUser) {
  18. return 'Not available for guest';
  19. }
  20. if (isSubscribing) {
  21. return 'tooltip.stop_notification';
  22. }
  23. return 'tooltip.receive_notifications';
  24. }, [isGuestUser, isSubscribing]);
  25. return (
  26. <>
  27. <button
  28. type="button"
  29. id="subscribe-button"
  30. onClick={props.onClick}
  31. className={`btn btn-subscribe border-0 ${buttonClass}`}
  32. >
  33. <i className={iconClass}></i>
  34. </button>
  35. <UncontrolledTooltip placement="top" target="subscribe-button" fade={false}>
  36. {t(getTooltipMessage())}
  37. </UncontrolledTooltip>
  38. </>
  39. );
  40. };
  41. export default SubscribeButton;