mirror of
https://github.com/purrgrammer/grimoire.git
synced 2026-04-10 07:27:23 +02:00
refactor: auto-generate subscription ID in useReqTimelineEnhanced
Remove the manual `id` parameter from useReqTimelineEnhanced and generate it
automatically from the filter, relays, and stream option. This prevents bugs
where the ID doesn't match the actual query parameters.
Benefits:
- Simpler API - one less parameter to pass
- Impossible to create ID/filter mismatches
- ID always perfectly reflects what's being queried
- More maintainable and less error-prone
The subscription ID is now generated as:
`req-${JSON.stringify(filters)}-${relays.join(",")}-${stream}`
This ensures the subscription re-triggers when any of these values change,
which is exactly when we want to re-subscribe.
Updated call site in ReqViewer.tsx to use the new API.
This commit is contained in:
@@ -760,12 +760,10 @@ export default function ReqViewer({
|
||||
eoseReceived,
|
||||
relayStates: reqRelayStates,
|
||||
overallState,
|
||||
} = useReqTimelineEnhanced(
|
||||
`req-${JSON.stringify(resolvedFilter)}-${closeOnEose}`,
|
||||
resolvedFilter,
|
||||
normalizedRelays,
|
||||
{ limit: resolvedFilter.limit || 50, stream },
|
||||
);
|
||||
} = useReqTimelineEnhanced(resolvedFilter, normalizedRelays, {
|
||||
limit: resolvedFilter.limit || 50,
|
||||
stream,
|
||||
});
|
||||
|
||||
const [showQuery, setShowQuery] = useState(false);
|
||||
const [showExportDialog, setShowExportDialog] = useState(false);
|
||||
|
||||
@@ -36,14 +36,13 @@ interface UseReqTimelineEnhancedReturn {
|
||||
* - Syncs connection state from RelayStateManager
|
||||
* - Tracks events per relay via event._relay metadata
|
||||
* - Derives overall state from individual relay states
|
||||
* - Generates subscription ID automatically from filters, relays, and options
|
||||
*
|
||||
* @param id - Unique identifier for this timeline (for caching)
|
||||
* @param filters - Nostr filter(s)
|
||||
* @param relays - Array of relay URLs
|
||||
* @param options - Stream mode, limit, etc.
|
||||
*/
|
||||
export function useReqTimelineEnhanced(
|
||||
id: string,
|
||||
filters: Filter | Filter[],
|
||||
relays: string[],
|
||||
options: UseReqTimelineEnhancedOptions = { limit: 50 },
|
||||
@@ -85,6 +84,12 @@ export function useReqTimelineEnhanced(
|
||||
const stableFilters = useStableValue(filters);
|
||||
const stableRelays = useStableArray(relays);
|
||||
|
||||
// Generate stable subscription ID from parameters
|
||||
// This ensures re-subscription when filters, relays, or stream mode changes
|
||||
const subscriptionId = useMemo(() => {
|
||||
return `req-${JSON.stringify(stableFilters)}-${stableRelays.join(",")}-${stream}`;
|
||||
}, [stableFilters, stableRelays, stream]);
|
||||
|
||||
// Initialize relay states when relays change
|
||||
useEffect(() => {
|
||||
queryStartedAt.current = Date.now();
|
||||
@@ -317,7 +322,7 @@ export function useReqTimelineEnhanced(
|
||||
return () => {
|
||||
subscriptions.forEach((sub) => sub.unsubscribe());
|
||||
};
|
||||
}, [id, stableFilters, stableRelays, limit, stream, eventStore]);
|
||||
}, [subscriptionId, limit, eventStore]);
|
||||
|
||||
// Derive overall state from individual relay states
|
||||
const overallState = useMemo(() => {
|
||||
|
||||
Reference in New Issue
Block a user