fix(ui): resolve toast icon inside the toast component (#34874)
This commit is contained in:
@@ -0,0 +1,26 @@
|
|||||||
|
import { describe, expect, test } from "bun:test"
|
||||||
|
import { createSignal, type JSX } from "solid-js"
|
||||||
|
import { showToastV2, toasterV2 } from "@opencode-ai/ui/v2/toast-v2"
|
||||||
|
|
||||||
|
describe("showToastV2", () => {
|
||||||
|
test("creates no reactive computations at call time", () => {
|
||||||
|
const [tick, setTick] = createSignal(0)
|
||||||
|
let reads = 0
|
||||||
|
const icon = (() => {
|
||||||
|
reads++
|
||||||
|
tick()
|
||||||
|
return undefined
|
||||||
|
}) as unknown as JSX.Element
|
||||||
|
|
||||||
|
const id = showToastV2({ description: "test", icon })
|
||||||
|
|
||||||
|
// Resolving the icon at call time creates an ownerless computation that is
|
||||||
|
// never disposed and tracks its dependencies forever; it must only resolve
|
||||||
|
// once the toast component renders.
|
||||||
|
expect(reads).toBe(0)
|
||||||
|
setTick(1)
|
||||||
|
expect(reads).toBe(0)
|
||||||
|
|
||||||
|
toasterV2.dismiss(id)
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -97,8 +97,9 @@ export interface ToastV2Options {
|
|||||||
|
|
||||||
export function showToastV2(options: ToastV2Options | string) {
|
export function showToastV2(options: ToastV2Options | string) {
|
||||||
const opts = typeof options === "string" ? { description: options } : options
|
const opts = typeof options === "string" ? { description: options } : options
|
||||||
|
return toaster.show((props) => {
|
||||||
const resolvedIcon = children(() => opts.icon)
|
const resolvedIcon = children(() => opts.icon)
|
||||||
return toaster.show((props) => (
|
return (
|
||||||
<ToastV2 toastId={props.toastId} duration={opts.duration} persistent={opts.persistent}>
|
<ToastV2 toastId={props.toastId} duration={opts.duration} persistent={opts.persistent}>
|
||||||
<div data-slot="toast-v2-header">
|
<div data-slot="toast-v2-header">
|
||||||
<Show when={resolvedIcon()}>
|
<Show when={resolvedIcon()}>
|
||||||
@@ -134,7 +135,8 @@ export function showToastV2(options: ToastV2Options | string) {
|
|||||||
</ToastV2.Actions>
|
</ToastV2.Actions>
|
||||||
</Show>
|
</Show>
|
||||||
</ToastV2>
|
</ToastV2>
|
||||||
))
|
)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ToastV2PromiseOptions<T, U = unknown> {
|
export interface ToastV2PromiseOptions<T, U = unknown> {
|
||||||
|
|||||||
Reference in New Issue
Block a user