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 (
+
+
+
+ );
+});
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))}>;
+}