diff --git a/src/components/chats/chatList.tsx b/src/components/chats/chatList.tsx
index 65bbacf1..b4b46dd4 100644
--- a/src/components/chats/chatList.tsx
+++ b/src/components/chats/chatList.tsx
@@ -11,7 +11,7 @@ import { useEffect, useState } from 'react';
export default function ChatList() {
const [list, setList] = useState([]);
const [activeAccount]: any = useLocalStorage('account', {});
- const profile = JSON.parse(activeAccount.metadata);
+ const profile = activeAccount.metadata ? JSON.parse(activeAccount.metadata) : null;
useEffect(() => {
let ignore = false;
diff --git a/src/components/eventCollector.tsx b/src/components/eventCollector.tsx
index e402d962..f640e047 100644
--- a/src/components/eventCollector.tsx
+++ b/src/components/eventCollector.tsx
@@ -13,7 +13,7 @@ import { useCallback, useContext, useEffect, useRef } from 'react';
export default function EventCollector() {
const [pool, relays]: any = useContext(RelayContext);
- const [activeAccount]: any = useLocalStorage('account', {});
+ const [activeAccount]: any = useLocalStorage('account', null);
const setHasNewerNote = useSetAtom(hasNewerNoteAtom);
const follows = JSON.parse(activeAccount.follows);
@@ -106,7 +106,15 @@ export default function EventCollector() {
}, [activeAccount.pubkey, activeAccount.id, follows, pool, relays, setHasNewerNote]);
useEffect(() => {
- subscribe();
+ let ignore = false;
+
+ if (!ignore) {
+ subscribe();
+ }
+
+ return () => {
+ ignore = true;
+ };
}, [setHasNewerNote, subscribe]);
return
;
diff --git a/src/components/note/preview/video.tsx b/src/components/note/preview/video.tsx
index 138e14ed..89dec265 100644
--- a/src/components/note/preview/video.tsx
+++ b/src/components/note/preview/video.tsx
@@ -1,5 +1,5 @@
import { memo } from 'react';
-import ReactPlayer from 'react-player/lazy';
+import ReactPlayer from 'react-player';
export const VideoPreview = memo(function VideoPreview({ url }: { url: string }) {
return (
diff --git a/src/pages/channel/index.page.tsx b/src/pages/channel/index.page.client.tsx
similarity index 100%
rename from src/pages/channel/index.page.tsx
rename to src/pages/channel/index.page.client.tsx
diff --git a/src/pages/chat/index.page.tsx b/src/pages/chat/index.page.client.tsx
similarity index 100%
rename from src/pages/chat/index.page.tsx
rename to src/pages/chat/index.page.client.tsx
diff --git a/src/pages/index.page.tsx b/src/pages/index.page.tsx
index 299aea41..3f618f28 100644
--- a/src/pages/index.page.tsx
+++ b/src/pages/index.page.tsx
@@ -18,7 +18,7 @@ import LumeSymbol from '@assets/icons/Lume';
import { writeStorage } from '@rehooks/local-storage';
import { useCallback, useContext, useEffect, useRef } from 'react';
-import { navigate } from 'vite-plugin-ssr/client/router';
+import { navigate, prefetch } from 'vite-plugin-ssr/client/router';
export function Page() {
const [pool, relays]: any = useContext(RelayContext);
@@ -123,7 +123,8 @@ export function Page() {
() => {
updateLastLogin(dateToUnix(now.current));
timeout.current = setTimeout(() => {
- navigate('/newsfeed/following', { overwriteLastHistoryEntry: true });
+ prefetch('/newsfeed/following');
+ navigate('/newsfeed/following');
}, 5000);
},
{
@@ -152,6 +153,7 @@ export function Page() {
// fetch data
fetchData(account, account.follows);
} else {
+ prefetch('/onboarding');
navigate('/onboarding', { overwriteLastHistoryEntry: true });
}
})
diff --git a/src/pages/newsfeed/following/index.page.tsx b/src/pages/newsfeed/following/index.page.client.tsx
similarity index 100%
rename from src/pages/newsfeed/following/index.page.tsx
rename to src/pages/newsfeed/following/index.page.client.tsx
diff --git a/src/pages/onboarding/login/step-2/index.page.tsx b/src/pages/onboarding/login/step-2/index.page.tsx
index 5e52b89d..ce3a3b6e 100644
--- a/src/pages/onboarding/login/step-2/index.page.tsx
+++ b/src/pages/onboarding/login/step-2/index.page.tsx
@@ -10,20 +10,22 @@ import { createAccount, createPleb, updateAccount } from '@utils/storage';
import { nip02ToArray } from '@utils/transform';
import { getPublicKey } from 'nostr-tools';
-import { useCallback, useContext, useEffect, useRef, useState } from 'react';
+import { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
+import { navigate } from 'vite-plugin-ssr/client/router';
export function Page() {
const pageContext = usePageContext();
const searchParams = pageContext.urlParsed.search;
const privkey = searchParams.privkey;
- const pubkey = getPublicKey(privkey);
+ const pubkey = useMemo(() => getPublicKey(privkey), [privkey]);
const [pool, relays]: any = useContext(RelayContext);
const [profile, setProfile] = useState({ metadata: null });
const [done, setDone] = useState(false);
const timeout = useRef(null);
+ const nip02 = useRef(null);
const createPlebs = useCallback(async (tags: string[]) => {
for (const tag of tags) {
@@ -33,6 +35,16 @@ export function Page() {
}
}, []);
+ const submit = () => {
+ // update account's folllows with NIP-02 tag list
+ const arr = nip02ToArray(nip02.current);
+ updateAccount('follows', arr, pubkey);
+ // create plebs (saved nostr profile)
+ createPlebs(nip02.current);
+ // redirect to splashscreen
+ navigate('/', { overwriteLastHistoryEntry: true });
+ };
+
useEffect(() => {
const unsubscribe = pool.subscribe(
[
@@ -43,20 +55,20 @@ export function Page() {
],
relays,
(event: any) => {
- if (event.kind === 0) {
- // create account
- createAccount(pubkey, privkey, event.content);
- // update state
- setProfile({
- metadata: JSON.parse(event.content),
- });
- } else {
- if (event.tags.length > 0) {
- createPlebs(event.tags);
- const arr = nip02ToArray(event.tags);
- // update account's folllows with NIP-02 tag list
- updateAccount('follows', arr, pubkey);
- }
+ switch (event.kind) {
+ case 0:
+ // create account
+ createAccount(pubkey, privkey, event.content);
+ // update state
+ setProfile({
+ metadata: JSON.parse(event.content),
+ });
+ break;
+ case 3:
+ nip02.current = event.tags;
+ break;
+ default:
+ break;
}
},
undefined,
@@ -73,7 +85,7 @@ export function Page() {
unsubscribe();
clearTimeout(timeout.current);
};
- }, [pool, relays, pubkey, privkey, createPlebs]);
+ }, [pool, relays, pubkey, privkey]);
return (
@@ -128,12 +140,12 @@ export function Page() {
>
) : (
- submit()}
className="inline-flex w-full transform items-center justify-center rounded-lg bg-gradient-to-r from-fuchsia-300 via-orange-100 to-amber-300 px-3.5 py-2.5 font-medium text-zinc-800 active:translate-y-1 disabled:cursor-not-allowed disabled:opacity-30"
>
Done! Go to newsfeed
-
+
)}