do as simon wanted

This commit is contained in:
Khaleel Al-Adhami 2025-02-19 11:59:46 -08:00
parent f22127124b
commit d1e2deb799
2 changed files with 29 additions and 5 deletions

View File

@ -111,19 +111,40 @@ class ConnectionToaster(Toaster):
) # pyright: ignore [reportCallIssue] ) # pyright: ignore [reportCallIssue]
if environment.DOES_BACKEND_COLD_START.get(): if environment.DOES_BACKEND_COLD_START.get():
error_message = Var.create("Backend is starting.") loading_message = Var.create("Backend is starting.")
backend_is_loading_toast_var = Var(
f"toast.loading({loading_message!s}, {{...toast_props, description: '', closeButton: false, onDismiss: () => setUserDismissed(true)}},)"
)
backend_is_not_responding = Var.create("Backend is not responding.")
backend_is_down_toast_var = Var(
f"toast.error({backend_is_not_responding!s}, {{...toast_props, description: '', onDismiss: () => setUserDismissed(true)}},)"
)
toast_var = Var( toast_var = Var(
f"toast.loading({error_message!s}, {{...toast_props, description: '', closeButton: false, onDismiss: () => setUserDismissed(true)}},)" f"""
if (waitedForBackend) {{
{backend_is_down_toast_var!s}
}} else {{
{backend_is_loading_toast_var!s};
}}
setTimeout(() => {{
if ({has_too_many_connection_errors!s}) {{
setWaitedForBackend(true);
}}
}}, {environment.BACKEND_COLD_START_TIMEOUT.get() * 1000});
"""
) )
else: else:
error_message = Var.create(f"Cannot connect to server: {connection_error}.") loading_message = Var.create(
f"Cannot connect to server: {connection_error}."
)
toast_var = Var( toast_var = Var(
f"toast.error({error_message!s}, {{...toast_props, onDismiss: () => setUserDismissed(true)}},)" f"toast.error({loading_message!s}, {{...toast_props, onDismiss: () => setUserDismissed(true)}},)"
) )
individual_hooks = [ individual_hooks = [
f"const toast_props = {LiteralVar.create(props)!s};", f"const toast_props = {LiteralVar.create(props)!s};",
"const [userDismissed, setUserDismissed] = useState(false);", "const [userDismissed, setUserDismissed] = useState(false);",
"const [waitedForBackend, setWaitedForBackend] = useState(false);",
FunctionStringVar( FunctionStringVar(
"useEffect", "useEffect",
_var_data=VarData( _var_data=VarData(
@ -148,7 +169,7 @@ class ConnectionToaster(Toaster):
}} }}
""" """
), ),
LiteralArrayVar.create([connect_errors]), LiteralArrayVar.create([connect_errors, Var("waitedForBackend")]),
), ),
] ]

View File

@ -604,6 +604,9 @@ class EnvironmentVariables:
# Enables different behavior for when the backend would do a cold start if it was inactive. # Enables different behavior for when the backend would do a cold start if it was inactive.
DOES_BACKEND_COLD_START: EnvVar[bool] = env_var(False) DOES_BACKEND_COLD_START: EnvVar[bool] = env_var(False)
# The timeout for the backend to do a cold start in seconds.
BACKEND_COLD_START_TIMEOUT: EnvVar[int] = env_var(10)
environment = EnvironmentVariables() environment = EnvironmentVariables()