// @flow import * as ICONS from 'constants/icons'; import React, { useRef } from 'react'; import { parseURI } from 'util/lbryURI'; import Button from 'component/button'; import useHover from 'effects/use-hover'; import { useIsMobile } from 'effects/use-screensize'; import { ENABLE_UI_NOTIFICATIONS } from 'config'; type SubscriptionArgs = { channelName: string, uri: string, notificationsDisabled?: boolean, }; type Props = { permanentUrl: ?string, isSubscribed: boolean, doChannelSubscribe: (SubscriptionArgs, boolean) => void, doChannelUnsubscribe: (SubscriptionArgs, boolean) => void, doToast: ({ message: string }) => void, shrinkOnMobile: boolean, notificationsDisabled: boolean, user: ?User, uri: string, }; export default function SubscribeButton(props: Props) { const { permanentUrl, doChannelSubscribe, doChannelUnsubscribe, isSubscribed, doToast, shrinkOnMobile = false, notificationsDisabled, user, uri, } = props; const buttonRef = useRef(); const isMobile = useIsMobile(); let isHovering = useHover(buttonRef); isHovering = isMobile ? true : isHovering; const uiNotificationsEnabled = (user && user.experimental_ui) || ENABLE_UI_NOTIFICATIONS; const { channelName: rawChannelName } = parseURI(uri); let channelName; if (permanentUrl) { try { const { channelName: name } = parseURI(permanentUrl); if (name) { channelName = name; } } catch (e) {} } const claimName = channelName && '@' + channelName; const subscriptionHandler = isSubscribed ? doChannelUnsubscribe : doChannelSubscribe; const subscriptionLabel = isSubscribed ? __('Following --[button label indicating a channel has been followed]--') : __('Follow'); const unfollowOverride = isSubscribed && isHovering && __('Unfollow'); const label = isMobile && shrinkOnMobile ? '' : unfollowOverride || subscriptionLabel; const titlePrefix = isSubscribed ? __('Unfollow this channel') : __('Follow this channel'); if (isSubscribed && !permanentUrl && rawChannelName) { return (