From 84df96eaefe7a920b48b205501fc849ba027e9ad Mon Sep 17 00:00:00 2001 From: Brendan Allan Date: Fri, 13 Mar 2026 09:18:27 +0800 Subject: desktop: multi-window support in electron (#17155) --- packages/app/src/app.tsx | 35 +++++++++++++++++++---------------- packages/app/src/entry.tsx | 7 +++++-- 2 files changed, 24 insertions(+), 18 deletions(-) (limited to 'packages/app/src') diff --git a/packages/app/src/app.tsx b/packages/app/src/app.tsx index 1b7ffde46..c6fca36d5 100644 --- a/packages/app/src/app.tsx +++ b/packages/app/src/app.tsx @@ -159,7 +159,7 @@ const effectMinDuration = (e: Effect.Effect) => Effect.all([e, Effect.sleep(duration)], { concurrency: "unbounded" }).pipe(Effect.map((v) => v[0])) -function ConnectionGate(props: ParentProps) { +function ConnectionGate(props: ParentProps<{ disableHealthCheck?: boolean }>) { const server = useServer() const checkServerHealth = useCheckServerHealth() @@ -168,21 +168,23 @@ function ConnectionGate(props: ParentProps) { // performs repeated health check with a grace period for // non-http connections, otherwise fails instantly const [startupHealthCheck, healthCheckActions] = createResource(() => - Effect.gen(function* () { - if (!server.current) return true - const { http, type } = server.current + props.disableHealthCheck + ? true + : Effect.gen(function* () { + if (!server.current) return true + const { http, type } = server.current - while (true) { - const res = yield* Effect.promise(() => checkServerHealth(http)) - if (res.healthy) return true - if (checkMode() === "background" || type === "http") return false - } - }).pipe( - effectMinDuration(checkMode() === "blocking" ? "1.2 seconds" : 0), - Effect.timeoutOrElse({ duration: "10 seconds", onTimeout: () => Effect.succeed(false) }), - Effect.ensuring(Effect.sync(() => setCheckMode("background"))), - Effect.runPromise, - ), + while (true) { + const res = yield* Effect.promise(() => checkServerHealth(http)) + if (res.healthy) return true + if (checkMode() === "background" || type === "http") return false + } + }).pipe( + effectMinDuration(checkMode() === "blocking" ? "1.2 seconds" : 0), + Effect.timeoutOrElse({ duration: "10 seconds", onTimeout: () => Effect.succeed(false) }), + Effect.ensuring(Effect.sync(() => setCheckMode("background"))), + Effect.runPromise, + ), ) return ( @@ -261,10 +263,11 @@ export function AppInterface(props: { defaultServer: ServerConnection.Key servers?: Array router?: Component + disableHealthCheck?: boolean }) { return ( - + ( - + ), -- cgit v1.2.3