From 3b78123939b406570c29ea91a69b13cb03b89e8e Mon Sep 17 00:00:00 2001 From: Ren Amamiya <123083837+reyamir@users.noreply.github.com> Date: Wed, 1 Mar 2023 21:19:31 +0700 Subject: [PATCH] fixed duplicate connection --- src/components/connectors/note.tsx | 2 +- src/components/contexts/database.tsx | 31 ++++++++--------- src/components/navigatorBar/index.tsx | 2 +- src/components/note/atoms/user.tsx | 1 - .../note/atoms/userWithUsername.tsx | 33 ++++--------------- src/pages/feed/following.tsx | 12 ++++--- src/pages/index.tsx | 1 - src/pages/profile/update.tsx | 1 - 8 files changed, 31 insertions(+), 52 deletions(-) diff --git a/src/components/connectors/note.tsx b/src/components/connectors/note.tsx index dcbe0f0c..ebe099a4 100644 --- a/src/components/connectors/note.tsx +++ b/src/components/connectors/note.tsx @@ -8,7 +8,7 @@ import { useLocalStorage } from '@rehooks/local-storage'; import { memo, useCallback, useContext, useRef } from 'react'; export const NoteConnector = memo(function NoteConnector() { - const db: any = useContext(DatabaseContext); + const { db }: any = useContext(DatabaseContext); const relayPool: any = useContext(RelayContext); const now = useRef(new Date()); diff --git a/src/components/contexts/database.tsx b/src/components/contexts/database.tsx index 45f3032b..84116eeb 100644 --- a/src/components/contexts/database.tsx +++ b/src/components/contexts/database.tsx @@ -1,14 +1,14 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { writeStorage } from '@rehooks/local-storage'; -import { createContext, useEffect, useMemo } from 'react'; +import { createContext, useEffect, useState } from 'react'; import Database from 'tauri-plugin-sql-api'; export const DatabaseContext = createContext({}); -const initDB = typeof window !== 'undefined' ? await Database.load('sqlite:lume.db') : null; +const db = typeof window !== 'undefined' ? await Database.load('sqlite:lume.db') : null; export default function DatabaseProvider({ children }: { children: React.ReactNode }) { - const db = useMemo(() => initDB, []); + const [done, setDone] = useState(false); useEffect(() => { const getRelays = async () => { @@ -40,17 +40,18 @@ export default function DatabaseProvider({ children }: { children: React.ReactNo writeStorage('follows', arr); }; - if (db !== null) { - getRelays().catch(console.error); - getAccount() - .then((res) => { - if (res) { - getFollows(res.id).catch(console.error); - } - }) - .catch(console.error); - } - }, [db]); + getRelays().catch(console.error); + getAccount() + .then((res) => { + if (res) { + getFollows(res.id).catch(console.error); + } + setDone(true); + }) + .catch(console.error); + }, []); - return {children}; + if (done === true) { + return {children}; + } } diff --git a/src/components/navigatorBar/index.tsx b/src/components/navigatorBar/index.tsx index 904fd70e..6d9d3d85 100644 --- a/src/components/navigatorBar/index.tsx +++ b/src/components/navigatorBar/index.tsx @@ -9,7 +9,7 @@ import { useLocalStorage } from '@rehooks/local-storage'; export default function NavigatorBar() { const [currentUser]: any = useLocalStorage('current-user'); - const profile = currentUser.metadata !== undefined ? JSON.parse(currentUser.metadata) : { display_name: null, username: null }; + const profile = JSON.parse(currentUser.metadata); return (
diff --git a/src/components/note/atoms/user.tsx b/src/components/note/atoms/user.tsx index 44ae2d45..464800e5 100644 --- a/src/components/note/atoms/user.tsx +++ b/src/components/note/atoms/user.tsx @@ -39,7 +39,6 @@ export const User = memo(function User({ pubkey, time }: { pubkey: string; time: useEffect(() => { const initialProfile = async () => { const result: any = await db.select(`SELECT metadata FROM cache_profiles WHERE id = "${pubkey}"`); - db.close; return result; }; diff --git a/src/components/note/atoms/userWithUsername.tsx b/src/components/note/atoms/userWithUsername.tsx index abc6b50f..a581599c 100644 --- a/src/components/note/atoms/userWithUsername.tsx +++ b/src/components/note/atoms/userWithUsername.tsx @@ -26,11 +26,7 @@ export const UserWithUsername = memo(function UserWithUsername({ pubkey }: { pub const metadata: any = JSON.parse(rawMetadata.content); if (profile.picture === null || profile.name === null) { setProfile(metadata); - await db.execute( - `INSERT OR IGNORE INTO cache_profiles (pubkey, metadata) VALUES ("${pubkey}", '${JSON.stringify( - metadata - )}')` - ); + await db.execute(`INSERT OR IGNORE INTO cache_profiles (pubkey, metadata) VALUES ("${pubkey}", '${JSON.stringify(metadata)}')`); } else { return; } @@ -41,10 +37,7 @@ export const UserWithUsername = memo(function UserWithUsername({ pubkey }: { pub useEffect(() => { const initialProfile = async () => { - const result: any = await db.select( - `SELECT metadata FROM cache_profiles WHERE pubkey = "${pubkey}"` - ); - db.close; + const result: any = await db.select(`SELECT metadata FROM cache_profiles WHERE pubkey = "${pubkey}"`); return result; }; @@ -61,30 +54,16 @@ export const UserWithUsername = memo(function UserWithUsername({ pubkey }: { pub
{profile.picture ? ( - + ) : ( - + )}
- - {profile.name ? profile.name : truncate(pubkey, 16, ' .... ')} - - - {profile.username ? profile.username : truncate(pubkey, 16, ' .... ')} - + {profile.name ? profile.name : truncate(pubkey, 16, ' .... ')} + {profile.username ? profile.username : truncate(pubkey, 16, ' .... ')}
diff --git a/src/pages/feed/following.tsx b/src/pages/feed/following.tsx index 165420ff..a1dd9072 100644 --- a/src/pages/feed/following.tsx +++ b/src/pages/feed/following.tsx @@ -7,20 +7,22 @@ import { Placeholder } from '@components/note/placeholder'; import { Repost } from '@components/note/repost'; import { Single } from '@components/note/single'; +import { useLocalStorage, writeStorage } from '@rehooks/local-storage'; import { useCallback } from 'react'; -import { JSXElementConstructor, ReactElement, ReactFragment, ReactPortal, useContext, useEffect, useRef, useState } from 'react'; +import { JSXElementConstructor, ReactElement, ReactFragment, ReactPortal, useContext, useEffect, useRef } from 'react'; import { Virtuoso } from 'react-virtuoso'; export default function Page() { - const db: any = useContext(DatabaseContext); - const [data, setData] = useState(() => []); + const { db }: any = useContext(DatabaseContext); + const [data]: any = useLocalStorage('notes'); + const limit = useRef(30); const offset = useRef(0); useEffect(() => { const getData = async () => { const result = await db.select(`SELECT * FROM cache_notes ORDER BY created_at DESC LIMIT ${limit.current}`); - setData(result); + writeStorage('notes', result); }; getData().catch(console.error); @@ -30,7 +32,7 @@ export default function Page() { offset.current += limit.current; // next query const result = await db.select(`SELECT * FROM cache_notes ORDER BY created_at DESC LIMIT ${limit.current} OFFSET ${offset.current}`); - setData((data) => [...data, ...result]); + writeStorage('notes', (data) => [...data, ...result]); }, [db]); const ItemContent = useCallback( diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 661ef1f2..544b4c4f 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -15,7 +15,6 @@ export default function Page() { const [loading, setLoading] = useState(true); useEffect(() => { - console.log(currentUser); if (!currentUser) { setTimeout(() => { setLoading(false); diff --git a/src/pages/profile/update.tsx b/src/pages/profile/update.tsx index 4b018bf2..37a93b57 100644 --- a/src/pages/profile/update.tsx +++ b/src/pages/profile/update.tsx @@ -53,7 +53,6 @@ export default function Page() { // save account to database const db = await Database.load('sqlite:lume.db'); await db.execute(`UPDATE accounts SET metadata = '${JSON.stringify(data)}' WHERE pubkey = "${currentUser.pubkey}"`); - await db.close(); // set currentUser in global state currentUser.set({