From 3b7806963a4fb15cd739f954f9797655b16c03b1 Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Sat, 24 Jan 2026 13:39:55 -0600 Subject: [PATCH 1/3] Add more Live Event refreshing (#9745) * Refresh on foreground * Add back interval --- src/analytics/metrics/client.ts | 2 +- src/features/liveEvents/context.tsx | 9 +++++++-- src/lib/appState.ts | 14 +++++++------- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/analytics/metrics/client.ts b/src/analytics/metrics/client.ts index 8ed02f380..868cbc93e 100644 --- a/src/analytics/metrics/client.ts +++ b/src/analytics/metrics/client.ts @@ -51,7 +51,7 @@ export class MetricsClient> { } this.queue.push(e) - logger.info(`event: ${e.event as string}`, e) + logger.debug(`event: ${e.event as string}`, e) if (this.queue.length > this.maxBatchSize) { this.flush() diff --git a/src/features/liveEvents/context.tsx b/src/features/liveEvents/context.tsx index 97f3cd3e5..b39195539 100644 --- a/src/features/liveEvents/context.tsx +++ b/src/features/liveEvents/context.tsx @@ -1,6 +1,7 @@ import {createContext, useContext, useMemo} from 'react' import {QueryClient, useQuery} from '@tanstack/react-query' +import {useOnAppStateChange} from '#/lib/appState' import {useIsBskyTeam} from '#/lib/hooks/useIsBskyTeam' import { convertBskyAppUrlIfNeeded, @@ -35,12 +36,12 @@ const Context = createContext(DEFAULT_LIVE_EVENTS) export function Provider({children}: React.PropsWithChildren<{}>) { const [isDevMode] = useDevMode() const isBskyTeam = useIsBskyTeam() - const {data} = useQuery( + const {data, refetch} = useQuery( { // keep this, prefectching handles initial load staleTime: 1000 * 15, queryKey: liveEventsQueryKey, - refetchInterval: 1000 * 60 * 5, + refetchInterval: 1000 * 60 * 5, // refetch every 5 minutes async queryFn() { return fetchLiveEvents() }, @@ -48,6 +49,10 @@ export function Provider({children}: React.PropsWithChildren<{}>) { qc, ) + useOnAppStateChange(state => { + if (state === 'active') refetch() + }) + const ctx = useMemo(() => { if (!data) return DEFAULT_LIVE_EVENTS const feeds = data.feeds.filter(f => { diff --git a/src/lib/appState.ts b/src/lib/appState.ts index 042e2d480..6cc233712 100644 --- a/src/lib/appState.ts +++ b/src/lib/appState.ts @@ -12,15 +12,15 @@ export function onAppStateChange(cb: (state: AppStateStatus) => void) { }) } -export function useAppState() { - const [state, setState] = useState(AppState.currentState) - +export function useOnAppStateChange(cb: (state: AppStateStatus) => void) { useEffect(() => { - const sub = onAppStateChange(next => { - setState(next) - }) + const sub = onAppStateChange(next => cb(next)) return () => sub.remove() - }, []) + }, [cb]) +} +export function useAppState() { + const [state, setState] = useState(AppState.currentState) + useOnAppStateChange(setState) return state } -- 2.51.2 From f82bc98d8d7d34edbf9b75c664987b000ae2db2b Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Sun, 25 Jan 2026 15:48:18 -0600 Subject: [PATCH 2/3] Allow users to dismiss sidebar LEF banner (#9753) --- .../SidebarLiveEventFeedsBanner.tsx | 95 +++++++++++++++++-- 1 file changed, 86 insertions(+), 9 deletions(-) diff --git a/src/features/liveEvents/components/SidebarLiveEventFeedsBanner.tsx b/src/features/liveEvents/components/SidebarLiveEventFeedsBanner.tsx index 25a5db8c8..d68a3c762 100644 --- a/src/features/liveEvents/components/SidebarLiveEventFeedsBanner.tsx +++ b/src/features/liveEvents/components/SidebarLiveEventFeedsBanner.tsx @@ -1,13 +1,90 @@ +import {View} from 'react-native' +import {msg, Trans} from '@lingui/macro' +import {useLingui} from '@lingui/react' + +import {atoms as a} from '#/alf' +import {Button} from '#/components/Button' +import {TimesLarge_Stroke2_Corner0_Rounded as CloseIcon} from '#/components/icons/Times' +import * as Toast from '#/components/Toast' import {LiveEventFeedCardCompact} from '#/features/liveEvents/components/LiveEventFeedCardCompact' -import {useLiveEvents} from '#/features/liveEvents/context' +import {useUserPreferencedLiveEvents} from '#/features/liveEvents/context' +import {useUpdateLiveEventPreferences} from '#/features/liveEvents/preferences' +import {type LiveEventFeed} from '#/features/liveEvents/types' export function SidebarLiveEventFeedsBanner() { - const events = useLiveEvents() - return events.feeds.map(feed => ( - - )) + const events = useUserPreferencedLiveEvents() + return events.feeds.map(feed => ) +} + +function Inner({feed}: {feed: LiveEventFeed}) { + const {_} = useLingui() + const layout = feed.layouts.wide + + const {mutate: update, variables} = useUpdateLiveEventPreferences({ + feed, + metricContext: 'sidebar', + onUpdateSuccess({undoAction}) { + Toast.show( + + + + {undoAction ? ( + Live event hidden + ) : ( + Live event unhidden + )} + + {undoAction && ( + { + if (undoAction) { + update(undoAction) + } + }}> + Undo + + )} + , + {type: 'success'}, + ) + }, + }) + + if (variables) return null + + return ( + + + + + + + + ) } -- 2.51.2 From 282b5e84608c007bfbdc6dbb3b378619397fb798 Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Sun, 25 Jan 2026 16:04:27 -0600 Subject: [PATCH 3/3] Bump version to 1.116.0 (#9751) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 825e2d107..8ca89a08a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bsky.app", - "version": "1.115.0", + "version": "1.116.0", "private": true, "engines": { "node": ">=20" -- 2.51.2