| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- // Set up event handlers
- const reconnectModal = document.getElementById("components-reconnect-modal");
- reconnectModal.addEventListener("components-reconnect-state-changed", handleReconnectStateChanged);
- const retryButton = document.getElementById("components-reconnect-button");
- retryButton.addEventListener("click", retry);
- const resumeButton = document.getElementById("components-resume-button");
- resumeButton.addEventListener("click", resume);
- function handleReconnectStateChanged(event) {
- if (event.detail.state === "show") {
- reconnectModal.showModal();
- } else if (event.detail.state === "hide") {
- reconnectModal.close();
- } else if (event.detail.state === "failed") {
- document.addEventListener("visibilitychange", retryWhenDocumentBecomesVisible);
- } else if (event.detail.state === "rejected") {
- location.reload();
- }
- }
- async function retry() {
- document.removeEventListener("visibilitychange", retryWhenDocumentBecomesVisible);
- try {
- // Reconnect will asynchronously return:
- // - true to mean success
- // - false to mean we reached the server, but it rejected the connection (e.g., unknown circuit ID)
- // - exception to mean we didn't reach the server (this can be sync or async)
- const successful = await Blazor.reconnect();
- if (!successful) {
- // We have been able to reach the server, but the circuit is no longer available.
- // We'll reload the page so the user can continue using the app as quickly as possible.
- const resumeSuccessful = await Blazor.resumeCircuit();
- if (!resumeSuccessful) {
- location.reload();
- } else {
- reconnectModal.close();
- }
- }
- } catch (err) {
- // We got an exception, server is currently unavailable
- document.addEventListener("visibilitychange", retryWhenDocumentBecomesVisible);
- }
- }
- async function resume() {
- try {
- const successful = await Blazor.resumeCircuit();
- if (!successful) {
- location.reload();
- }
- } catch {
- location.reload();
- }
- }
- async function retryWhenDocumentBecomesVisible() {
- if (document.visibilityState === "visible") {
- await retry();
- }
- }
|