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";