import { useSpaceJoin } from '../../hooks/useSpaceJoin'; import { getSpaceGradient } from '../../utils/gradients'; import type { TaggedExploreSpace } from '../../stores/exploreStore'; export function ExploreSpacePreviewCard({ space, onJoinSuccess, }: { space: TaggedExploreSpace; onJoinSuccess: (spaceId: string) => void; }) { const { isPublic, isPending, joining, joinError, showRequestForm, requestMessage, setRequestMessage, openRequestForm, cancelRequestForm, join, sendRequest, } = useSpaceJoin(space); const fallbackGradient = getSpaceGradient(space.id, space.name, space.avatarColor).gradient; const iconUrl = space.icon ? (space.icon.startsWith('http') || space.icon.startsWith('/') ? space.icon : `/api/uploads/${space.icon}`) : null; const originLabel = space._instanceOrigin ? (() => { try { return new URL(space._instanceOrigin).host; } catch { return space._instanceOrigin; } })() : null; const handleJoin = async () => { const full = await join(); if (full) onJoinSuccess(full.id); }; return (