snort/packages/app/src/Element/FollowButton.tsx

40 lines
1.3 KiB
TypeScript
Raw Normal View History

2023-01-29 21:00:23 +00:00
import "./FollowButton.css";
2023-01-01 19:57:27 +00:00
import { useSelector } from "react-redux";
2023-02-08 21:10:26 +00:00
import { FormattedMessage } from "react-intl";
2023-01-20 11:11:50 +00:00
import useEventPublisher from "Feed/EventPublisher";
2023-02-11 20:05:46 +00:00
import { HexKey } from "@snort/nostr";
2023-01-20 11:11:50 +00:00
import { RootState } from "State/Store";
2023-01-27 18:57:15 +00:00
import { parseId } from "Util";
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 {
pubkey: HexKey;
className?: string;
2023-01-16 17:48:25 +00:00
}
export default function FollowButton(props: FollowButtonProps) {
const pubkey = parseId(props.pubkey);
const publiser = useEventPublisher();
2023-02-09 12:26:54 +00:00
const isFollowing = useSelector<RootState, boolean>(s => s.login.follows?.includes(pubkey) ?? false);
const baseClassname = `${props.className} follow-button`;
2023-01-16 17:48:25 +00:00
async function follow(pubkey: HexKey) {
2023-02-07 19:47:57 +00:00
const ev = await publiser.addFollow(pubkey);
publiser.broadcast(ev);
}
2023-01-01 19:57:27 +00:00
async function unfollow(pubkey: HexKey) {
2023-02-07 19:47:57 +00:00
const ev = await publiser.removeFollow(pubkey);
publiser.broadcast(ev);
}
2023-01-01 20:31:09 +00:00
return (
<button
type="button"
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} />}
</button>
);
2023-01-25 18:08:53 +00:00
}