Skip to content

Commit c68907e

Browse files
fix(tui): update toast duration handling to use default value (#23395)
Co-authored-by: Aiden Cline <[email protected]>
1 parent af3998c commit c68907e

2 files changed

Lines changed: 14 additions & 7 deletions

File tree

packages/opencode/src/cli/cmd/tui/event.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { BusEvent } from "@/bus/bus-event"
22
import { SessionID } from "@/session/schema"
3-
import { Schema } from "effect"
3+
import { Effect, Schema } from "effect"
4+
5+
const DEFAULT_TOAST_DURATION = 5000
46

57
export const TuiEvent = {
68
PromptAppend: BusEvent.define("tui.prompt.append", Schema.Struct({ text: Schema.String })),
@@ -36,7 +38,9 @@ export const TuiEvent = {
3638
title: Schema.optional(Schema.String),
3739
message: Schema.String,
3840
variant: Schema.Literals(["info", "success", "warning", "error"]),
39-
duration: Schema.optional(Schema.Number).annotate({ description: "Duration in milliseconds" }),
41+
duration: Schema.Number.pipe(Schema.withDecodingDefault(Effect.succeed(DEFAULT_TOAST_DURATION))).annotate({
42+
description: "Duration in milliseconds",
43+
}),
4044
}),
4145
),
4246
SessionSelect: BusEvent.define(

packages/opencode/src/cli/cmd/tui/ui/toast.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,13 @@ import { useTerminalDimensions } from "@opentui/solid"
55
import { SplitBorder } from "../component/border"
66
import { TextAttributes } from "@opentui/core"
77
import { Schema } from "effect"
8-
import { type TuiEvent } from "../event"
8+
import { TuiEvent } from "../event"
99

10+
type ToastInput = Schema.Codec.Encoded<typeof TuiEvent.ToastShow.properties>
1011
export type ToastOptions = Schema.Schema.Type<typeof TuiEvent.ToastShow.properties>
1112

13+
const decodeToastOptions = Schema.decodeUnknownSync(TuiEvent.ToastShow.properties)
14+
1215
export function Toast() {
1316
const toast = useToast()
1417
const { theme } = useTheme()
@@ -55,13 +58,13 @@ function init() {
5558
let timeoutHandle: NodeJS.Timeout | null = null
5659

5760
const toast = {
58-
show(options: ToastOptions) {
59-
const { duration, ...currentToast } = options
60-
setStore("currentToast", currentToast)
61+
show(options: ToastInput) {
62+
const toastOptions = decodeToastOptions(options)
63+
setStore("currentToast", toastOptions)
6164
if (timeoutHandle) clearTimeout(timeoutHandle)
6265
timeoutHandle = setTimeout(() => {
6366
setStore("currentToast", null)
64-
}, duration).unref()
67+
}, toastOptions.duration).unref()
6568
},
6669
error: (err: any) => {
6770
if (err instanceof Error)

0 commit comments

Comments
 (0)