Commit 87b8f30
[2.x] fix: Handle network connection loss in the frontend (#4854)
* feat: handle network connection loss in the frontend
Port of the 1.x network-loss handling (#4843) to 2.x:
- Classify network-level request failures (status 0) in requestErrorCatch
and show a dedicated translated alert (offline-specific when
navigator.onLine is false; failed cross-origin requests keep their
existing message). Parallel failures produce a single alert. Aborted
requests cannot trigger this, as Mithril leaves their promises
unsettled.
- Listen to the window online/offline events: going offline shows a
persistent dismissible alert; reconnecting clears connection alerts
and briefly confirms.
- Defer GET requests that fail while the browser is offline: their
promises are held open and settled with the result of a retry once
connectivity is restored, so content that failed to load appears
automatically without a page reload. Writes keep failing fast.
Identical deferred requests (e.g. from a polling widget) are keyed by
method, URL and params, and retried with a single request.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat: retry lazy chunk loads that failed while offline
Code-split chunks load via script tags, not XHR, so the offline handling
in Application#request never sees them. A chunk that failed to load
while offline previously rejected (or was silently swallowed by its
caller): the reply/discussion composer would not open, and
DiscussionPage's PostStream import left the page stuck on its loading
skeleton with no retry — even after connectivity returned.
Since every chunk load funnels through ExportRegistry#loadChunk
(webpack's script loader is overridden with it), hold back failures
that occur while the browser reports being offline and retry once the
online event fires. The import() promise stays pending in the meantime,
so every caller — composer bodies, lazy routes, modals, the post
stream — recovers on its own, without changes to call sites.
Failures while the browser is online are reported unchanged.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* style: format Application.tsx with the repo's pinned prettier
* test: silence expected chunk-url warning in ExportRegistry tests
The tests never register chunks, so the registry legitimately warns
before falling back to the URL passed in. Spy it away, as the admin
Application test does for console.group/error.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test: assert the unregistered-chunk warning and URL fallback
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>1 parent ba11aa9 commit 87b8f30
5 files changed
Lines changed: 680 additions & 13 deletions
File tree
- framework/core
- js
- src/common
- tests/unit/common
- locale
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
304 | 304 | | |
305 | 305 | | |
306 | 306 | | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
307 | 334 | | |
308 | 335 | | |
309 | 336 | | |
| |||
358 | 385 | | |
359 | 386 | | |
360 | 387 | | |
| 388 | + | |
| 389 | + | |
361 | 390 | | |
362 | 391 | | |
363 | 392 | | |
| |||
667 | 696 | | |
668 | 697 | | |
669 | 698 | | |
670 | | - | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
671 | 754 | | |
672 | 755 | | |
673 | 756 | | |
| |||
682 | 765 | | |
683 | 766 | | |
684 | 767 | | |
| 768 | + | |
| 769 | + | |
| 770 | + | |
| 771 | + | |
| 772 | + | |
| 773 | + | |
| 774 | + | |
| 775 | + | |
| 776 | + | |
| 777 | + | |
| 778 | + | |
| 779 | + | |
| 780 | + | |
| 781 | + | |
685 | 782 | | |
686 | 783 | | |
687 | 784 | | |
| |||
780 | 877 | | |
781 | 878 | | |
782 | 879 | | |
783 | | - | |
| 880 | + | |
| 881 | + | |
| 882 | + | |
| 883 | + | |
| 884 | + | |
| 885 | + | |
| 886 | + | |
| 887 | + | |
| 888 | + | |
784 | 889 | | |
785 | 890 | | |
786 | 891 | | |
787 | 892 | | |
788 | 893 | | |
789 | 894 | | |
| 895 | + | |
| 896 | + | |
| 897 | + | |
| 898 | + | |
| 899 | + | |
| 900 | + | |
| 901 | + | |
| 902 | + | |
| 903 | + | |
| 904 | + | |
| 905 | + | |
| 906 | + | |
| 907 | + | |
| 908 | + | |
| 909 | + | |
| 910 | + | |
| 911 | + | |
| 912 | + | |
| 913 | + | |
| 914 | + | |
| 915 | + | |
| 916 | + | |
| 917 | + | |
| 918 | + | |
| 919 | + | |
| 920 | + | |
| 921 | + | |
| 922 | + | |
| 923 | + | |
| 924 | + | |
| 925 | + | |
| 926 | + | |
| 927 | + | |
| 928 | + | |
| 929 | + | |
| 930 | + | |
| 931 | + | |
| 932 | + | |
| 933 | + | |
| 934 | + | |
| 935 | + | |
| 936 | + | |
| 937 | + | |
| 938 | + | |
| 939 | + | |
| 940 | + | |
| 941 | + | |
| 942 | + | |
| 943 | + | |
| 944 | + | |
| 945 | + | |
| 946 | + | |
| 947 | + | |
| 948 | + | |
| 949 | + | |
| 950 | + | |
| 951 | + | |
| 952 | + | |
| 953 | + | |
| 954 | + | |
| 955 | + | |
| 956 | + | |
| 957 | + | |
| 958 | + | |
| 959 | + | |
| 960 | + | |
| 961 | + | |
| 962 | + | |
790 | 963 | | |
791 | 964 | | |
792 | 965 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
172 | 172 | | |
173 | 173 | | |
174 | 174 | | |
175 | | - | |
176 | | - | |
177 | | - | |
178 | | - | |
179 | | - | |
180 | | - | |
181 | | - | |
182 | | - | |
183 | | - | |
184 | | - | |
185 | | - | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
186 | 209 | | |
187 | 210 | | |
188 | 211 | | |
| |||
0 commit comments