From 7d00d1b3142e44691589d831ff4b13e159bd955c Mon Sep 17 00:00:00 2001 From: Jannik Date: Sun, 30 Nov 2025 18:19:03 +0100 Subject: [PATCH] feat: improve connection handling --- web/bun.lock | 11 +- web/package.json | 3 + web/src/lib/ConnectionLostDialog2.svelte | 13 ++ web/src/routes/display/+layout.svelte | 67 +++---- web/src/routes/display/+page.svelte | 237 ++++++++++++++--------- 5 files changed, 199 insertions(+), 132 deletions(-) create mode 100644 web/src/lib/ConnectionLostDialog2.svelte diff --git a/web/bun.lock b/web/bun.lock index 817271b..90fdbd3 100644 --- a/web/bun.lock +++ b/web/bun.lock @@ -3,6 +3,9 @@ "workspaces": { "": { "name": "web", + "dependencies": { + "runed": "^0.37.0", + }, "devDependencies": { "@internationalized/date": "^3.8.1", "@lucide/svelte": "^0.544.0", @@ -229,6 +232,8 @@ "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], + "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], + "detect-libc": ["detect-libc@2.1.1", "", {}, "sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw=="], "devalue": ["devalue@5.3.2", "", {}, "sha512-UDsjUbpQn9kvm68slnrs+mfxwFkIflOhkanmyabZ8zOYk8SMEIbJ3TK+88g70hSIeytu4y18f0z/hYHMTrXIWw=="], @@ -289,6 +294,8 @@ "locate-character": ["locate-character@3.0.0", "", {}, "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA=="], + "lz-string": ["lz-string@1.5.0", "", { "bin": { "lz-string": "bin/bin.js" } }, "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ=="], + "magic-string": ["magic-string@0.30.19", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw=="], "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], @@ -319,7 +326,7 @@ "rollup": ["rollup@4.52.2", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.52.2", "@rollup/rollup-android-arm64": "4.52.2", "@rollup/rollup-darwin-arm64": "4.52.2", "@rollup/rollup-darwin-x64": "4.52.2", "@rollup/rollup-freebsd-arm64": "4.52.2", "@rollup/rollup-freebsd-x64": "4.52.2", "@rollup/rollup-linux-arm-gnueabihf": "4.52.2", "@rollup/rollup-linux-arm-musleabihf": "4.52.2", "@rollup/rollup-linux-arm64-gnu": "4.52.2", "@rollup/rollup-linux-arm64-musl": "4.52.2", "@rollup/rollup-linux-loong64-gnu": "4.52.2", "@rollup/rollup-linux-ppc64-gnu": "4.52.2", "@rollup/rollup-linux-riscv64-gnu": "4.52.2", "@rollup/rollup-linux-riscv64-musl": "4.52.2", "@rollup/rollup-linux-s390x-gnu": "4.52.2", "@rollup/rollup-linux-x64-gnu": "4.52.2", "@rollup/rollup-linux-x64-musl": "4.52.2", "@rollup/rollup-openharmony-arm64": "4.52.2", "@rollup/rollup-win32-arm64-msvc": "4.52.2", "@rollup/rollup-win32-ia32-msvc": "4.52.2", "@rollup/rollup-win32-x64-gnu": "4.52.2", "@rollup/rollup-win32-x64-msvc": "4.52.2", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-I25/2QgoROE1vYV+NQ1En9T9UFB9Cmfm2CJ83zZOlaDpvz29wGQSZXWKw7MiNXau7wYgB/T9fVIdIuEQ+KbiiA=="], - "runed": ["runed@0.31.1", "", { "dependencies": { "esm-env": "^1.0.0" }, "peerDependencies": { "svelte": "^5.7.0" } }, "sha512-v3czcTnO+EJjiPvD4dwIqfTdHLZ8oH0zJheKqAHh9QMViY7Qb29UlAMRpX7ZtHh7AFqV60KmfxaJ9QMy+L1igQ=="], + "runed": ["runed@0.37.0", "", { "dependencies": { "dequal": "^2.0.3", "esm-env": "^1.0.0", "lz-string": "^1.5.0" }, "peerDependencies": { "@sveltejs/kit": "^2.21.0", "svelte": "^5.7.0", "zod": "^4.1.0" }, "optionalPeers": ["@sveltejs/kit", "zod"] }, "sha512-zphHjvLZEpcJiV3jezT96SnNwePaUIEd1HEMuPGZ6DwOMao9S2ZAUCYJPKquRM5J22AwAOpGj0KmxOkQdkBfwQ=="], "sade": ["sade@1.8.1", "", { "dependencies": { "mri": "^1.1.0" } }, "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A=="], @@ -385,6 +392,8 @@ "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "bits-ui/runed": ["runed@0.31.1", "", { "dependencies": { "esm-env": "^1.0.0" }, "peerDependencies": { "svelte": "^5.7.0" } }, "sha512-v3czcTnO+EJjiPvD4dwIqfTdHLZ8oH0zJheKqAHh9QMViY7Qb29UlAMRpX7ZtHh7AFqV60KmfxaJ9QMy+L1igQ=="], + "mode-watcher/runed": ["runed@0.25.0", "", { "dependencies": { "esm-env": "^1.0.0" }, "peerDependencies": { "svelte": "^5.7.0" } }, "sha512-7+ma4AG9FT2sWQEA0Egf6mb7PBT2vHyuHail1ie8ropfSjvZGtEAx8YTmUjv/APCsdRRxEVvArNjALk9zFSOrg=="], "mode-watcher/svelte-toolbelt": ["svelte-toolbelt@0.7.1", "", { "dependencies": { "clsx": "^2.1.1", "runed": "^0.23.2", "style-to-object": "^1.0.8" }, "peerDependencies": { "svelte": "^5.0.0" } }, "sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ=="], diff --git a/web/package.json b/web/package.json index 715ab6e..aec620a 100644 --- a/web/package.json +++ b/web/package.json @@ -31,5 +31,8 @@ "tw-animate-css": "^1.4.0", "typescript": "^5.0.0", "vite": "^7.0.4" + }, + "dependencies": { + "runed": "^0.37.0" } } diff --git a/web/src/lib/ConnectionLostDialog2.svelte b/web/src/lib/ConnectionLostDialog2.svelte new file mode 100644 index 0000000..e903aae --- /dev/null +++ b/web/src/lib/ConnectionLostDialog2.svelte @@ -0,0 +1,13 @@ + diff --git a/web/src/routes/display/+layout.svelte b/web/src/routes/display/+layout.svelte index 00d0166..6bf505d 100644 --- a/web/src/routes/display/+layout.svelte +++ b/web/src/routes/display/+layout.svelte @@ -1,49 +1,42 @@ {#if wsState.closed} - + {/if} -{#if !wsState.connected && !wsState.closed} -
- - -

Verbindung herstellen...

-
-{/if} +{#if !wsState.connected && !wsState.closed}{/if} {@render children?.()} diff --git a/web/src/routes/display/+page.svelte b/web/src/routes/display/+page.svelte index 259356a..6db2aa6 100644 --- a/web/src/routes/display/+page.svelte +++ b/web/src/routes/display/+page.svelte @@ -1,115 +1,164 @@ {#if newCalls.length > 0} -
-
- {#each newCalls as call (call.num)} - {call.num} → {call.ticket.room} - {/each} -
-
+
+
+ {#each newCalls as call (call.num)} + {call.num} → {call.ticket.room} + {/each} +
+
{/if}
- - {#if connected} - - - - - - - - {#each calls.slice(0, ENTRIES_PER_TABLE) as call (call.num)} - - - - - - {/each} - -
Wartenr.Raum
{call.num}{call.ticket.status === "no-show" ? "Empfang " + ENTRIES[call.num[0]] : call.ticket.room}
+ + + + + + + + + {#each calls.slice(0, ENTRIES_PER_TABLE) as call (call.num)} + + + + + + {/each} + +
Wartenr.Raum
{call.num}{call.ticket.status === "no-show" + ? "Empfang " + ENTRIES[call.num[0]] + : call.ticket.room}
-
+
- - - - - - - - {#each calls.slice(ENTRIES_PER_TABLE) as call (call.num)} - - - - - - {/each} - -
Wartenr.Raum
{call.num}{call.ticket.status === "no-show" ? "Empfang " + ENTRIES[call.num[0]] : call.ticket.room}
- {/if} + + + + + + + + {#each calls.slice(ENTRIES_PER_TABLE) as call (call.num)} + + + + + + {/each} + +
Wartenr.Raum
{call.num}{call.ticket.status === "no-show" + ? "Empfang " + ENTRIES[call.num[0]] + : call.ticket.room}