2023-01-29 21:00:23 +00:00
|
|
|
import "./FollowButton.css";
|
2023-02-08 21:10:26 +00:00
|
|
|
import { FormattedMessage } from "react-intl";
|
2023-02-11 20:05:46 +00:00
|
|
|
import { HexKey } from "@snort/nostr";
|
2023-04-14 11:33:19 +00:00
|
|
|
|
|
|
|
import useEventPublisher from "Feed/EventPublisher";
|
2023-01-27 18:57:15 +00:00
|
|
|
import { parseId } from "Util";
|
2023-04-14 11:33:19 +00:00
|
|
|
import useLogin from "Hooks/useLogin";
|
2023-04-18 10:40:56 +00:00
|
|
|
import AsyncButton from "Element/AsyncButton";
|
2023-01-01 19:57:27 +00:00
|
|
|
|
2023-02-08 21:10:26 +00:00
|
|
|
import messages from "./messages";
|
|
|
|
|
2023-01-16 17:48:25 +00:00
|
|
|
export interface FollowButtonProps {
|
2023-02-07 20:04:50 +00:00
|
|
|
pubkey: HexKey;
|
|
|
|
className?: string;
|
2023-01-16 17:48:25 +00:00
|
|
|
}
|
|
|
|
export default function FollowButton(props: FollowButtonProps) {
|
2023-02-07 20:04:50 +00:00
|
|
|
const pubkey = parseId(props.pubkey);
|
2023-04-14 15:02:15 +00:00
|
|
|
const publisher = useEventPublisher();
|
|
|
|
const { follows, relays } = useLogin();
|
|
|
|
const isFollowing = follows.item.includes(pubkey);
|
2023-02-07 20:04:50 +00:00
|
|
|
const baseClassname = `${props.className} follow-button`;
|
2023-01-16 17:48:25 +00:00
|
|
|
|
2023-02-07 20:04:50 +00:00
|
|
|
async function follow(pubkey: HexKey) {
|
2023-04-14 15:02:15 +00:00
|
|
|
if (publisher) {
|
|
|
|
const ev = await publisher.contactList([pubkey, ...follows.item], relays.item);
|
|
|
|
publisher.broadcast(ev);
|
|
|
|
}
|
2023-02-07 20:04:50 +00:00
|
|
|
}
|
2023-01-01 19:57:27 +00:00
|
|
|
|
2023-02-07 20:04:50 +00:00
|
|
|
async function unfollow(pubkey: HexKey) {
|
2023-04-14 15:02:15 +00:00
|
|
|
if (publisher) {
|
|
|
|
const ev = await publisher.contactList(
|
|
|
|
follows.item.filter(a => a !== pubkey),
|
|
|
|
relays.item
|
|
|
|
);
|
|
|
|
publisher.broadcast(ev);
|
|
|
|
}
|
2023-02-07 20:04:50 +00:00
|
|
|
}
|
2023-01-01 20:31:09 +00:00
|
|
|
|
2023-02-07 20:04:50 +00:00
|
|
|
return (
|
2023-04-18 10:40:56 +00:00
|
|
|
<AsyncButton
|
2023-02-07 20:04:50 +00:00
|
|
|
className={isFollowing ? `${baseClassname} secondary` : baseClassname}
|
2023-02-09 12:26:54 +00:00
|
|
|
onClick={() => (isFollowing ? unfollow(pubkey) : follow(pubkey))}>
|
|
|
|
{isFollowing ? <FormattedMessage {...messages.Unfollow} /> : <FormattedMessage {...messages.Follow} />}
|
2023-04-18 10:40:56 +00:00
|
|
|
</AsyncButton>
|
2023-02-07 20:04:50 +00:00
|
|
|
);
|
2023-01-25 18:08:53 +00:00
|
|
|
}
|