import React, { useRef, useState, useEffect } from "react"; import { DataTable } from "primereact/datatable"; import { Menu } from "primereact/menu"; import { Column } from "primereact/column"; import { useImageProxy } from "@/hooks/useImageProxy"; import { useSession } from 'next-auth/react'; import { ProgressSpinner } from "primereact/progressspinner"; import ProgressListItem from "@/components/content/lists/ProgressListItem"; import PurchasedListItem from "@/components/content/lists/PurchasedListItem"; import { useNDKContext } from "@/context/NDKContext"; import { formatDateTime } from "@/utils/time"; import { Tooltip } from "primereact/tooltip"; import { nip19 } from "nostr-tools"; import Image from "next/image"; import GithubContributionChart from "@/components/charts/GithubContributionChart"; import GithubContributionChartDisabled from "@/components/charts/GithubContributionChartDisabled"; import useCheckCourseProgress from "@/hooks/tracking/useCheckCourseProgress"; import useWindowWidth from "@/hooks/useWindowWidth"; import { useToast } from "@/hooks/useToast"; import UserProgress from "@/components/profile/progress/UserProgress"; import { classNames } from "primereact/utils"; import UserProgressTable from '@/components/profile/DataTables/UserProgressTable'; const UserProfile = () => { const windowWidth = useWindowWidth(); const [user, setUser] = useState(null); const [account, setAccount] = useState(null); const { data: session } = useSession(); const { returnImageProxy } = useImageProxy(); const { ndk, addSigner } = useNDKContext(); const { showToast } = useToast(); const menu = useRef(null); useCheckCourseProgress(); const copyToClipboard = (text) => { navigator.clipboard.writeText(text); showToast("success", "Copied", "Copied to clipboard"); }; useEffect(() => { if (session?.user) { console.log("Session", session) setUser(session.user); if (session?.account) { setAccount(session.account); } } }, [session]); const header = (
Progress
); const purchasesHeader = (
Purchases
); const menuItems = [ ...(user?.privkey ? [{ label: 'Copy nsec', icon: 'pi pi-key', command: () => { const privkeyBuffer = Buffer.from(user.privkey, 'hex'); copyToClipboard(nip19.nsecEncode(privkeyBuffer)); } }] : []), { label: 'Copy npub', icon: 'pi pi-user', command: () => { if (user.pubkey) { copyToClipboard(nip19.npubEncode(user?.pubkey)); } } }, { label: 'Open Nostr Profile', icon: 'pi pi-external-link', command: () => window.open(`https://nostr.com/${nip19.npubEncode(user?.pubkey)}`, '_blank') } ]; return ( user && (
{ windowWidth < 768 && (

Profile

) }
user's avatar
menu.current.toggle(e)} />

{user.username || user?.name || user?.email || "Anon"}

{user.pubkey && (

{nip19.npubEncode(user.pubkey)}

)} {user?.lightningAddress && (

Lightning Address: {user.lightningAddress.name}@plebdevs.com copyToClipboard(user.lightningAddress.name + "@plebdevs.com")} />

)} {user?.nip05 && (

NIP-05: {user.nip05.name}@plebdevs.com copyToClipboard(user.nip05.name + "@plebdevs.com")} />

)} {account && account?.provider === "github" ? ( ) : ( )}
{session && session?.user && ( { return }} header="Name" > item.courseId) ? "course" : "resource"} header="Category"> formatDateTime(rowData?.createdAt)} header="Date"> )}
) ); }; export default UserProfile;