2018-03-26 23:32:43 +02:00
|
|
|
// @flow
|
2018-10-29 18:23:53 +01:00
|
|
|
import * as MODALS from 'constants/modal_types';
|
|
|
|
import * as ICONS from 'constants/icons';
|
2019-07-02 06:39:17 +02:00
|
|
|
import React, { useRef } from 'react';
|
2018-11-21 22:20:55 +01:00
|
|
|
import { parseURI } from 'lbry-redux';
|
2018-03-26 23:32:43 +02:00
|
|
|
import Button from 'component/button';
|
2019-07-02 06:39:17 +02:00
|
|
|
import useHover from 'util/use-hover';
|
2018-03-26 23:32:43 +02:00
|
|
|
|
|
|
|
type SubscribtionArgs = {
|
|
|
|
channelName: string,
|
|
|
|
uri: string,
|
|
|
|
};
|
|
|
|
|
|
|
|
type Props = {
|
2018-11-21 22:20:55 +01:00
|
|
|
uri: string,
|
2018-10-19 22:38:07 +02:00
|
|
|
isSubscribed: boolean,
|
|
|
|
subscriptions: Array<string>,
|
2018-03-26 23:32:43 +02:00
|
|
|
doChannelSubscribe: ({ channelName: string, uri: string }) => void,
|
|
|
|
doChannelUnsubscribe: SubscribtionArgs => void,
|
2019-01-08 00:29:40 +01:00
|
|
|
doOpenModal: (id: string) => void,
|
2018-11-21 22:20:55 +01:00
|
|
|
showSnackBarOnSubscribe: boolean,
|
|
|
|
doToast: ({ message: string }) => void,
|
2018-03-26 23:32:43 +02:00
|
|
|
};
|
|
|
|
|
2019-06-11 20:10:58 +02:00
|
|
|
export default function SubscribeButton(props: Props) {
|
2018-03-26 23:32:43 +02:00
|
|
|
const {
|
|
|
|
uri,
|
|
|
|
doChannelSubscribe,
|
|
|
|
doChannelUnsubscribe,
|
2018-10-29 18:23:53 +01:00
|
|
|
doOpenModal,
|
2018-10-19 22:38:07 +02:00
|
|
|
subscriptions,
|
|
|
|
isSubscribed,
|
2018-11-21 22:20:55 +01:00
|
|
|
showSnackBarOnSubscribe,
|
|
|
|
doToast,
|
2018-03-26 23:32:43 +02:00
|
|
|
} = props;
|
2019-06-28 09:33:07 +02:00
|
|
|
const buttonRef = useRef();
|
2019-07-02 06:39:17 +02:00
|
|
|
const isHovering = useHover(buttonRef);
|
2019-06-28 09:33:07 +02:00
|
|
|
const { claimName } = parseURI(uri);
|
2017-12-21 22:08:54 +01:00
|
|
|
const subscriptionHandler = isSubscribed ? doChannelUnsubscribe : doChannelSubscribe;
|
2019-06-28 09:27:55 +02:00
|
|
|
const subscriptionLabel = isSubscribed ? __('Following') : __('Follow');
|
2019-06-28 09:33:07 +02:00
|
|
|
const unfollowOverride = isSubscribed && isHovering && __('Unfollow');
|
2017-12-08 21:38:20 +01:00
|
|
|
|
2018-11-21 22:20:55 +01:00
|
|
|
return (
|
2018-03-26 23:32:43 +02:00
|
|
|
<Button
|
2019-06-28 09:33:07 +02:00
|
|
|
ref={buttonRef}
|
2018-05-23 05:48:22 +02:00
|
|
|
iconColor="red"
|
2019-06-28 09:33:07 +02:00
|
|
|
icon={unfollowOverride ? ICONS.UNSUBSCRIBE : ICONS.SUBSCRIBE}
|
2019-06-17 22:32:38 +02:00
|
|
|
button={'alt'}
|
2019-06-28 09:33:07 +02:00
|
|
|
label={unfollowOverride || subscriptionLabel}
|
2018-08-27 20:45:50 +02:00
|
|
|
onClick={e => {
|
|
|
|
e.stopPropagation();
|
|
|
|
|
2019-01-14 22:21:37 +01:00
|
|
|
if (!subscriptions.length) {
|
2018-10-29 18:23:53 +01:00
|
|
|
doOpenModal(MODALS.FIRST_SUBSCRIPTION);
|
2018-03-26 23:32:43 +02:00
|
|
|
}
|
2018-11-21 22:20:55 +01:00
|
|
|
|
2018-03-26 23:32:43 +02:00
|
|
|
subscriptionHandler({
|
2018-11-21 22:20:55 +01:00
|
|
|
channelName: claimName,
|
2018-03-26 23:32:43 +02:00
|
|
|
uri,
|
|
|
|
});
|
2018-11-21 22:20:55 +01:00
|
|
|
|
|
|
|
if (showSnackBarOnSubscribe) {
|
2019-06-28 09:27:55 +02:00
|
|
|
doToast({ message: `${__('Now following ')} ${claimName}!` });
|
2018-11-21 22:20:55 +01:00
|
|
|
}
|
2018-03-26 23:32:43 +02:00
|
|
|
}}
|
|
|
|
/>
|
2018-11-21 22:20:55 +01:00
|
|
|
);
|
2019-06-11 20:10:58 +02:00
|
|
|
}
|