From 228647e6232d0a3a21edddaca26d7cc0ab667bdc Mon Sep 17 00:00:00 2001 From: Ren Amamiya <123083837+reyamir@users.noreply.github.com> Date: Sat, 18 Mar 2023 16:00:51 +0700 Subject: [PATCH] updated account column --- src/components/columns/account/active.tsx | 59 +++++++++++++++++++ .../account/{account.tsx => inactive.tsx} | 2 +- src/components/columns/account/index.tsx | 18 +----- src/components/columns/account/list.tsx | 35 +++++++++++ 4 files changed, 98 insertions(+), 16 deletions(-) create mode 100644 src/components/columns/account/active.tsx rename src/components/columns/account/{account.tsx => inactive.tsx} (82%) create mode 100644 src/components/columns/account/list.tsx diff --git a/src/components/columns/account/active.tsx b/src/components/columns/account/active.tsx new file mode 100644 index 00000000..bf1d20c9 --- /dev/null +++ b/src/components/columns/account/active.tsx @@ -0,0 +1,59 @@ +import { DatabaseContext } from '@components/contexts/database'; +import { RelayContext } from '@components/contexts/relay'; + +import useLocalStorage from '@rehooks/local-storage'; +import Image from 'next/image'; +import { memo, useCallback, useContext, useMemo } from 'react'; + +export const ActiveAccount = memo(function ActiveAccount({ user }: { user: any }) { + const userData = JSON.parse(user.metadata); + + const { db }: any = useContext(DatabaseContext); + const relayPool: any = useContext(RelayContext); + + const [relays]: any = useLocalStorage('relays'); + const [currentUser]: any = useLocalStorage('current-user'); + + // save follows to database + const insertFollows = useCallback( + async (follows) => { + follows.forEach(async (item) => { + if (item) { + // insert to database + await db.execute( + `INSERT OR IGNORE INTO follows (pubkey, account, kind) VALUES ("${item[1]}", "${currentUser.id}", "0")` + ); + } + }); + }, + [db, currentUser.id] + ); + + useMemo(() => { + relayPool.subscribe( + [ + { + kinds: [3], + authors: [currentUser.id], + }, + ], + relays, + (event: any) => { + insertFollows(event.tags); + }, + undefined, + (events, relayURL) => { + console.log(events, relayURL); + }, + { + unsubscribeOnEose: true, + } + ); + }, [currentUser.id, insertFollows, relayPool, relays]); + + return ( +
+ user's avatar +
+ ); +}); diff --git a/src/components/columns/account/account.tsx b/src/components/columns/account/inactive.tsx similarity index 82% rename from src/components/columns/account/account.tsx rename to src/components/columns/account/inactive.tsx index 37b23b88..24c39fc9 100644 --- a/src/components/columns/account/account.tsx +++ b/src/components/columns/account/inactive.tsx @@ -1,7 +1,7 @@ import Image from 'next/image'; import { memo } from 'react'; -export const Account = memo(function Account({ user }: { user: any }) { +export const InactiveAccount = memo(function InactiveAccount({ user }: { user: any }) { const userData = JSON.parse(user.metadata); const setCurrentUser = () => { diff --git a/src/components/columns/account/index.tsx b/src/components/columns/account/index.tsx index 96907120..6fcde6b3 100644 --- a/src/components/columns/account/index.tsx +++ b/src/components/columns/account/index.tsx @@ -1,32 +1,22 @@ -import { Account } from '@components/columns/account/account'; +import AccountList from '@components/columns/account/list'; import LumeSymbol from '@assets/icons/Lume'; import { PlusIcon } from '@radix-ui/react-icons'; import { getVersion } from '@tauri-apps/api/app'; import Link from 'next/link'; import { useCallback, useEffect, useState } from 'react'; -import Database from 'tauri-plugin-sql-api'; export default function AccountColumn() { - const [users, setUsers] = useState([]); const [version, setVersion] = useState(null); - const getAccounts = useCallback(async () => { - const db = await Database.load('sqlite:lume.db'); - const result: any = await db.select('SELECT * FROM accounts'); - - setUsers(result); - }, []); - const getAppVersion = useCallback(async () => { const appVersion = await getVersion(); setVersion(appVersion); }, []); useEffect(() => { - getAccounts().catch(console.error); getAppVersion().catch(console.error); - }, [getAccounts, getAppVersion]); + }, [getAppVersion]); return (
@@ -37,9 +27,7 @@ export default function AccountColumn() { > - {users.map((user, index) => ( - - ))} + { + if (user.id === currentUser.id) { + return ; + } else { + return ; + } + }, + [currentUser.id] + ); + + const getAccounts = useCallback(async () => { + const db = await Database.load('sqlite:lume.db'); + const result: any = await db.select('SELECT * FROM accounts'); + + setUsers(result); + }, []); + + useEffect(() => { + getAccounts().catch(console.error); + }, [getAccounts]); + + return <>{users.map((user) => renderAccount(user))}; +}