diff --git a/src/components/columns/account/active.tsx b/src/components/columns/account/active.tsx index 07e94106..a2f28c86 100644 --- a/src/components/columns/account/active.tsx +++ b/src/components/columns/account/active.tsx @@ -1,7 +1,5 @@ import { RelayContext } from '@components/relaysProvider'; -import { relaysAtom } from '@stores/relays'; - import { dateToUnix } from '@utils/getDate'; import { createFollows } from '@utils/storage'; import { tagsToArray } from '@utils/transform'; @@ -10,15 +8,13 @@ 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 }) { - const pool: any = useContext(RelayContext); - const relays = useAtomValue(relaysAtom); + const [pool, relays]: any = useContext(RelayContext); const router = useRouter(); const userData = destr(user.metadata); @@ -77,7 +73,7 @@ export const ActiveAccount = memo(function ActiveAccount({ user }: { user: any } -
+
-
+
{eventContent}
{/* divider */} -
+
{/* comment form */}
diff --git a/src/components/note/meta/reaction.tsx b/src/components/note/meta/reaction.tsx index 779b9905..6078d064 100644 --- a/src/components/note/meta/reaction.tsx +++ b/src/components/note/meta/reaction.tsx @@ -1,14 +1,13 @@ import { RelayContext } from '@components/relaysProvider'; import { activeAccountAtom } from '@stores/account'; -import { relaysAtom } from '@stores/relays'; import { dateToUnix } from '@utils/getDate'; import LikeIcon from '@assets/icons/like'; import LikedIcon from '@assets/icons/liked'; -import { useAtom, useAtomValue } from 'jotai'; +import { useAtomValue } from 'jotai'; import { getEventHash, signEvent } from 'nostr-tools'; import { memo, useContext, useEffect, useState } from 'react'; @@ -21,10 +20,9 @@ export const NoteReaction = memo(function NoteReaction({ eventID: string; eventPubkey: string; }) { - const pool: any = useContext(RelayContext); + const [pool, relays]: any = useContext(RelayContext); - const relays = useAtomValue(relaysAtom); - const [activeAccount] = useAtom(activeAccountAtom); + const activeAccount = useAtomValue(activeAccountAtom); const [isReact, setIsReact] = useState(false); const [like, setLike] = useState(0); diff --git a/src/components/note/metadata.tsx b/src/components/note/metadata.tsx index 31c6d3a9..0f7c0be4 100644 --- a/src/components/note/metadata.tsx +++ b/src/components/note/metadata.tsx @@ -2,11 +2,8 @@ import { NoteComment } from '@components/note/meta/comment'; import { NoteReaction } from '@components/note/meta/reaction'; import { RelayContext } from '@components/relaysProvider'; -import { relaysAtom } from '@stores/relays'; - import { createCacheCommentNote } from '@utils/storage'; -import { useAtomValue } from 'jotai'; import { useContext, useEffect, useState } from 'react'; export default function NoteMetadata({ @@ -20,8 +17,7 @@ export default function NoteMetadata({ eventTime: any; eventContent: any; }) { - const pool: any = useContext(RelayContext); - const relays = useAtomValue(relaysAtom); + const [pool, relays]: any = useContext(RelayContext); const [likes, setLikes] = useState(0); const [comments, setComments] = useState(0); diff --git a/src/components/note/parent.tsx b/src/components/note/parent.tsx index f6013bf8..6f445ae9 100644 --- a/src/components/note/parent.tsx +++ b/src/components/note/parent.tsx @@ -6,20 +6,16 @@ import { RelayContext } from '@components/relaysProvider'; import { UserExtend } from '@components/user/extend'; import { UserMention } from '@components/user/mention'; -import { relaysAtom } from '@stores/relays'; - import { createCacheNote, getNoteByID } from '@utils/storage'; import destr from 'destr'; -import { useAtomValue } from 'jotai'; import { memo, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react'; import ReactPlayer from 'react-player'; import reactStringReplace from 'react-string-replace'; export const NoteParent = memo(function NoteParent({ id }: { id: string }) { - const pool: any = useContext(RelayContext); + const [pool, relays]: any = useContext(RelayContext); - const relays = useAtomValue(relaysAtom); const [event, setEvent] = useState(null); const unsubscribe = useRef(null); @@ -109,7 +105,7 @@ export const NoteParent = memo(function NoteParent({ id }: { id: string }) { if (event) { return (
-
+
diff --git a/src/components/note/repost.tsx b/src/components/note/repost.tsx index 503cb4b3..99b00334 100644 --- a/src/components/note/repost.tsx +++ b/src/components/note/repost.tsx @@ -2,19 +2,15 @@ import { RelayContext } from '@components/relaysProvider'; import { UserExtend } from '@components/user/extend'; import { UserMention } from '@components/user/mention'; -import { relaysAtom } from '@stores/relays'; - import { createCacheNote, getNoteByID } from '@utils/storage'; import destr from 'destr'; -import { useAtomValue } from 'jotai'; import { memo, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react'; import reactStringReplace from 'react-string-replace'; export const NoteRepost = memo(function NoteRepost({ id }: { id: string }) { - const pool: any = useContext(RelayContext); + const [pool, relays]: any = useContext(RelayContext); - const relays = useAtomValue(relaysAtom); const [event, setEvent] = useState(null); const unsubscribe = useRef(null); @@ -91,7 +87,7 @@ export const NoteRepost = memo(function NoteRepost({ id }: { id: string }) { if (event) { return ( -
+
diff --git a/src/components/profile/followers.tsx b/src/components/profile/followers.tsx index db7eca53..5645b764 100644 --- a/src/components/profile/followers.tsx +++ b/src/components/profile/followers.tsx @@ -1,17 +1,12 @@ import { RelayContext } from '@components/relaysProvider'; import { UserFollow } from '@components/user/follow'; -import { relaysAtom } from '@stores/relays'; - import destr from 'destr'; -import { useAtomValue } from 'jotai'; import { Author } from 'nostr-relaypool'; import { useContext, useEffect, useState } from 'react'; export default function ProfileFollowers({ id }: { id: string }) { - const pool: any = useContext(RelayContext); - const relays: any = useAtomValue(relaysAtom); - + const [pool, relays]: any = useContext(RelayContext); const [followers, setFollowers] = useState(null); useEffect(() => { diff --git a/src/components/profile/follows.tsx b/src/components/profile/follows.tsx index 76ebd791..14cda816 100644 --- a/src/components/profile/follows.tsx +++ b/src/components/profile/follows.tsx @@ -1,16 +1,11 @@ import { RelayContext } from '@components/relaysProvider'; import { UserFollow } from '@components/user/follow'; -import { relaysAtom } from '@stores/relays'; - -import { useAtomValue } from 'jotai'; import { Author } from 'nostr-relaypool'; import { useContext, useEffect, useState } from 'react'; export default function ProfileFollows({ id }: { id: string }) { - const pool: any = useContext(RelayContext); - const relays: any = useAtomValue(relaysAtom); - + const [pool, relays]: any = useContext(RelayContext); const [follows, setFollows] = useState(null); useEffect(() => { diff --git a/src/components/profile/metadata.tsx b/src/components/profile/metadata.tsx index 60be0da9..e3d9bc7a 100644 --- a/src/components/profile/metadata.tsx +++ b/src/components/profile/metadata.tsx @@ -1,13 +1,10 @@ import { ImageWithFallback } from '@components/imageWithFallback'; import { RelayContext } from '@components/relaysProvider'; -import { relaysAtom } from '@stores/relays'; - import { truncate } from '@utils/truncate'; import Avatar from 'boring-avatars'; import destr from 'destr'; -import { useAtomValue } from 'jotai'; import Image from 'next/image'; import { Author } from 'nostr-relaypool'; import { useContext, useEffect, useState } from 'react'; @@ -15,9 +12,7 @@ import { useContext, useEffect, useState } from 'react'; const DEFAULT_BANNER = 'https://bafybeiacwit7hjmdefqggxqtgh6ht5dhth7ndptwn2msl5kpkodudsr7py.ipfs.w3s.link/banner-1.jpg'; export default function ProfileMetadata({ id }: { id: string }) { - const pool: any = useContext(RelayContext); - const relays: any = useAtomValue(relaysAtom); - + const [pool, relays]: any = useContext(RelayContext); const [profile, setProfile] = useState(null); useEffect(() => { diff --git a/src/components/profile/notes.tsx b/src/components/profile/notes.tsx index 11892f0d..d1a315c2 100644 --- a/src/components/profile/notes.tsx +++ b/src/components/profile/notes.tsx @@ -1,16 +1,11 @@ import { NoteBase } from '@components/note/base'; import { RelayContext } from '@components/relaysProvider'; -import { relaysAtom } from '@stores/relays'; - -import { useAtomValue } from 'jotai'; import { Author } from 'nostr-relaypool'; import { useContext, useEffect, useState } from 'react'; export default function ProfileNotes({ id }: { id: string }) { - const pool: any = useContext(RelayContext); - const relays: any = useAtomValue(relaysAtom); - + const [pool, relays]: any = useContext(RelayContext); const [data, setData] = useState([]); useEffect(() => { diff --git a/src/components/relaysProvider.tsx b/src/components/relaysProvider.tsx index 592a035c..777030cf 100644 --- a/src/components/relaysProvider.tsx +++ b/src/components/relaysProvider.tsx @@ -3,7 +3,25 @@ import { createContext, useMemo } from 'react'; export const RelayContext = createContext({}); -export default function RelayProvider({ relays, children }: { relays: Array; children: React.ReactNode }) { - const value = useMemo(() => new RelayPool(relays, { useEventCache: false, logSubscriptions: false }), [relays]); - return {children}; +const relays = [ + 'wss://relay.damus.io', + 'wss://nostr-pub.wellorder.net', + 'wss://nostr.bongbong.com', + 'wss://nostr.zebedee.cloud', + 'wss://nostr.fmt.wiz.biz', + 'wss://relay.snort.social', + 'wss://offchain.pub', + 'wss://relay.current.fyi', + 'wss://nostr.bitcoiner.social', + 'wss://relay.nostr.info', + 'wss://nostr-01.dorafactory.org', + 'wss://nostr.zhongwen.world', + 'wss://nostro.cc', + 'wss://relay.nostr.net.in', + 'wss://nos.lol', +]; + +export default function RelayProvider({ children }: { children: React.ReactNode }) { + const pool = useMemo(() => new RelayPool(relays, { useEventCache: false, logSubscriptions: false }), []); + return {children}; } diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index e607694b..d2c6e264 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -1,9 +1,7 @@ import RelayProvider from '@components/relaysProvider'; -import { relaysAtom } from '@stores/relays'; - import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { Provider, useAtomValue } from 'jotai'; +import { Provider } from 'jotai'; import { queryClientAtom } from 'jotai-tanstack-query'; import { useHydrateAtoms } from 'jotai/react/utils'; import type { NextPage } from 'next'; @@ -31,13 +29,12 @@ const HydrateAtoms = ({ children }) => { export default function MyApp({ Component, pageProps }: AppPropsWithLayout) { // Use the layout defined at the page level, if available const getLayout = Component.getLayout ?? ((page) => page); - const relays = useAtomValue(relaysAtom); return ( - {getLayout()} + {getLayout()} diff --git a/src/pages/init.tsx b/src/pages/init.tsx index 344843d7..9ed040f3 100644 --- a/src/pages/init.tsx +++ b/src/pages/init.tsx @@ -11,7 +11,7 @@ import { pubkeyArray } from '@utils/transform'; import LumeSymbol from '@assets/icons/Lume'; -import { useAtom, useAtomValue } from 'jotai'; +import { useAtomValue } from 'jotai'; import { useRouter } from 'next/router'; import { JSXElementConstructor, @@ -27,10 +27,9 @@ import { export default function Page() { const router = useRouter(); - const pool: any = useContext(RelayContext); + const [pool, relays]: any = useContext(RelayContext); - const relays = useAtomValue(relaysAtom); - const [activeAccount] = useAtom(activeAccountAtom); + const activeAccount = useAtomValue(activeAccountAtom); const [done, setDone] = useState(false); const now = useRef(new Date()); @@ -93,7 +92,7 @@ export default function Page() { return (
{/* dragging area */} -
+
{/* end dragging area */}
diff --git a/src/pages/newsfeed/[id].tsx b/src/pages/newsfeed/[id].tsx index 26735c08..8fb1509d 100644 --- a/src/pages/newsfeed/[id].tsx +++ b/src/pages/newsfeed/[id].tsx @@ -6,11 +6,8 @@ import { NoteComment } from '@components/note/comment'; import { NoteExtend } from '@components/note/extend'; import { RelayContext } from '@components/relaysProvider'; -import { relaysAtom } from '@stores/relays'; - import { getAllCommentNotes, getNoteByID } from '@utils/storage'; -import { useAtomValue } from 'jotai'; import { useRouter } from 'next/router'; import { JSXElementConstructor, @@ -23,13 +20,11 @@ import { } from 'react'; export default function Page() { - const pool: any = useContext(RelayContext); + const [pool, relays]: any = useContext(RelayContext); const router = useRouter(); const id = router.query.id || null; - const relays: any = useAtomValue(relaysAtom); - const [rootEvent, setRootEvent] = useState(null); const [comments, setComments] = useState([]); diff --git a/src/pages/onboarding/create/index.tsx b/src/pages/onboarding/create/index.tsx index e6703ea9..70e3c265 100644 --- a/src/pages/onboarding/create/index.tsx +++ b/src/pages/onboarding/create/index.tsx @@ -2,12 +2,9 @@ import BaseLayout from '@layouts/base'; import { RelayContext } from '@components/relaysProvider'; -import { relaysAtom } from '@stores/relays'; - import { createAccount } from '@utils/storage'; import { ArrowLeftIcon, EyeClosedIcon, EyeOpenIcon } from '@radix-ui/react-icons'; -import { useAtomValue } from 'jotai'; import Image from 'next/image'; import { useRouter } from 'next/router'; import { generatePrivateKey, getEventHash, getPublicKey, nip19, signEvent } from 'nostr-tools'; @@ -20,9 +17,8 @@ const config: Config = { export default function Page() { const router = useRouter(); - const pool: any = useContext(RelayContext); + const [pool, relays]: any = useContext(RelayContext); - const relays = useAtomValue(relaysAtom); const [type, setType] = useState('password'); const [loading, setLoading] = useState(false); diff --git a/src/pages/onboarding/create/step-2.tsx b/src/pages/onboarding/create/step-2.tsx index b08090bd..e137910a 100644 --- a/src/pages/onboarding/create/step-2.tsx +++ b/src/pages/onboarding/create/step-2.tsx @@ -3,13 +3,10 @@ import BaseLayout from '@layouts/base'; import { RelayContext } from '@components/relaysProvider'; import { UserBase } from '@components/user/base'; -import { relaysAtom } from '@stores/relays'; - import { createFollows } from '@utils/storage'; import { CheckCircledIcon } from '@radix-ui/react-icons'; import { createClient } from '@supabase/supabase-js'; -import { useAtomValue } from 'jotai'; import { useRouter } from 'next/router'; import { getEventHash, signEvent } from 'nostr-tools'; import { @@ -64,12 +61,11 @@ const initialList = [ ]; export default function Page() { - const pool: any = useContext(RelayContext); + const [pool, relays]: any = useContext(RelayContext); const router = useRouter(); const { id, privkey }: any = router.query || ''; - const relays = useAtomValue(relaysAtom); const [loading, setLoading] = useState(false); const [list, setList]: any = useState(initialList); const [follows, setFollows] = useState([]); diff --git a/src/pages/onboarding/login/step-2.tsx b/src/pages/onboarding/login/step-2.tsx index 7882ef1e..f55b893d 100644 --- a/src/pages/onboarding/login/step-2.tsx +++ b/src/pages/onboarding/login/step-2.tsx @@ -2,14 +2,11 @@ import BaseLayout from '@layouts/base'; import { RelayContext } from '@components/relaysProvider'; -import { relaysAtom } from '@stores/relays'; - import { createAccount, createFollows } from '@utils/storage'; import { tagsToArray } from '@utils/transform'; import { truncate } from '@utils/truncate'; import destr from 'destr'; -import { useAtomValue } from 'jotai'; import Image from 'next/image'; import { useRouter } from 'next/router'; import { getPublicKey, nip19 } from 'nostr-tools'; @@ -24,13 +21,12 @@ import { } from 'react'; export default function Page() { - const pool: any = useContext(RelayContext); + const [pool, relays]: any = useContext(RelayContext); const router = useRouter(); const privkey: any = router.query.privkey || null; const pubkey = privkey ? getPublicKey(privkey) : null; - const relays = useAtomValue(relaysAtom); const [profile, setProfile] = useState(null); const [done, setDone] = useState(false);