import { DatabaseContext } from '@components/contexts/database'; import { ImageWithFallback } from '@components/imageWithFallback'; import { truncate } from '@utils/truncate'; import { DotsHorizontalIcon } from '@radix-ui/react-icons'; import Avatar from 'boring-avatars'; import { memo, useCallback, useContext, useEffect, useState } from 'react'; import Moment from 'react-moment'; export const User = memo(function User({ pubkey, time }: { pubkey: string; time: any }) { const { db }: any = useContext(DatabaseContext); const [profile, setProfile] = useState({ picture: null, name: null, username: null }); const insertCacheProfile = useCallback( async (event) => { const metadata: any = JSON.parse(event.content); await db.execute( `INSERT OR IGNORE INTO cache_profiles (id, metadata) VALUES ("${pubkey}", '${JSON.stringify(metadata)}')` ); setProfile(metadata); }, [db, pubkey] ); const getCacheProfile = useCallback(async () => { const result: any = await db.select(`SELECT metadata FROM cache_profiles WHERE id = "${pubkey}"`); return result; }, [db, pubkey]); useEffect(() => { getCacheProfile() .then((res) => { if (res[0] !== undefined) { setProfile(JSON.parse(res[0].metadata)); } else { fetch(`https://rbr.bio/${pubkey}/metadata.json`).then((res) => res.json().then((res) => { // update state setProfile(JSON.parse(res.content)); // save profile to database insertCacheProfile(res); }) ); } }) .catch(console.error); }, [getCacheProfile, insertCacheProfile, pubkey]); return (