From 5d3c1aec2e1ecb46cf1a60a0e563ce4e03f91206 Mon Sep 17 00:00:00 2001
From: Ren Amamiya <123083837+reyamir@users.noreply.github.com>
Date: Thu, 2 Mar 2023 20:49:37 +0700
Subject: [PATCH] optimized note connector
---
src/components/note/connector.tsx | 62 ++++++++++++++++++++-----------
src/pages/feed/following.tsx | 38 +++++++++++++++----
2 files changed, 70 insertions(+), 30 deletions(-)
diff --git a/src/components/note/connector.tsx b/src/components/note/connector.tsx
index 23a37e30..dcea4506 100644
--- a/src/components/note/connector.tsx
+++ b/src/components/note/connector.tsx
@@ -6,14 +6,20 @@ import { dateToUnix, hoursAgo } from '@utils/getDate';
import { ReloadIcon } from '@radix-ui/react-icons';
import { useLocalStorage } from '@rehooks/local-storage';
-import { memo, useCallback, useContext, useRef } from 'react';
+import { memo, useCallback, useContext, useEffect } from 'react';
-export const NoteConnector = memo(function NoteConnector({ setReload }: { setReload: any }) {
+export const NoteConnector = memo(function NoteConnector({
+ setParentReload,
+ setHasNewNote,
+ currentDate,
+}: {
+ setParentReload: any;
+ setHasNewNote: any;
+ currentDate: any;
+}) {
const { db }: any = useContext(DatabaseContext);
const relayPool: any = useContext(RelayContext);
- const now = useRef(new Date());
-
const [follows]: any = useLocalStorage('follows');
const [relays]: any = useLocalStorage('relays');
@@ -29,34 +35,46 @@ export const NoteConnector = memo(function NoteConnector({ setReload }: { setRel
[db]
);
- relayPool.subscribe(
- [
- {
- kinds: [1],
- authors: follows,
- since: dateToUnix(hoursAgo(12, now.current)),
+ const fetchEvent = useCallback(() => {
+ relayPool.subscribe(
+ [
+ {
+ kinds: [1],
+ authors: follows,
+ since: dateToUnix(hoursAgo(12, currentDate)),
+ },
+ ],
+ relays,
+ (event: any) => {
+ // insert event to local database
+ insertDB(event).catch(console.error);
+ // show trigger update newer event
+ if (event.created_at > dateToUnix(currentDate)) {
+ setHasNewNote(true);
+ }
},
- ],
- relays,
- (event: any) => {
- insertDB(event).catch(console.error);
- },
- undefined,
- (events: any, relayURL: any) => {
- console.log(events, relayURL);
- }
- );
+ undefined,
+ (events: any, relayURL: any) => {
+ console.log(events, relayURL);
+ }
+ );
+ }, [relayPool, follows, currentDate, relays, insertDB, setHasNewNote]);
+
+ useEffect(() => {
+ fetchEvent();
+ }, [fetchEvent]);
return (
-
+
# following
-