diff --git a/src/components/appHeader/index.tsx b/src/components/appHeader/index.tsx index 4df09f0f..9a0c8134 100644 --- a/src/components/appHeader/index.tsx +++ b/src/components/appHeader/index.tsx @@ -14,16 +14,7 @@ export default function AppHeader() {
-
-
- Home -
-
- -
-
+
diff --git a/src/components/columns/account/active.tsx b/src/components/columns/account/active.tsx index ceac00fe..07e94106 100644 --- a/src/components/columns/account/active.tsx +++ b/src/components/columns/account/active.tsx @@ -8,10 +8,12 @@ import { tagsToArray } from '@utils/transform'; import * as DropdownMenu from '@radix-ui/react-dropdown-menu'; import { AvatarIcon, ExitIcon, GearIcon } from '@radix-ui/react-icons'; +import { writeText } from '@tauri-apps/api/clipboard'; import destr from 'destr'; import { useAtomValue } from 'jotai'; import Image from 'next/image'; import { useRouter } from 'next/router'; +import { nip19 } from 'nostr-tools'; import { memo, useContext, useEffect, useRef } from 'react'; export const ActiveAccount = memo(function ActiveAccount({ user }: { user: any }) { @@ -23,10 +25,14 @@ export const ActiveAccount = memo(function ActiveAccount({ user }: { user: any } const now = useRef(new Date()); - const openProfile = () => { + const openProfilePage = () => { router.push(`/users/${user.id}`); }; + const copyPublicKey = async () => { + await writeText(nip19.npubEncode(user.id)); + }; + useEffect(() => { const unsubscribe = pool.subscribe( [ @@ -57,40 +63,51 @@ export const ActiveAccount = memo(function ActiveAccount({ user }: { user: any } return ( - openProfile()} - className="group relative flex h-7 select-none items-center rounded-sm px-1 pl-7 text-sm leading-none text-zinc-400 outline-none data-[disabled]:pointer-events-none data-[highlighted]:bg-zinc-700 data-[highlighted]:text-fuchsia-500" + onClick={() => openProfilePage()} + className="group relative flex h-7 select-none items-center rounded-sm px-1 pl-7 text-sm leading-none text-zinc-400 outline-none data-[disabled]:pointer-events-none data-[highlighted]:bg-zinc-800 data-[highlighted]:text-fuchsia-500" >
Open profile
- + Update profile - + copyPublicKey()} + className="group relative flex h-7 select-none items-center rounded px-1 pl-7 text-sm leading-none text-zinc-400 outline-none data-[disabled]:pointer-events-none data-[highlighted]:bg-zinc-800 data-[highlighted]:text-fuchsia-500" + > Copy public key - +
Settings
- +
diff --git a/src/components/columns/account/inactive.tsx b/src/components/columns/account/inactive.tsx index 9fcb1311..b9bd5060 100644 --- a/src/components/columns/account/inactive.tsx +++ b/src/components/columns/account/inactive.tsx @@ -10,8 +10,8 @@ export const InactiveAccount = memo(function InactiveAccount({ user }: { user: a }; return ( - ); }); diff --git a/src/components/columns/account/index.tsx b/src/components/columns/account/index.tsx index 6fcde6b3..83cd14bf 100644 --- a/src/components/columns/account/index.tsx +++ b/src/components/columns/account/index.tsx @@ -1,6 +1,7 @@ import AccountList from '@components/columns/account/list'; import LumeSymbol from '@assets/icons/Lume'; + import { PlusIcon } from '@radix-ui/react-icons'; import { getVersion } from '@tauri-apps/api/app'; import Link from 'next/link'; @@ -23,14 +24,14 @@ export default function AccountColumn() {
diff --git a/src/components/columns/navigator/index.tsx b/src/components/columns/navigator/index.tsx index 9b54946c..4b65af68 100644 --- a/src/components/columns/navigator/index.tsx +++ b/src/components/columns/navigator/index.tsx @@ -3,7 +3,7 @@ import Newsfeed from '@components/columns/navigator/newsfeed'; export default function NavigatorColumn() { return ( -
+
{/* Newsfeed */} {/* Messages */} diff --git a/src/components/columns/navigator/messages/index.tsx b/src/components/columns/navigator/messages/index.tsx index 09536284..b0852b3d 100644 --- a/src/components/columns/navigator/messages/index.tsx +++ b/src/components/columns/navigator/messages/index.tsx @@ -1,14 +1,29 @@ +import { MessageList } from '@components/columns/navigator/messages/list'; + +import { activeAccountAtom } from '@stores/account'; + +import { getAllFollowsByID } from '@utils/storage'; + import * as Collapsible from '@radix-ui/react-collapsible'; import { TriangleUpIcon } from '@radix-ui/react-icons'; -import { useState } from 'react'; +import { useAtom } from 'jotai'; +import { useEffect, useState } from 'react'; export default function Messages() { const [open, setOpen] = useState(true); + const [follows, setFollows] = useState([]); + const [activeAccount] = useAtom(activeAccountAtom); + + useEffect(() => { + getAllFollowsByID(activeAccount.id) + .then((res: any) => setFollows(res)) + .catch(console.error); + }, [activeAccount.id]); return ( - -
- + +
+

- Messages + Chats

- + + +
); diff --git a/src/components/columns/navigator/messages/list.tsx b/src/components/columns/navigator/messages/list.tsx index 9a202232..0dc60dc2 100644 --- a/src/components/columns/navigator/messages/list.tsx +++ b/src/components/columns/navigator/messages/list.tsx @@ -1,13 +1,33 @@ import { UserMini } from '@components/user/mini'; -import { Key, memo } from 'react'; +import { useVirtualizer } from '@tanstack/react-virtual'; +import { Suspense, memo, useRef } from 'react'; export const MessageList = memo(function MessageList({ data }: { data: any }) { + const parentRef = useRef(null); + + const virtualizer = useVirtualizer({ + count: data.length, + estimateSize: () => 32, + getScrollElement: () => parentRef.current, + }); + const items = virtualizer.getVirtualItems(); + return ( - <> - {data.map((item: { pubkey: string }, index: Key) => ( - - ))} - +
+ Loading...

}> + {items.length > 0 && ( +
+
+ {items.map((virtualRow) => ( +
+ +
+ ))} +
+
+ )} +
+
); }); diff --git a/src/components/columns/navigator/newsfeed/index.tsx b/src/components/columns/navigator/newsfeed/index.tsx index 23394c83..9bbcc2cd 100644 --- a/src/components/columns/navigator/newsfeed/index.tsx +++ b/src/components/columns/navigator/newsfeed/index.tsx @@ -10,7 +10,7 @@ export default function Newsfeed() { return (
- +
-
+