28 lines · 1.2 KB
import { useThreadSubscription } from "~/hooks/use-thread-subscription";
import { useViewer } from "~/hooks/use-viewer";
import { Button } from "~/ui/Button";
import { SidebarSection } from "~/ui/Heading";

const REASONS: Record<string, string> = {
  manual: "You chose this setting for this thread.",
  participating: "You're receiving notifications because you're participating.",
  watching: "You're receiving notifications because you're watching this repository.",
  none: "You're not receiving notifications from this thread.",
};

export function ThreadSubscription({ owner, repo, number }: { owner: string; repo: string; number: number }) {
  const viewer = useViewer();
  const subscription = useThreadSubscription({ owner, repo, number });
  if (!viewer || !subscription.state) return null;
  const { subscribed, reason } = subscription.state;

  return (
    <SidebarSection title="Notifications">
      <Button size="sm" className="w-full" pending={subscription.pending} onClick={subscription.toggle}>
        {subscribed ? "Unsubscribe" : "Subscribe"}
      </Button>
      <p className="text-xs text-kumo-subtle">{subscription.error ?? REASONS[reason] ?? REASONS.none}</p>
    </SidebarSection>
  );
}