From e949708ceca60e3dc83a157b97351e18ce576c7c Mon Sep 17 00:00:00 2001 From: Martti Malmi Date: Fri, 6 Oct 2023 13:13:49 +0300 Subject: [PATCH] extract ProfileTab from ProfilePage --- .../src/Pages/{ => Profile}/ProfilePage.css | 0 .../src/Pages/{ => Profile}/ProfilePage.tsx | 170 ++---------------- packages/app/src/Pages/Profile/ProfileTab.tsx | 154 ++++++++++++++++ packages/app/src/index.tsx | 2 +- 4 files changed, 172 insertions(+), 154 deletions(-) rename packages/app/src/Pages/{ => Profile}/ProfilePage.css (100%) rename packages/app/src/Pages/{ => Profile}/ProfilePage.tsx (75%) create mode 100644 packages/app/src/Pages/Profile/ProfileTab.tsx diff --git a/packages/app/src/Pages/ProfilePage.css b/packages/app/src/Pages/Profile/ProfilePage.css similarity index 100% rename from packages/app/src/Pages/ProfilePage.css rename to packages/app/src/Pages/Profile/ProfilePage.css diff --git a/packages/app/src/Pages/ProfilePage.tsx b/packages/app/src/Pages/Profile/ProfilePage.tsx similarity index 75% rename from packages/app/src/Pages/ProfilePage.tsx rename to packages/app/src/Pages/Profile/ProfilePage.tsx index 5c2501ad..67ae1e62 100644 --- a/packages/app/src/Pages/ProfilePage.tsx +++ b/packages/app/src/Pages/Profile/ProfilePage.tsx @@ -6,8 +6,6 @@ import { encodeTLV, encodeTLVEntries, EventKind, - HexKey, - NostrLink, NostrPrefix, TLVEntryType, tryParseNostrLink, @@ -16,22 +14,14 @@ import { LNURL } from "@snort/shared"; import { useUserProfile } from "@snort/system-react"; import { findTag, getReactions, unwrap } from "SnortUtils"; -import { formatShort } from "Number"; import Note from "Element/Event/Note"; -import Bookmarks from "Element/Bookmarks"; -import RelaysMetadata from "Element/Relay/RelaysMetadata"; import { Tab, TabElement } from "Element/Tabs"; import Icon from "Icons/Icon"; import useMutedFeed from "Feed/MuteList"; -import useRelaysFeed from "Feed/RelaysFeed"; import usePinnedFeed from "Feed/PinnedFeed"; -import useBookmarkFeed from "Feed/BookmarkFeed"; -import useFollowersFeed from "Feed/FollowersFeed"; import useFollowsFeed from "Feed/FollowsFeed"; import useProfileBadges from "Feed/BadgesFeed"; import useModeration from "Hooks/useModeration"; -import useZapsFeed from "Feed/ZapsFeed"; -import { default as ZapElement } from "Element/Event/Zap"; import FollowButton from "Element/User/FollowButton"; import { parseId, hexToBech32 } from "SnortUtils"; import Avatar from "Element/User/Avatar"; @@ -57,59 +47,16 @@ import useLogin from "Hooks/useLogin"; import { ZapTarget } from "Zapper"; import { useStatusFeed } from "Feed/StatusFeed"; -import messages from "./messages"; +import messages from "../messages"; import { SpotlightMediaModal } from "Element/Deck/SpotlightMedia"; - -const NOTES = 0; -const REACTIONS = 1; -const FOLLOWERS = 2; -const FOLLOWS = 3; -const ZAPS = 4; -const MUTED = 5; -const BLOCKED = 6; -const RELAYS = 7; -const BOOKMARKS = 8; - -function ZapsProfileTab({ id }: { id: HexKey }) { - const zaps = useZapsFeed(new NostrLink(NostrPrefix.PublicKey, id)); - const zapsTotal = zaps.reduce((acc, z) => acc + z.amount, 0); - return ( -
-

- -

- {zaps.map(z => ( - - ))} -
- ); -} - -function FollowersTab({ id }: { id: HexKey }) { - const followers = useFollowersFeed(id); - return ; -} - -function FollowsTab({ id }: { id: HexKey }) { - const follows = useFollowsFeed(id); - return ; -} - -function RelaysTab({ id }: { id: HexKey }) { - const relays = useRelaysFeed(id); - return ; -} - -function BookMarksTab({ id }: { id: HexKey }) { - const bookmarks = useBookmarkFeed(id); - return ( - e.kind === EventKind.TextNote)} - related={bookmarks.filter(e => e.kind !== EventKind.TextNote)} - /> - ); -} +import ProfileTab, { + BookMarksTab, + FollowersTab, + FollowsTab, + ProfileTabType, + RelaysTab, + ZapsProfileTab +} from "Pages/Profile/ProfileTab"; export default function ProfilePage() { const params = useParams(); @@ -146,89 +93,6 @@ export default function ProfilePage() { const status = useStatusFeed(showStatus ? id : undefined, true); // tabs - const ProfileTab = { - Notes: { - text: ( - <> - - - - ), - value: NOTES, - }, - Reactions: { - text: ( - <> - - - - ), - value: REACTIONS, - }, - Followers: { - text: ( - <> - - - - ), - value: FOLLOWERS, - }, - Follows: { - text: ( - <> - - - - ), - value: FOLLOWS, - }, - Zaps: { - text: ( - <> - - - - ), - value: ZAPS, - }, - Muted: { - text: ( - <> - - - - ), - value: MUTED, - }, - Blocked: { - text: ( - <> - - - - ), - value: BLOCKED, - }, - Relays: { - text: ( - <> - - - - ), - value: RELAYS, - }, - Bookmarks: { - text: ( - <> - - - - ), - value: BOOKMARKS, - }, - } as { [key: string]: Tab }; const [tab, setTab] = useState(ProfileTab.Notes); const optionalTabs = [ProfileTab.Zaps, ProfileTab.Relays, ProfileTab.Bookmarks, ProfileTab.Muted].filter(a => unwrap(a), @@ -369,7 +233,7 @@ export default function ProfilePage() { if (!id) return null; switch (tab.value) { - case NOTES: + case ProfileTabType.NOTES: return ( <> {pinned @@ -399,29 +263,29 @@ export default function ProfilePage() { /> ); - case ZAPS: { + case ProfileTabType.ZAPS: { return ; } - case FOLLOWS: { + case ProfileTabType.FOLLOWS: { if (isMe) { return ; } else { return ; } } - case FOLLOWERS: { + case ProfileTabType.FOLLOWERS: { return ; } - case MUTED: { + case ProfileTabType.MUTED: { return ; } - case BLOCKED: { + case ProfileTabType.BLOCKED: { return ; } - case RELAYS: { + case ProfileTabType.RELAYS: { return ; } - case BOOKMARKS: { + case ProfileTabType.BOOKMARKS: { return ; } } diff --git a/packages/app/src/Pages/Profile/ProfileTab.tsx b/packages/app/src/Pages/Profile/ProfileTab.tsx new file mode 100644 index 00000000..f4e53478 --- /dev/null +++ b/packages/app/src/Pages/Profile/ProfileTab.tsx @@ -0,0 +1,154 @@ +import useZapsFeed from "../../Feed/ZapsFeed"; +import FormattedMessage from "../../Element/FormattedMessage"; +import messages from "../messages"; +import {formatShort} from "../../Number"; +import useFollowersFeed from "../../Feed/FollowersFeed"; +import FollowsList from "../../Element/User/FollowListBase"; +import useFollowsFeed from "../../Feed/FollowsFeed"; +import useRelaysFeed from "../../Feed/RelaysFeed"; +import RelaysMetadata from "../../Element/Relay/RelaysMetadata"; +import useBookmarkFeed from "../../Feed/BookmarkFeed"; +import Bookmarks from "../../Element/Bookmarks"; +import Icon from "../../Icons/Icon"; +import {Tab} from "../../Element/Tabs"; +import {EventKind, HexKey, NostrLink, NostrPrefix} from "@snort/system"; +import { default as ZapElement } from "Element/Event/Zap"; + +export enum ProfileTabType { + NOTES = 0, + REACTIONS = 1, + FOLLOWERS = 2, + FOLLOWS = 3, + ZAPS = 4, + MUTED = 5, + BLOCKED = 6, + RELAYS = 7, + BOOKMARKS = 8, +} + +export function ZapsProfileTab({ id }: { id: HexKey }) { + const zaps = useZapsFeed(new NostrLink(NostrPrefix.PublicKey, id)); + const zapsTotal = zaps.reduce((acc, z) => acc + z.amount, 0); + return ( +
+

+ +

+ {zaps.map(z => ( + + ))} +
+ ); +} + +export function FollowersTab({ id }: { id: HexKey }) { + const followers = useFollowersFeed(id); + return ; +} + +export function FollowsTab({ id }: { id: HexKey }) { + const follows = useFollowsFeed(id); + return ; +} + +export function RelaysTab({ id }: { id: HexKey }) { + const relays = useRelaysFeed(id); + return ; +} + +export function BookMarksTab({ id }: { id: HexKey }) { + const bookmarks = useBookmarkFeed(id); + return ( + e.kind === EventKind.TextNote)} + related={bookmarks.filter(e => e.kind !== EventKind.TextNote)} + /> + ); +} + +const ProfileTab = { + Notes: { + text: ( + <> + + + + ), + value: ProfileTabType.NOTES, + }, + Reactions: { + text: ( + <> + + + + ), + value: ProfileTabType.REACTIONS, + }, + Followers: { + text: ( + <> + + + + ), + value: ProfileTabType.FOLLOWERS, + }, + Follows: { + text: ( + <> + + + + ), + value: ProfileTabType.FOLLOWS, + }, + Zaps: { + text: ( + <> + + + + ), + value: ProfileTabType.ZAPS, + }, + Muted: { + text: ( + <> + + + + ), + value: ProfileTabType.MUTED, + }, + Blocked: { + text: ( + <> + + + + ), + value: ProfileTabType.BLOCKED, + }, + Relays: { + text: ( + <> + + + + ), + value: ProfileTabType.RELAYS, + }, + Bookmarks: { + text: ( + <> + + + + ), + value: ProfileTabType.BOOKMARKS, + }, + } as { [key: string]: Tab }; + +export default ProfileTab; \ No newline at end of file diff --git a/packages/app/src/index.tsx b/packages/app/src/index.tsx index 35b5d009..8b599091 100644 --- a/packages/app/src/index.tsx +++ b/packages/app/src/index.tsx @@ -24,7 +24,7 @@ import { IntlProvider } from "IntlProvider"; import { unwrap } from "SnortUtils"; import Layout from "Pages/Layout"; import LoginPage from "Pages/LoginPage"; -import ProfilePage from "Pages/ProfilePage"; +import ProfilePage from "Pages/Profile/ProfilePage"; import { RootRoutes, RootTabRoutes } from "Pages/Root"; import NotificationsPage from "Pages/Notifications"; import SettingsPage, { SettingsRoutes } from "Pages/SettingsPage";