import { CoID, LocalNode, RawCoValue, RawGroup } from "cojson"; import { useEffect, useState } from "react"; import { Button } from "../ui/button.js"; import { resolveCoValue, useResolvedCoValue } from "./use-resolve-covalue.js"; export function AccountOrGroupText({ coId, node, showId = false, onClick, }: { coId: CoID; node: LocalNode; showId?: boolean; onClick?: (name?: string) => void; }) { const { snapshot, extendedType, value } = useResolvedCoValue(coId, node); const [name, setName] = useState(null); useEffect(() => { if (snapshot && typeof snapshot === "object" && "profile" in snapshot) { const profileId = snapshot.profile as CoID; resolveCoValue(profileId, node).then((profileResult) => { if ( profileResult.snapshot && typeof profileResult.snapshot === "object" && "name" in profileResult.snapshot ) { setName(profileResult.snapshot.name as string); } }); } }, [snapshot, node, extendedType]); if (!snapshot) return Loading...; if (extendedType !== "account" && extendedType !== "group") { return CoID is not an account or group; } const groupName = extendedType === "group" && value && "name" in value ? (value as RawGroup).name : undefined; const displayName = extendedType === "account" ? name || "Account" : groupName || "Group"; const displayText = showId ? `${displayName} <${coId}>` : displayName; const icon = extendedType === "account" ? "👤" : "👥"; const iconAlt = extendedType === "account" ? "Account" : "Group"; const content = ( {icon} {displayText} ); if (onClick) { return ( ); } return content; }