import { Link } from "@tanstack/react-router"; import { Avatar } from "baseui/avatar"; import { Block } from "baseui/block"; import { StatefulPopover, TRIGGER_TYPE } from "baseui/popover"; import { LabelMedium, LabelSmall } from "baseui/typography"; import { useAtom } from "jotai"; import { useEffect } from "react"; import { profilesAtom } from "../../atoms/profiles"; import { statsAtom } from "../../atoms/stats"; import { useProfileByDidQuery, useProfileStatsByDidQuery, } from "../../hooks/useProfile"; import Stats from "../Stats"; import NowPlaying from "./NowPlaying"; export type HandleProps = { link: string; did: string; }; function Handle(props: HandleProps) { const { link, did } = props; const [profiles, setProfiles] = useAtom(profilesAtom); const profile = useProfileByDidQuery(did); const profileStats = useProfileStatsByDidQuery(did); const [stats, setStats] = useAtom(statsAtom); useEffect(() => { if (profile.isLoading || profile.isError) { return; } if (!profile.data || !did) { return; } setProfiles((profiles) => ({ ...profiles, [did]: { avatar: profile.data.avatar, displayName: profile.data.displayName, handle: profile.data.handle, spotifyConnected: profile.data.spotifyConnected, createdAt: profile.data.createdAt, did, }, })); // eslint-disable-next-line react-hooks/exhaustive-deps }, [profile.data, profile.isLoading, profile.isError, did]); useEffect(() => { if (profileStats.isLoading || profileStats.isError) { return; } if (!profileStats.data || !did) { return; } setStats((prev) => ({ ...prev, [did]: { scrobbles: profileStats.data.scrobbles, artists: profileStats.data.artists, lovedTracks: profileStats.data.lovedTracks, albums: profileStats.data.albums, tracks: profileStats.data.tracks, }, })); // eslint-disable-next-line react-hooks/exhaustive-deps }, [profileStats.data, profileStats.isLoading, profileStats.isError, did]); return ( (
{profiles[did]?.displayName} @{did}
{stats[did] && }
)} triggerType={TRIGGER_TYPE.hover} autoFocus={false} focusLock={false} > @{did}
); } export default Handle;