diff --git a/frontend/prebuilt/assets/BotCodeEditor-CAcMF_eo.js b/frontend/prebuilt/assets/BotCodeEditor-OWCgOl6l.js similarity index 99% rename from frontend/prebuilt/assets/BotCodeEditor-CAcMF_eo.js rename to frontend/prebuilt/assets/BotCodeEditor-OWCgOl6l.js index 5cf59fe3..89a43f57 100644 Binary files a/frontend/prebuilt/assets/BotCodeEditor-CAcMF_eo.js and b/frontend/prebuilt/assets/BotCodeEditor-OWCgOl6l.js differ diff --git a/frontend/prebuilt/assets/BotCodeEditor-CAcMF_eo.js.map b/frontend/prebuilt/assets/BotCodeEditor-OWCgOl6l.js.map similarity index 99% rename from frontend/prebuilt/assets/BotCodeEditor-CAcMF_eo.js.map rename to frontend/prebuilt/assets/BotCodeEditor-OWCgOl6l.js.map index 9b10c829..75efbee8 100644 Binary files a/frontend/prebuilt/assets/BotCodeEditor-CAcMF_eo.js.map and b/frontend/prebuilt/assets/BotCodeEditor-OWCgOl6l.js.map differ diff --git a/frontend/prebuilt/assets/CrackerPanel-oiYTLODx.js b/frontend/prebuilt/assets/CrackerPanel-JQJfdZd8.js similarity index 99% rename from frontend/prebuilt/assets/CrackerPanel-oiYTLODx.js rename to frontend/prebuilt/assets/CrackerPanel-JQJfdZd8.js index 9a73fba4..4338134f 100644 Binary files a/frontend/prebuilt/assets/CrackerPanel-oiYTLODx.js and b/frontend/prebuilt/assets/CrackerPanel-JQJfdZd8.js differ diff --git a/frontend/prebuilt/assets/CrackerPanel-oiYTLODx.js.map b/frontend/prebuilt/assets/CrackerPanel-JQJfdZd8.js.map similarity index 99% rename from frontend/prebuilt/assets/CrackerPanel-oiYTLODx.js.map rename to frontend/prebuilt/assets/CrackerPanel-JQJfdZd8.js.map index ae9da129..7c3572fa 100644 Binary files a/frontend/prebuilt/assets/CrackerPanel-oiYTLODx.js.map and b/frontend/prebuilt/assets/CrackerPanel-JQJfdZd8.js.map differ diff --git a/frontend/prebuilt/assets/MapView-D-l2CjgS.js b/frontend/prebuilt/assets/MapView-CYaVSrn0.js similarity index 92% rename from frontend/prebuilt/assets/MapView-D-l2CjgS.js rename to frontend/prebuilt/assets/MapView-CYaVSrn0.js index 6fa8ea87..94240b3c 100644 Binary files a/frontend/prebuilt/assets/MapView-D-l2CjgS.js and b/frontend/prebuilt/assets/MapView-CYaVSrn0.js differ diff --git a/frontend/prebuilt/assets/MapView-D-l2CjgS.js.map b/frontend/prebuilt/assets/MapView-CYaVSrn0.js.map similarity index 99% rename from frontend/prebuilt/assets/MapView-D-l2CjgS.js.map rename to frontend/prebuilt/assets/MapView-CYaVSrn0.js.map index 37183972..16bda1c6 100644 Binary files a/frontend/prebuilt/assets/MapView-D-l2CjgS.js.map and b/frontend/prebuilt/assets/MapView-CYaVSrn0.js.map differ diff --git a/frontend/prebuilt/assets/NeighborsMiniMap-CstRT55H.js b/frontend/prebuilt/assets/NeighborsMiniMap-BOuqRKfi.js similarity index 85% rename from frontend/prebuilt/assets/NeighborsMiniMap-CstRT55H.js rename to frontend/prebuilt/assets/NeighborsMiniMap-BOuqRKfi.js index 0fb0bcb4..b2532dc6 100644 Binary files a/frontend/prebuilt/assets/NeighborsMiniMap-CstRT55H.js and b/frontend/prebuilt/assets/NeighborsMiniMap-BOuqRKfi.js differ diff --git a/frontend/prebuilt/assets/NeighborsMiniMap-CstRT55H.js.map b/frontend/prebuilt/assets/NeighborsMiniMap-BOuqRKfi.js.map similarity index 97% rename from frontend/prebuilt/assets/NeighborsMiniMap-CstRT55H.js.map rename to frontend/prebuilt/assets/NeighborsMiniMap-BOuqRKfi.js.map index d02e183c..555f1091 100644 Binary files a/frontend/prebuilt/assets/NeighborsMiniMap-CstRT55H.js.map and b/frontend/prebuilt/assets/NeighborsMiniMap-BOuqRKfi.js.map differ diff --git a/frontend/prebuilt/assets/PathRouteMap-Bi6ttl0X.js b/frontend/prebuilt/assets/PathRouteMap-4KToIfXG.js similarity index 95% rename from frontend/prebuilt/assets/PathRouteMap-Bi6ttl0X.js rename to frontend/prebuilt/assets/PathRouteMap-4KToIfXG.js index 0ad7dd03..e9163431 100644 Binary files a/frontend/prebuilt/assets/PathRouteMap-Bi6ttl0X.js and b/frontend/prebuilt/assets/PathRouteMap-4KToIfXG.js differ diff --git a/frontend/prebuilt/assets/PathRouteMap-Bi6ttl0X.js.map b/frontend/prebuilt/assets/PathRouteMap-4KToIfXG.js.map similarity index 99% rename from frontend/prebuilt/assets/PathRouteMap-Bi6ttl0X.js.map rename to frontend/prebuilt/assets/PathRouteMap-4KToIfXG.js.map index 8cedc4c3..fd510721 100644 Binary files a/frontend/prebuilt/assets/PathRouteMap-Bi6ttl0X.js.map and b/frontend/prebuilt/assets/PathRouteMap-4KToIfXG.js.map differ diff --git a/frontend/prebuilt/assets/Popup-DqhwkenL.js b/frontend/prebuilt/assets/Popup-BFbz4Cba.js similarity index 81% rename from frontend/prebuilt/assets/Popup-DqhwkenL.js rename to frontend/prebuilt/assets/Popup-BFbz4Cba.js index 4e4c8d57..51837479 100644 Binary files a/frontend/prebuilt/assets/Popup-DqhwkenL.js and b/frontend/prebuilt/assets/Popup-BFbz4Cba.js differ diff --git a/frontend/prebuilt/assets/Popup-DqhwkenL.js.map b/frontend/prebuilt/assets/Popup-BFbz4Cba.js.map similarity index 97% rename from frontend/prebuilt/assets/Popup-DqhwkenL.js.map rename to frontend/prebuilt/assets/Popup-BFbz4Cba.js.map index bae74710..36ffe103 100644 Binary files a/frontend/prebuilt/assets/Popup-DqhwkenL.js.map and b/frontend/prebuilt/assets/Popup-BFbz4Cba.js.map differ diff --git a/frontend/prebuilt/assets/RepeaterDashboard-DHzYsK_s.js b/frontend/prebuilt/assets/RepeaterDashboard-CyRkizHt.js similarity index 98% rename from frontend/prebuilt/assets/RepeaterDashboard-DHzYsK_s.js rename to frontend/prebuilt/assets/RepeaterDashboard-CyRkizHt.js index 33dd7df7..86914c6a 100644 Binary files a/frontend/prebuilt/assets/RepeaterDashboard-DHzYsK_s.js and b/frontend/prebuilt/assets/RepeaterDashboard-CyRkizHt.js differ diff --git a/frontend/prebuilt/assets/RepeaterDashboard-DHzYsK_s.js.map b/frontend/prebuilt/assets/RepeaterDashboard-CyRkizHt.js.map similarity index 99% rename from frontend/prebuilt/assets/RepeaterDashboard-DHzYsK_s.js.map rename to frontend/prebuilt/assets/RepeaterDashboard-CyRkizHt.js.map index 1cede9d7..014871e1 100644 Binary files a/frontend/prebuilt/assets/RepeaterDashboard-DHzYsK_s.js.map and b/frontend/prebuilt/assets/RepeaterDashboard-CyRkizHt.js.map differ diff --git a/frontend/prebuilt/assets/SearchView-CwhbvaNz.js b/frontend/prebuilt/assets/SearchView-D6sKCeLu.js similarity index 97% rename from frontend/prebuilt/assets/SearchView-CwhbvaNz.js rename to frontend/prebuilt/assets/SearchView-D6sKCeLu.js index 3f5b89f5..b24b9ce6 100644 Binary files a/frontend/prebuilt/assets/SearchView-CwhbvaNz.js and b/frontend/prebuilt/assets/SearchView-D6sKCeLu.js differ diff --git a/frontend/prebuilt/assets/SearchView-CwhbvaNz.js.map b/frontend/prebuilt/assets/SearchView-D6sKCeLu.js.map similarity index 99% rename from frontend/prebuilt/assets/SearchView-CwhbvaNz.js.map rename to frontend/prebuilt/assets/SearchView-D6sKCeLu.js.map index 20440050..80c05a4b 100644 Binary files a/frontend/prebuilt/assets/SearchView-CwhbvaNz.js.map and b/frontend/prebuilt/assets/SearchView-D6sKCeLu.js.map differ diff --git a/frontend/prebuilt/assets/SettingsModal-BYAS3H3e.js b/frontend/prebuilt/assets/SettingsModal-CtqOfv8z.js similarity index 99% rename from frontend/prebuilt/assets/SettingsModal-BYAS3H3e.js rename to frontend/prebuilt/assets/SettingsModal-CtqOfv8z.js index db36769f..f6006539 100644 Binary files a/frontend/prebuilt/assets/SettingsModal-BYAS3H3e.js and b/frontend/prebuilt/assets/SettingsModal-CtqOfv8z.js differ diff --git a/frontend/prebuilt/assets/SettingsModal-BYAS3H3e.js.map b/frontend/prebuilt/assets/SettingsModal-CtqOfv8z.js.map similarity index 99% rename from frontend/prebuilt/assets/SettingsModal-BYAS3H3e.js.map rename to frontend/prebuilt/assets/SettingsModal-CtqOfv8z.js.map index ce641911..596aa9fd 100644 Binary files a/frontend/prebuilt/assets/SettingsModal-BYAS3H3e.js.map and b/frontend/prebuilt/assets/SettingsModal-CtqOfv8z.js.map differ diff --git a/frontend/prebuilt/assets/VisualizerView-CgyTsQ_S.js b/frontend/prebuilt/assets/VisualizerView-4gatwjkk.js similarity index 99% rename from frontend/prebuilt/assets/VisualizerView-CgyTsQ_S.js rename to frontend/prebuilt/assets/VisualizerView-4gatwjkk.js index ecbd5427..5c7c129a 100644 Binary files a/frontend/prebuilt/assets/VisualizerView-CgyTsQ_S.js and b/frontend/prebuilt/assets/VisualizerView-4gatwjkk.js differ diff --git a/frontend/prebuilt/assets/VisualizerView-CgyTsQ_S.js.map b/frontend/prebuilt/assets/VisualizerView-4gatwjkk.js.map similarity index 99% rename from frontend/prebuilt/assets/VisualizerView-CgyTsQ_S.js.map rename to frontend/prebuilt/assets/VisualizerView-4gatwjkk.js.map index 56713bce..b9355bd4 100644 Binary files a/frontend/prebuilt/assets/VisualizerView-CgyTsQ_S.js.map and b/frontend/prebuilt/assets/VisualizerView-4gatwjkk.js.map differ diff --git a/frontend/prebuilt/assets/hooks-CtjS3OQP.js b/frontend/prebuilt/assets/hooks-CtjS3OQP.js new file mode 100644 index 00000000..eddfebbc Binary files /dev/null and b/frontend/prebuilt/assets/hooks-CtjS3OQP.js differ diff --git a/frontend/prebuilt/assets/hooks-DIGY9mWZ.js.map b/frontend/prebuilt/assets/hooks-CtjS3OQP.js.map similarity index 90% rename from frontend/prebuilt/assets/hooks-DIGY9mWZ.js.map rename to frontend/prebuilt/assets/hooks-CtjS3OQP.js.map index b6fc5512..06d73111 100644 Binary files a/frontend/prebuilt/assets/hooks-DIGY9mWZ.js.map and b/frontend/prebuilt/assets/hooks-CtjS3OQP.js.map differ diff --git a/frontend/prebuilt/assets/hooks-DIGY9mWZ.js b/frontend/prebuilt/assets/hooks-DIGY9mWZ.js deleted file mode 100644 index 69b24573..00000000 Binary files a/frontend/prebuilt/assets/hooks-DIGY9mWZ.js and /dev/null differ diff --git a/frontend/prebuilt/assets/index-BMtXbNEw.js b/frontend/prebuilt/assets/index-B43Py2Qr.js similarity index 91% rename from frontend/prebuilt/assets/index-BMtXbNEw.js rename to frontend/prebuilt/assets/index-B43Py2Qr.js index 8f81542e..58fdeaa1 100644 Binary files a/frontend/prebuilt/assets/index-BMtXbNEw.js and b/frontend/prebuilt/assets/index-B43Py2Qr.js differ diff --git a/frontend/prebuilt/assets/index-B43Py2Qr.js.map b/frontend/prebuilt/assets/index-B43Py2Qr.js.map new file mode 100644 index 00000000..8b2a31a5 Binary files /dev/null and b/frontend/prebuilt/assets/index-B43Py2Qr.js.map differ diff --git a/frontend/prebuilt/assets/index-BMtXbNEw.js.map b/frontend/prebuilt/assets/index-BMtXbNEw.js.map deleted file mode 100644 index 6708e379..00000000 Binary files a/frontend/prebuilt/assets/index-BMtXbNEw.js.map and /dev/null differ diff --git a/frontend/prebuilt/assets/leaflet-DgeNdCAZ.js b/frontend/prebuilt/assets/leaflet-C1ROEFkk.js similarity index 99% rename from frontend/prebuilt/assets/leaflet-DgeNdCAZ.js rename to frontend/prebuilt/assets/leaflet-C1ROEFkk.js index d639aa1b..e24b19de 100644 Binary files a/frontend/prebuilt/assets/leaflet-DgeNdCAZ.js and b/frontend/prebuilt/assets/leaflet-C1ROEFkk.js differ diff --git a/frontend/prebuilt/assets/leaflet-DgeNdCAZ.js.map b/frontend/prebuilt/assets/leaflet-C1ROEFkk.js.map similarity index 99% rename from frontend/prebuilt/assets/leaflet-DgeNdCAZ.js.map rename to frontend/prebuilt/assets/leaflet-C1ROEFkk.js.map index 6549b6f8..d64b3c91 100644 Binary files a/frontend/prebuilt/assets/leaflet-DgeNdCAZ.js.map and b/frontend/prebuilt/assets/leaflet-C1ROEFkk.js.map differ diff --git a/frontend/prebuilt/assets/separator-C-sbEem-.js b/frontend/prebuilt/assets/separator-B0sDmZaH.js similarity index 89% rename from frontend/prebuilt/assets/separator-C-sbEem-.js rename to frontend/prebuilt/assets/separator-B0sDmZaH.js index aa7ef80e..bcbc0cd4 100644 Binary files a/frontend/prebuilt/assets/separator-C-sbEem-.js and b/frontend/prebuilt/assets/separator-B0sDmZaH.js differ diff --git a/frontend/prebuilt/assets/separator-C-sbEem-.js.map b/frontend/prebuilt/assets/separator-B0sDmZaH.js.map similarity index 98% rename from frontend/prebuilt/assets/separator-C-sbEem-.js.map rename to frontend/prebuilt/assets/separator-B0sDmZaH.js.map index dc04c9e5..628da21e 100644 Binary files a/frontend/prebuilt/assets/separator-C-sbEem-.js.map and b/frontend/prebuilt/assets/separator-B0sDmZaH.js.map differ diff --git a/frontend/prebuilt/index.html b/frontend/prebuilt/index.html index 4f2d6afb..7bad8ad4 100644 Binary files a/frontend/prebuilt/index.html and b/frontend/prebuilt/index.html differ diff --git a/frontend/src/hooks/useRealtimeAppState.ts b/frontend/src/hooks/useRealtimeAppState.ts index fb5b9cc1..2611762d 100644 --- a/frontend/src/hooks/useRealtimeAppState.ts +++ b/frontend/src/hooks/useRealtimeAppState.ts @@ -85,6 +85,10 @@ function isActiveConversationMessage( return false; } +function isMessageConversation(conversation: Conversation | null): boolean { + return conversation?.type === 'channel' || conversation?.type === 'contact'; +} + export function useRealtimeAppState({ prevHealthRef, setHealth, @@ -180,7 +184,11 @@ export function useRealtimeAppState({ }, onReconnect: () => { setRawPackets([]); - triggerReconcile(); + if ( + !(hasNewerMessagesRef.current && isMessageConversation(activeConversationRef.current)) + ) { + triggerReconcile(); + } refreshUnreads(); api.getChannels().then(setChannels).catch(console.error); fetchAllContacts() diff --git a/frontend/src/test/useRealtimeAppState.test.ts b/frontend/src/test/useRealtimeAppState.test.ts index 2531eaa4..4879e6fd 100644 --- a/frontend/src/test/useRealtimeAppState.test.ts +++ b/frontend/src/test/useRealtimeAppState.test.ts @@ -143,6 +143,56 @@ describe('useRealtimeAppState', () => { }); }); + it('reconnect skips active-conversation reconcile while browsing mid-history', async () => { + const contacts: Contact[] = [ + { + public_key: 'bb'.repeat(32), + name: 'Bob', + type: 1, + flags: 0, + last_path: null, + last_path_len: 0, + out_path_hash_mode: 0, + last_advert: null, + lat: null, + lon: null, + last_seen: null, + on_radio: false, + last_contacted: null, + last_read_at: null, + first_seen: null, + }, + ]; + + const { args, fns } = createRealtimeArgs({ + fetchAllContacts: vi.fn(async () => contacts), + activeConversationRef: { + current: { + type: 'channel', + id: publicChannel.key, + name: publicChannel.name, + } satisfies Conversation, + }, + hasNewerMessagesRef: { current: true }, + }); + + const { result } = renderHook(() => useRealtimeAppState(args)); + + act(() => { + result.current.onReconnect?.(); + }); + + await waitFor(() => { + expect(args.triggerReconcile).not.toHaveBeenCalled(); + expect(args.refreshUnreads).toHaveBeenCalledTimes(1); + expect(mocks.api.getChannels).toHaveBeenCalledTimes(1); + expect(args.fetchAllContacts).toHaveBeenCalledTimes(1); + expect(fns.setRawPackets).toHaveBeenCalledWith([]); + expect(fns.setChannels).toHaveBeenCalledWith([publicChannel]); + expect(fns.setContacts).toHaveBeenCalledWith(contacts); + }); + }); + it('tracks unread state for a new non-active incoming message', () => { mocks.messageCache.addMessage.mockReturnValue(true); const { args } = createRealtimeArgs({