From 02148fd97a0dde50bd49446ef4f3ac0481b9b01a Mon Sep 17 00:00:00 2001 From: Kieran Date: Tue, 17 Jan 2023 16:56:09 +0000 Subject: [PATCH] feat: Rate limit `useSubscription` --- src/feed/Subscription.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/feed/Subscription.ts b/src/feed/Subscription.ts index feeeae1..3f35284 100644 --- a/src/feed/Subscription.ts +++ b/src/feed/Subscription.ts @@ -1,4 +1,4 @@ -import { useEffect, useReducer } from "react"; +import { useEffect, useMemo, useReducer, useState } from "react"; import { System } from "../nostr/System"; import { TaggedRawEvent } from "../nostr"; import { Subscriptions } from "../nostr/Subscriptions"; @@ -32,6 +32,7 @@ function notesReducer(state: NoteStore, ev: TaggedRawEvent) { */ export default function useSubscription(sub: Subscriptions | null, options?: UseSubscriptionOptions) { const [state, dispatch] = useReducer(notesReducer, { notes: [] }); + const [debounce, setDebounce] = useState(0); useEffect(() => { if (sub) { @@ -57,5 +58,12 @@ export default function useSubscription(sub: Subscriptions | null, options?: Use } }, [sub]); - return state; + useEffect(() => { + let t = setTimeout(() => { + setDebounce(s => s += 1); + }, 100); + return () => clearTimeout(t); + }, [state]); + + return useMemo(() => state, [debounce]); } \ No newline at end of file