From 29918f78f9857158036dd9617cdf009d00a0147b Mon Sep 17 00:00:00 2001 From: Gigi Date: Tue, 21 Oct 2025 07:21:01 +0200 Subject: [PATCH] refactor: remove eslint-disable comments by typing publish, fixing unused-vars, and updating effect deps --- src/App.tsx | 14 ++++---------- src/components/BookmarkItem.tsx | 16 ++++++++++++++-- src/components/Debug.tsx | 24 ++++-------------------- src/hooks/useArticleLoader.ts | 17 ++++++++++++++--- src/hooks/useExternalUrlLoader.ts | 18 ++++++++++++------ 5 files changed, 48 insertions(+), 41 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index eade1002..74253b0e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -8,6 +8,7 @@ import { AccountManager, Accounts } from 'applesauce-accounts' import { registerCommonAccountTypes } from 'applesauce-accounts/accounts' import { RelayPool } from 'applesauce-relay' import { NostrConnectSigner } from 'applesauce-signers' +import type { NostrEvent } from 'nostr-tools' import { getDefaultBunkerPermissions } from './services/nostrConnect' import { createAddressLoader } from 'applesauce-loaders/loaders' import Debug from './components/Debug' @@ -386,16 +387,9 @@ function App() { // Wire the signer to use this pool; make publish non-blocking so callers don't // wait for every relay send to finish. Responses still resolve the pending request. NostrConnectSigner.subscriptionMethod = pool.subscription.bind(pool) - NostrConnectSigner.publishMethod = (relays: string[], event: unknown) => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const result: any = pool.publish(relays, event as any) - // eslint-disable-next-line @typescript-eslint/no-explicit-any - if (result && typeof (result as any).subscribe === 'function') { - // Subscribe to the observable but ignore completion/errors (fire-and-forget) - // eslint-disable-next-line @typescript-eslint/no-explicit-any - try { (result as any).subscribe({ complete: () => { /* noop */ }, error: () => { /* noop */ } }) } catch { /* ignore */ } - } - // Return an already-resolved promise so upstream await finishes immediately + NostrConnectSigner.publishMethod = (relays: string[], event: NostrEvent) => { + // Fire-and-forget publish; do not block callers + pool.publish(relays, event).catch(() => { /* ignore errors */ }) return Promise.resolve() } diff --git a/src/components/BookmarkItem.tsx b/src/components/BookmarkItem.tsx index 5fe64a41..a827ed40 100644 --- a/src/components/BookmarkItem.tsx +++ b/src/components/BookmarkItem.tsx @@ -145,8 +145,20 @@ export const BookmarkItem: React.FC = ({ bookmark, index, onS } if (viewMode === 'compact') { - // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars - const { articleImage, ...compactProps } = sharedProps + const compactProps = { + bookmark, + index, + hasUrls, + extractedUrls, + onSelectUrl, + authorNpub, + eventNevent, + getAuthorDisplayName, + handleReadNow, + articleSummary, + contentTypeIcon: getContentTypeIcon(), + readingProgress + } return } diff --git a/src/components/Debug.tsx b/src/components/Debug.tsx index 80e7acba..b95c7c19 100644 --- a/src/components/Debug.tsx +++ b/src/components/Debug.tsx @@ -434,11 +434,7 @@ const Debug: React.FC = ({ const elapsed = Math.round(performance.now() - start) setTLoadHighlights(elapsed) - setLiveTiming(prev => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars - const { loadHighlights, ...rest } = prev - return rest - }) + setLiveTiming(prev => ({ ...prev, loadHighlights: undefined })) DebugBus.info('debug', `Loaded ${events.length} highlight events in ${elapsed}ms`) } catch (err) { @@ -798,11 +794,7 @@ const Debug: React.FC = ({ const elapsed = Math.round(performance.now() - start) setTLoadReadingProgress(elapsed) - setLiveTiming(prev => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars - const { loadReadingProgress, ...rest } = prev - return rest - }) + setLiveTiming(prev => ({ ...prev, loadReadingProgress: undefined })) const finalMap = readingProgressController.getProgressMap() DebugBus.info('debug', `Loaded ${rawEvents.length} raw events, deduplicated to ${finalMap.size} articles in ${elapsed}ms`) @@ -871,11 +863,7 @@ const Debug: React.FC = ({ const totalEvents = kind7Events.length + kind17Events.length const elapsed = Math.round(performance.now() - start) setTLoadMarkAsRead(elapsed) - setLiveTiming(prev => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars - const { loadMarkAsRead, ...rest } = prev - return rest - }) + setLiveTiming(prev => ({ ...prev, loadMarkAsRead: undefined })) DebugBus.info('debug', `Loaded ${totalEvents} mark-as-read reactions in ${elapsed}ms`) } catch (err) { @@ -929,11 +917,7 @@ const Debug: React.FC = ({ const elapsed = Math.round(performance.now() - start) setTLoadRelayList(elapsed) - setLiveTiming(prev => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars - const { loadRelayList, ...rest } = prev - return rest - }) + setLiveTiming(prev => ({ ...prev, loadRelayList: undefined })) DebugBus.info('debug', `Loaded ${events.length} relay list events in ${elapsed}ms`) diff --git a/src/hooks/useArticleLoader.ts b/src/hooks/useArticleLoader.ts index 289a6b23..0a8b3f76 100644 --- a/src/hooks/useArticleLoader.ts +++ b/src/hooks/useArticleLoader.ts @@ -120,7 +120,18 @@ export function useArticleLoader({ return () => { mountedRef.current = false } - // Intentionally excluding setter functions from dependencies to prevent race conditions - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [naddr, relayPool, settings]) + }, [ + naddr, + relayPool, + settings, + setSelectedUrl, + setReaderContent, + setReaderLoading, + setIsCollapsed, + setHighlights, + setHighlightsLoading, + setCurrentArticleCoordinate, + setCurrentArticleEventId, + setCurrentArticle + ]) } diff --git a/src/hooks/useExternalUrlLoader.ts b/src/hooks/useExternalUrlLoader.ts index d9a7fe98..5eccbff4 100644 --- a/src/hooks/useExternalUrlLoader.ts +++ b/src/hooks/useExternalUrlLoader.ts @@ -154,9 +154,17 @@ export function useExternalUrlLoader({ return () => { mountedRef.current = false } - // Intentionally excluding setter functions from dependencies to prevent race conditions - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [url, relayPool, eventStore, cachedUrlHighlights]) + }, [ + url, + relayPool, + eventStore, + cachedUrlHighlights, + setReaderContent, + setReaderLoading, + setIsCollapsed, + setSelectedUrl, + setHighlights + ]) // Keep UI highlights synced with cached store updates without reloading content useEffect(() => { @@ -169,8 +177,6 @@ export function useExternalUrlLoader({ const next = [...additions, ...prev] return next.sort((a, b) => b.created_at - a.created_at) }) - // setHighlights is intentionally excluded from dependencies - it's stable - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [cachedUrlHighlights, url]) + }, [cachedUrlHighlights, url, setHighlights]) }