diff options
| author | OpeOginni <[email protected]> | 2026-04-27 00:27:02 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-04-26 17:27:02 -0500 |
| commit | c68907ece239819a6fdd31f6b2463fb69fbc5b37 (patch) | |
| tree | 60a383ffab9efe6adb39e71971f817a74d692000 | |
| parent | af3998c8a60dc00f27c94a410c4f508e5b0891a7 (diff) | |
| download | opencode-c68907ece239819a6fdd31f6b2463fb69fbc5b37.tar.gz opencode-c68907ece239819a6fdd31f6b2463fb69fbc5b37.zip | |
fix(tui): update toast duration handling to use default value (#23395)
Co-authored-by: Aiden Cline <[email protected]>
| -rw-r--r-- | packages/opencode/src/cli/cmd/tui/event.ts | 8 | ||||
| -rw-r--r-- | packages/opencode/src/cli/cmd/tui/ui/toast.tsx | 13 |
2 files changed, 14 insertions, 7 deletions
diff --git a/packages/opencode/src/cli/cmd/tui/event.ts b/packages/opencode/src/cli/cmd/tui/event.ts index ab85b1e64..1c764c12f 100644 --- a/packages/opencode/src/cli/cmd/tui/event.ts +++ b/packages/opencode/src/cli/cmd/tui/event.ts @@ -1,6 +1,8 @@ import { BusEvent } from "@/bus/bus-event" import { SessionID } from "@/session/schema" -import { Schema } from "effect" +import { Effect, Schema } from "effect" + +const DEFAULT_TOAST_DURATION = 5000 export const TuiEvent = { PromptAppend: BusEvent.define("tui.prompt.append", Schema.Struct({ text: Schema.String })), @@ -36,7 +38,9 @@ export const TuiEvent = { title: Schema.optional(Schema.String), message: Schema.String, variant: Schema.Literals(["info", "success", "warning", "error"]), - duration: Schema.optional(Schema.Number).annotate({ description: "Duration in milliseconds" }), + duration: Schema.Number.pipe(Schema.withDecodingDefault(Effect.succeed(DEFAULT_TOAST_DURATION))).annotate({ + description: "Duration in milliseconds", + }), }), ), SessionSelect: BusEvent.define( diff --git a/packages/opencode/src/cli/cmd/tui/ui/toast.tsx b/packages/opencode/src/cli/cmd/tui/ui/toast.tsx index 69674ba7c..d15fb3920 100644 --- a/packages/opencode/src/cli/cmd/tui/ui/toast.tsx +++ b/packages/opencode/src/cli/cmd/tui/ui/toast.tsx @@ -5,10 +5,13 @@ import { useTerminalDimensions } from "@opentui/solid" import { SplitBorder } from "../component/border" import { TextAttributes } from "@opentui/core" import { Schema } from "effect" -import { type TuiEvent } from "../event" +import { TuiEvent } from "../event" +type ToastInput = Schema.Codec.Encoded<typeof TuiEvent.ToastShow.properties> export type ToastOptions = Schema.Schema.Type<typeof TuiEvent.ToastShow.properties> +const decodeToastOptions = Schema.decodeUnknownSync(TuiEvent.ToastShow.properties) + export function Toast() { const toast = useToast() const { theme } = useTheme() @@ -55,13 +58,13 @@ function init() { let timeoutHandle: NodeJS.Timeout | null = null const toast = { - show(options: ToastOptions) { - const { duration, ...currentToast } = options - setStore("currentToast", currentToast) + show(options: ToastInput) { + const toastOptions = decodeToastOptions(options) + setStore("currentToast", toastOptions) if (timeoutHandle) clearTimeout(timeoutHandle) timeoutHandle = setTimeout(() => { setStore("currentToast", null) - }, duration).unref() + }, toastOptions.duration).unref() }, error: (err: any) => { if (err instanceof Error) |
