import type { MouseEvent } from "react"; import { Loader2, LogIn, LogOut } from "lucide-react"; import type { ResourceMembershipState } from "@paperclipai/shared"; import { Button } from "@/components/ui/button"; import { cn } from "../lib/utils"; interface MembershipActionProps { state: ResourceMembershipState; resourceName: string; pending?: boolean; pendingState?: ResourceMembershipState | null; compact?: boolean; onJoin: () => void; onLeave: () => void; } export function MembershipAction({ state, resourceName, pending = false, pendingState = null, compact = false, onJoin, onLeave, }: MembershipActionProps) { const isLeft = state === "left"; const label = pending ? pendingState === "left" ? "Leaving..." : "Joining..." : isLeft ? "Join" : "Leave"; const ariaLabel = `${isLeft ? "Join" : "Leave"} ${resourceName}`; const Icon = pending ? Loader2 : isLeft ? LogIn : LogOut; function handleClick(event: MouseEvent) { event.preventDefault(); event.stopPropagation(); if (pending) return; if (isLeft) onJoin(); else onLeave(); } return ( ); }