From c76f230c9fbb48c7c931be880080bd0c23470ee5 Mon Sep 17 00:00:00 2001 From: Jack Kingsman Date: Sun, 15 Mar 2026 18:07:30 -0700 Subject: [PATCH] Reduce memo thrash on map update --- .gitattributes | 1 + ...-BD2FOJ4s.js => BotCodeEditor-BzmXJa-U.js} | Bin 467083 -> 467083 bytes ...s.js.map => BotCodeEditor-BzmXJa-U.js.map} | Bin 1956915 -> 1956915 bytes ...l-DSLlik3_.js => CrackerPanel-C3rwFxw9.js} | Bin 129410 -> 129410 bytes ...3_.js.map => CrackerPanel-C3rwFxw9.js.map} | Bin 396562 -> 396562 bytes frontend/prebuilt/assets/MapView-7UG06zXw.js | Bin 4086 -> 0 bytes .../prebuilt/assets/MapView-7UG06zXw.js.map | Bin 14879 -> 0 bytes frontend/prebuilt/assets/MapView-BW3wM0G8.js | Bin 0 -> 4103 bytes .../prebuilt/assets/MapView-BW3wM0G8.js.map | Bin 0 -> 14925 bytes ...Ju-R0X.js => NeighborsMiniMap-BfUArOef.js} | Bin 1670 -> 1670 bytes ...s.map => NeighborsMiniMap-BfUArOef.js.map} | Bin 5886 -> 5886 bytes ...p-DdylhAp-.js => PathRouteMap-Cg3mrjz1.js} | Bin 3868 -> 3868 bytes ...p-.js.map => PathRouteMap-Cg3mrjz1.js.map} | Bin 14070 -> 14070 bytes .../{Popup-CqM5D37r.js => Popup-DkSClDwo.js} | Bin 920 -> 920 bytes ...-CqM5D37r.js.map => Popup-DkSClDwo.js.map} | Bin 4181 -> 4181 bytes ...tUyWd.js => RepeaterDashboard-DjXZo1ON.js} | Bin 28491 -> 28491 bytes ....map => RepeaterDashboard-DjXZo1ON.js.map} | Bin 89840 -> 89840 bytes ...iew-CqEz3JCz.js => SearchView-Dvalyr5p.js} | Bin 5106 -> 5106 bytes ...3JCz.js.map => SearchView-Dvalyr5p.js.map} | Bin 16886 -> 16886 bytes ...-GFXFFaeS.js => SettingsModal-DgO2ZLSb.js} | Bin 77263 -> 77263 bytes ...S.js.map => SettingsModal-DgO2ZLSb.js.map} | Bin 196690 -> 196690 bytes ...BswMOFbt.js => VisualizerView-DlcD_Fhk.js} | Bin 590321 -> 590321 bytes ....js.map => VisualizerView-DlcD_Fhk.js.map} | Bin 3112795 -> 3112795 bytes frontend/prebuilt/assets/hooks-Bk-tBmjl.js | Bin 157 -> 0 bytes frontend/prebuilt/assets/hooks-DfhmuKzA.js | Bin 0 -> 157 bytes ...-Bk-tBmjl.js.map => hooks-DfhmuKzA.js.map} | Bin 1128 -> 1128 bytes .../{index-DSM_ctlA.js => index-DhrMLy6_.js} | Bin 583431 -> 583431 bytes ...-DSM_ctlA.js.map => index-DhrMLy6_.js.map} | Bin 2116437 -> 2116437 bytes ...eaflet-Bn7rjtY9.js => leaflet-lJm4twjh.js} | Bin 153764 -> 153764 bytes ...n7rjtY9.js.map => leaflet-lJm4twjh.js.map} | Bin 700833 -> 700833 bytes ...ator-B1Gufat6.js => separator-DS1eMu86.js} | Bin 1068 -> 1068 bytes ...ufat6.js.map => separator-DS1eMu86.js.map} | Bin 5058 -> 5058 bytes frontend/prebuilt/index.html | Bin 2761 -> 2761 bytes frontend/src/components/MapView.tsx | 2 +- frontend/src/test/mapView.test.tsx | 39 ++++++++++++++++++ 35 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 .gitattributes rename frontend/prebuilt/assets/{BotCodeEditor-BD2FOJ4s.js => BotCodeEditor-BzmXJa-U.js} (99%) rename frontend/prebuilt/assets/{BotCodeEditor-BD2FOJ4s.js.map => BotCodeEditor-BzmXJa-U.js.map} (99%) rename frontend/prebuilt/assets/{CrackerPanel-DSLlik3_.js => CrackerPanel-C3rwFxw9.js} (99%) rename frontend/prebuilt/assets/{CrackerPanel-DSLlik3_.js.map => CrackerPanel-C3rwFxw9.js.map} (99%) delete mode 100644 frontend/prebuilt/assets/MapView-7UG06zXw.js delete mode 100644 frontend/prebuilt/assets/MapView-7UG06zXw.js.map create mode 100644 frontend/prebuilt/assets/MapView-BW3wM0G8.js create mode 100644 frontend/prebuilt/assets/MapView-BW3wM0G8.js.map rename frontend/prebuilt/assets/{NeighborsMiniMap-C3Ju-R0X.js => NeighborsMiniMap-BfUArOef.js} (85%) rename frontend/prebuilt/assets/{NeighborsMiniMap-C3Ju-R0X.js.map => NeighborsMiniMap-BfUArOef.js.map} (97%) rename frontend/prebuilt/assets/{PathRouteMap-DdylhAp-.js => PathRouteMap-Cg3mrjz1.js} (95%) rename frontend/prebuilt/assets/{PathRouteMap-DdylhAp-.js.map => PathRouteMap-Cg3mrjz1.js.map} (99%) rename frontend/prebuilt/assets/{Popup-CqM5D37r.js => Popup-DkSClDwo.js} (81%) rename frontend/prebuilt/assets/{Popup-CqM5D37r.js.map => Popup-DkSClDwo.js.map} (97%) rename frontend/prebuilt/assets/{RepeaterDashboard-DrFtUyWd.js => RepeaterDashboard-DjXZo1ON.js} (98%) rename frontend/prebuilt/assets/{RepeaterDashboard-DrFtUyWd.js.map => RepeaterDashboard-DjXZo1ON.js.map} (99%) rename frontend/prebuilt/assets/{SearchView-CqEz3JCz.js => SearchView-Dvalyr5p.js} (97%) rename frontend/prebuilt/assets/{SearchView-CqEz3JCz.js.map => SearchView-Dvalyr5p.js.map} (99%) rename frontend/prebuilt/assets/{SettingsModal-GFXFFaeS.js => SettingsModal-DgO2ZLSb.js} (99%) rename frontend/prebuilt/assets/{SettingsModal-GFXFFaeS.js.map => SettingsModal-DgO2ZLSb.js.map} (99%) rename frontend/prebuilt/assets/{VisualizerView-BswMOFbt.js => VisualizerView-DlcD_Fhk.js} (99%) rename frontend/prebuilt/assets/{VisualizerView-BswMOFbt.js.map => VisualizerView-DlcD_Fhk.js.map} (99%) delete mode 100644 frontend/prebuilt/assets/hooks-Bk-tBmjl.js create mode 100644 frontend/prebuilt/assets/hooks-DfhmuKzA.js rename frontend/prebuilt/assets/{hooks-Bk-tBmjl.js.map => hooks-DfhmuKzA.js.map} (90%) rename frontend/prebuilt/assets/{index-DSM_ctlA.js => index-DhrMLy6_.js} (99%) rename frontend/prebuilt/assets/{index-DSM_ctlA.js.map => index-DhrMLy6_.js.map} (99%) rename frontend/prebuilt/assets/{leaflet-Bn7rjtY9.js => leaflet-lJm4twjh.js} (99%) rename frontend/prebuilt/assets/{leaflet-Bn7rjtY9.js.map => leaflet-lJm4twjh.js.map} (99%) rename frontend/prebuilt/assets/{separator-B1Gufat6.js => separator-DS1eMu86.js} (89%) rename frontend/prebuilt/assets/{separator-B1Gufat6.js.map => separator-DS1eMu86.js.map} (98%) diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..b1682148 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +frontend/prebuilt/** -diff diff --git a/frontend/prebuilt/assets/BotCodeEditor-BD2FOJ4s.js b/frontend/prebuilt/assets/BotCodeEditor-BzmXJa-U.js similarity index 99% rename from frontend/prebuilt/assets/BotCodeEditor-BD2FOJ4s.js rename to frontend/prebuilt/assets/BotCodeEditor-BzmXJa-U.js index be0107624b92595ec183ad995b2b7d5f3e8119f9..82b2995128e0580d83572145e6aa476db873a93d 100644 GIT binary patch delta 57 zcmeA^DARpVW`ZhvMv<>irCEHVPOA=Ms}57E4s)vxORElRs}9>%9rgeP{;J#vuSDHY My{uxr+{6Md02NvhN&o-= delta 57 zcmeA^DARpVW`Zhvuy1^FNseQqPOA=Ms}57E4s)vxORElRs}9>%9rgePeitJ*e=n0_ My{uxr+{6Md01kB!+yDRo diff --git a/frontend/prebuilt/assets/BotCodeEditor-BD2FOJ4s.js.map b/frontend/prebuilt/assets/BotCodeEditor-BzmXJa-U.js.map similarity index 99% rename from frontend/prebuilt/assets/BotCodeEditor-BD2FOJ4s.js.map rename to frontend/prebuilt/assets/BotCodeEditor-BzmXJa-U.js.map index 74f861388f7fa0ebad4371074f88c2997784d6c7..e7769f854d08516d33f05c79fab15765acd496f0 100644 GIT binary patch delta 107 zcmV~$yA6T>06@X0AmE>`irU$|u!ud0EdyAS*ipRRU5E+8IE;7W)Q?mDxkvBU^U*c! ufXrkr3kf8Yr9=`-A}d+TMz*q(y&NQ!OmZotluC|rlC#uuk?WUR{QCpb0Ul2P delta 107 zcmV~$yA6T>06@X0AmE>`irU$|jyM9bpm7)rYKqsp3o&6Bhw*Nl`f=(%_o!{2ukP_4 tkeSS7A%TRllt^MpWF>3a$X0f;mxH8|NiKzyQpr(Ha+X>ya{Y3Pe}AX;9p3-| diff --git a/frontend/prebuilt/assets/CrackerPanel-DSLlik3_.js b/frontend/prebuilt/assets/CrackerPanel-C3rwFxw9.js similarity index 99% rename from frontend/prebuilt/assets/CrackerPanel-DSLlik3_.js rename to frontend/prebuilt/assets/CrackerPanel-C3rwFxw9.js index cc959c59ac0d679909136f38855c84be4e668687..8683859a3990781402d4aefb48ab5a4c40bf501a 100644 GIT binary patch delta 40 wcmZqr%--~weL^>TMv<>irCEIAq^*+}AN&w-HZCf6t0=eB%PQ8(O)TI70Am{vEdT%j delta 40 wcmZqr%--~weL^>Tuy1^FNseRVq^*+}AN&w-3HHg!%r=hK%PQ8(O)TI70Ab${7XSbN diff --git a/frontend/prebuilt/assets/CrackerPanel-DSLlik3_.js.map b/frontend/prebuilt/assets/CrackerPanel-C3rwFxw9.js.map similarity index 99% rename from frontend/prebuilt/assets/CrackerPanel-DSLlik3_.js.map rename to frontend/prebuilt/assets/CrackerPanel-C3rwFxw9.js.map index 3a2863cb49ddd2e0db26ea8242be3b9e2ff4c9d1..5809b54ec3fe203d11547a639525567e5a1d55a0 100644 GIT binary patch delta 35 qcmbOF7M2#)Eo`j3yw1i&ymO0@vaqYC^0 delta 35 qcmbOF7M2#)Eo`j3ye`2$IhonU@p@UsO0@vZ`wHX$ diff --git a/frontend/prebuilt/assets/MapView-7UG06zXw.js b/frontend/prebuilt/assets/MapView-7UG06zXw.js deleted file mode 100644 index ff0d3986165db4ff2aa2ecc004eefe00bcf122da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4086 zcmd5R5dXfXP*uQ_21=IgI7yW#!J4+iu%<22wb*7D0WDFo5{lGFDz@wBNj6}g z_ZoYmJ;IKZ72AokKOZ*igDsIf9`BC7yZb3GN-oq=SXf#KdZ8az=t@5b`k)^RROrW> zIu*RI{cg?@GWTA*KfjC>{nEdZ_EFyGIM;GB^sRnew&IlFloI7VX9wa+egAB8!f1d`1EobDF?tfA3)LaAMc!B7&`H@1T!uRKk0D znBp|HkJ5_8D(B34>0o!6rw)!HR#EB-qAJ0x+y_NRjTs_(ffex?pE+)~M+P27EE?O2Wr%{3@utH`Wk5=ZR`*r$YLY8pjRu%)sepkR!4 zsM^@k+uDIg!B`uMnipeAaL<$`7*&M*0+&t^os0^z1^z)EEcVk}J?9lmq*I|~iIXH} zSvVR7Xb9#Mc>V+DMcC`tE5-GZoe@rXj5QwYoLLOth@L(NOdU*Sz)Ww*_b*JE&vxJg#_44?;QmQWpElx z^jY^+ySKO6M>J9hE*HfSZGr62^_flT-rjCZ9Y?}NRddt@Nu4EJchL;bFr^b5UptOO zT&D@#O>>Ky76LVME*(3`Z)~)T;V$GGTtHQXdOf%FpBHm# zO}!LiX`^_W(*)ofjvn1u&b>XWTzGwJl6gg?NYWh!mLhZI&1Lg6vtG&t$%IZfbB>iO zQb^27Ly)$nBw>7X#U`evNH>noT>XsV2O~}unY>BY#I5o1d$gwxglLUet z+DcT!2LEh`rG4C+ZaMq#(B0ntD+Zgc_*eEO{~voz-~J1G2md2`fxG; z;F?P2MF#m|QiBRSG8mYCC${paMaMCPnvY} z(MD}&CoXh&-Dr`{XS&n)hZA+&k{#lh08lXn3b!DQjQlld{8s{J1zh1qZ)%pV(GubuPNI`yiwU6#@RQY@Ym-z%n8rxpB(G$cp%Sa<+fv_{ z48eU}yZLDuULfFFw8?_Gd4F5tI9H3%e}-m6Ulzy>!u|#h8dJ{h8@G!Cn5Hd@4U9hC z_EWe!uOMJ=v7?>q=C{=jc&F1C(zY-lyE=m|+N9jsk=AIofB)sDpEY>WyS#nWgO+w= z0x!H_5LkuUHpYIf`@Xs45E|a}AF71UIHM9sf{p=ad^2L^Lg8cXRX!()GlZUs;0&1M zY-6@5KsE5TO}IW7>MCVQRZZsRll`Ol9LA;o6swOu>vo@7l2;-okeDTKp$`|YBY4%z T-ob~jg8fh5&4BXhRQl`>HQ9o1 diff --git a/frontend/prebuilt/assets/MapView-7UG06zXw.js.map b/frontend/prebuilt/assets/MapView-7UG06zXw.js.map deleted file mode 100644 index f729e3de1dc3a7f12a7d6479ea94a00c435d3ec5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14879 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 diff --git a/frontend/prebuilt/assets/MapView-BW3wM0G8.js b/frontend/prebuilt/assets/MapView-BW3wM0G8.js new file mode 100644 index 0000000000000000000000000000000000000000..63a189f6890b1aee7f80f8b709a8ff94ce5804d8 GIT binary patch literal 4103 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 OQ`7XaiuH063%CGGY!m_j delta 59 zcmZqUZR4FF!yfD#pInmTI8oV^!zs_aD61sWa$1LSp}Spy-Ib1 O3?lThiuH063%CF-tP-XG diff --git a/frontend/prebuilt/assets/NeighborsMiniMap-C3Ju-R0X.js.map b/frontend/prebuilt/assets/NeighborsMiniMap-BfUArOef.js.map similarity index 97% rename from frontend/prebuilt/assets/NeighborsMiniMap-C3Ju-R0X.js.map rename to frontend/prebuilt/assets/NeighborsMiniMap-BfUArOef.js.map index 8dbf13294d468a4dd88d8e668e56af4f6bc11130..faf7323ea6ed3c47459251f21341101b15a33d52 100644 GIT binary patch delta 19 acmeyT`%ia*8i!L_sAG|TYT8D<3t|9J-v^`s delta 19 acmeyT`%ia*8i%v7SE+80LBvMA3t|9Fi3b({ diff --git a/frontend/prebuilt/assets/PathRouteMap-DdylhAp-.js b/frontend/prebuilt/assets/PathRouteMap-Cg3mrjz1.js similarity index 95% rename from frontend/prebuilt/assets/PathRouteMap-DdylhAp-.js rename to frontend/prebuilt/assets/PathRouteMap-Cg3mrjz1.js index c57417ad77842a0fcd219c9ff7559eee6b35f6a9..8342956730fc44038671db0cf73384a808ef0055 100644 GIT binary patch delta 59 zcmbOuH%D%Q7JEjKuTP~}{6xcGjvTLClalhRjEOx894=`YxuxD!jvKc`@Ci7l8|M~f PRT=7K73<|D7H|OoWs($B delta 59 zcmbOuH%D%Q7JIO7d~!*S<3z(?4yQcxqO6ig%ZWV-98TG~B~H0nIUBb`@Cmr2ROVzj P7U=3_73<|D7H|OoR}K^A diff --git a/frontend/prebuilt/assets/PathRouteMap-DdylhAp-.js.map b/frontend/prebuilt/assets/PathRouteMap-Cg3mrjz1.js.map similarity index 99% rename from frontend/prebuilt/assets/PathRouteMap-DdylhAp-.js.map rename to frontend/prebuilt/assets/PathRouteMap-Cg3mrjz1.js.map index bb5e2d94c0689d8dbf938a503c55715b9067790c..5183fa663582126f5c061d0064d017979b7c4fea 100644 GIT binary patch delta 19 acmeyC`z?2Z5{GlTac)somElIMGiCr-ln5^X delta 19 acmeyC`z?2Z5{FAlWln};f$m1FGiCr;a|kg2 diff --git a/frontend/prebuilt/assets/Popup-CqM5D37r.js b/frontend/prebuilt/assets/Popup-DkSClDwo.js similarity index 81% rename from frontend/prebuilt/assets/Popup-CqM5D37r.js rename to frontend/prebuilt/assets/Popup-DkSClDwo.js index 977a2429687058c94aadc8b8a367474e7de42185..7f83aec899c52f274637e6cdebc067309caba35e 100644 GIT binary patch delta 47 zcmbQiK7)ON2}h1su1QIGR>njdMfQv$U!O{|_>Czl%mOai!Ol4@<@tJ9#d^7k1zZ4e CKMy?s delta 47 zcmbQiK7)ON35Qdjc~MqLq~$~#MfPCd_~eot$Bii}%mU7ZzNRk5=0$p0#d^7k1zZ4N C=?-rI diff --git a/frontend/prebuilt/assets/Popup-CqM5D37r.js.map b/frontend/prebuilt/assets/Popup-DkSClDwo.js.map similarity index 97% rename from frontend/prebuilt/assets/Popup-CqM5D37r.js.map rename to frontend/prebuilt/assets/Popup-DkSClDwo.js.map index bd61344c1dc94b545d5c7facbb8b2b7abf33dacb..39a7a948a20d1d50f4395a19e8892cebf9d7b0ef 100644 GIT binary patch delta 19 acmcbra8+S~G>1!euyc+}dHzOaBLM(M%?6JE delta 19 acmcbra8+S~G>3Dcuc?c%dC^8?BLM(JAqENn diff --git a/frontend/prebuilt/assets/RepeaterDashboard-DrFtUyWd.js b/frontend/prebuilt/assets/RepeaterDashboard-DjXZo1ON.js similarity index 98% rename from frontend/prebuilt/assets/RepeaterDashboard-DrFtUyWd.js rename to frontend/prebuilt/assets/RepeaterDashboard-DjXZo1ON.js index 7d57d958c330bbe4fd005bbe61b6910a66776978..2d737dbbbe481b272a76652c66c60297585adf8a 100644 GIT binary patch delta 126 zcmX?okMZ<9#tA{nPHCZzMgFO2dRfIvI!cMf#i=F5`k8qtsTH~|8AZN6m1gl1OAR@4 zymC!S%Cj;it~2Ct$qshTaVgKA`209KRLSJ6j4JFd!G@{6r52kXFuLh;z|7sOXUJ#A TpA`|6Z|Ls_v_vmAv49Hzl=Li> delta 126 zcmX?okMZ<9#tA{n&c5x9&AgZ0$jB@u*(7bcfC8iRWdFS)lle_}xBr%4 XJR&0ClJ0L55x9&AgZ0IL*``(I|DgfC8iRWdFS)lle_}xBr%4 XJR&0C?iS(ZmY5n0v`8;Ev49HzGchW1 diff --git a/frontend/prebuilt/assets/SettingsModal-GFXFFaeS.js.map b/frontend/prebuilt/assets/SettingsModal-DgO2ZLSb.js.map similarity index 99% rename from frontend/prebuilt/assets/SettingsModal-GFXFFaeS.js.map rename to frontend/prebuilt/assets/SettingsModal-DgO2ZLSb.js.map index 3edb2b98ecc477d2b4f752c815da4ed1b0b1fc93..6c0d981b603cd36e96d9104cce45cde833281ef7 100644 GIT binary patch delta 28 jcmccAz;mgAr=f+hg=q@2E3ZqszfqJ=aFSkDu~IDnl4A*C delta 28 jcmccAz;mgAr=f+hg=q@2E3dm-gqvGpYOr2bu~IDnl0gY& diff --git a/frontend/prebuilt/assets/VisualizerView-BswMOFbt.js b/frontend/prebuilt/assets/VisualizerView-DlcD_Fhk.js similarity index 99% rename from frontend/prebuilt/assets/VisualizerView-BswMOFbt.js rename to frontend/prebuilt/assets/VisualizerView-DlcD_Fhk.js index 59d0421510be2675fbe5cd5c97dba9b710d253df..1bb9a6c9cbab256d13b765bf6617d06066513eb3 100644 GIT binary patch delta 81 zcmey^tn#s0WkNr9Mv<>irCGdQRrF9%m&2lK+G}S YmyvUdfJ;uYOT1e~Hc+EpZejr!03WOu(EtDd delta 81 zcmey^tn#s0WkNr9uy1^FNsgmlRrF9%m&2lK+G}S YmyvUdfKzd~ufJPT2~eY6Zejr!03h8L=l}o! diff --git a/frontend/prebuilt/assets/VisualizerView-BswMOFbt.js.map b/frontend/prebuilt/assets/VisualizerView-DlcD_Fhk.js.map similarity index 99% rename from frontend/prebuilt/assets/VisualizerView-BswMOFbt.js.map rename to frontend/prebuilt/assets/VisualizerView-DlcD_Fhk.js.map index 98d4b1936123d7127161c43b8550f379c64d44ce..6a0f1350062bd93c5b51bf56a954a19b3c73fa08 100644 GIT binary patch delta 164 zcmWO0rwsxD06@{ud+)vX54XgHH4qpQ*nuFvXBi}uunPh4{QG?0k;%Z-1ZfJM{T`PJ;dAc03)< z*9Q`kutX#(F^Nk;0!d0r(vp#^|H*5d^ diff --git a/frontend/prebuilt/assets/hooks-DfhmuKzA.js b/frontend/prebuilt/assets/hooks-DfhmuKzA.js new file mode 100644 index 0000000000000000000000000000000000000000..1865f7e6181782507cdf022e0b20f03c785a2637 GIT binary patch literal 157 zcmW-ay$*sf6h?QRqQM0QU@y8xwzkl}+}=i%^xdV*-}%mw+F8K7Zlrm! zrRoF>{rB{&C!e=+-_}5=Cm1W_Bt{7J8s*m`Y#7^>HMwHeND9RNW1~3GRvewi^ pwxq%e$r56lHO+x|8(?GubxxZ11!CMsBHhmE%TbR~7(C9R{la delta 19 acmaFC@q%N5G>22RZi!QFR?bFcR~7(9`UZpm diff --git a/frontend/prebuilt/assets/index-DSM_ctlA.js b/frontend/prebuilt/assets/index-DhrMLy6_.js similarity index 99% rename from frontend/prebuilt/assets/index-DSM_ctlA.js rename to frontend/prebuilt/assets/index-DhrMLy6_.js index a924b4c6952531d8d302487187c565c9f44a53d3..d45ab6c87d3b562cd2dae0e2f4eff18abb3a86b0 100644 GIT binary patch delta 310 zcmZoar`&!{d4iv+bGmVEQC5|qURJS^j#6TAacW7ieoks)T25+-ZjM*3NlAHD#>8Sn z4wtly+*0o<$BAncRI?(Y@(um{Q1le179hfBJ@QIt<`QnN2(yDuXMGXXI(5VLIeWn@h+QEmxR5y|0FmY7pnWLf}G@34tuhY5d1k*`msSv=7Bdbx=OTmTjc BYg+&S delta 310 zcmZoar`&!{d4iv+OG;% zqB0=AptL~OxzN|t#n`-PvKFH>hr3&Zn_FUPaI-ICyDuXMGXXI(5VLIeWn@h+9tqHOmIbOLYCFNNejjFAxjIF9nt*Xqesw}OltgWhSt*Y#;svNDVoLg17 HYBmA@&QA~o delta 51 zcmZ4ZSZm>9tqHOmPI=}o>%mOaKhN-@#7G`=`#d^7k1zZ5tM+$`1~vcy delta 18 ZcmX@4en@?SJiC*jdudu?$wsv~!T>)x26+Gg diff --git a/frontend/prebuilt/index.html b/frontend/prebuilt/index.html index 090e927064ae1c5d98410f4e57abb83f4d856f5d..2f9460f7cfaea17dae6de604187945c00fece605 100644 GIT binary patch delta 19 acmX>pdQxpdQx Date.now() / 1000 - 7 * 24 * 60 * 60); // Filter to contacts with GPS coordinates, heard within the last 7 days. // Always include the focused contact so "view on map" links work for older nodes. diff --git a/frontend/src/test/mapView.test.tsx b/frontend/src/test/mapView.test.tsx index 88a7e6b4..effd7664 100644 --- a/frontend/src/test/mapView.test.tsx +++ b/frontend/src/test/mapView.test.tsx @@ -52,4 +52,43 @@ describe('MapView', () => { ).toBeInTheDocument(); expect(screen.getByText('Last heard: Never heard by this server')).toBeInTheDocument(); }); + + it('keeps the 7-day cutoff stable for the lifetime of the mounted map', () => { + vi.useFakeTimers(); + try { + vi.setSystemTime(new Date('2026-03-15T12:00:00Z')); + + const contact: Contact = { + public_key: 'bb'.repeat(32), + name: 'Almost Stale', + type: 1, + flags: 0, + last_path: null, + last_path_len: -1, + out_path_hash_mode: -1, + route_override_path: null, + route_override_len: null, + route_override_hash_mode: null, + last_advert: null, + lat: 41, + lon: -73, + last_seen: Math.floor(Date.now() / 1000) - 7 * 24 * 60 * 60 + 60, + on_radio: false, + last_contacted: null, + last_read_at: null, + first_seen: null, + }; + + const { rerender } = render(); + + expect(screen.getByText(/showing 1 contact heard in the last 7 days/i)).toBeInTheDocument(); + + vi.advanceTimersByTime(2 * 60 * 1000); + rerender(); + + expect(screen.getByText(/showing 1 contact heard in the last 7 days/i)).toBeInTheDocument(); + } finally { + vi.useRealTimers(); + } + }); });