Toast Notification
import {Toast, Toaster, createToaster} from "@qualcomm-ui/react/toast"Usage Guidelines
Global Toaster
- Create a single toaster instance in a shared file and export it for use throughout your app.
import {createToaster} from "@qualcomm-ui/react/toast"
export const globalToaster = createToaster({
overlap: true,
position: "bottom-end",
})- Import and render the simple
Toastercomponent near the root of your application.
// shared/toaster.ts
import {Toaster} from "@qualcomm-ui/react/toast"
import {globalToaster} from "./shared"
function AppRoot() {
return (
<>
<Toaster toaster={globalToaster} />
{/* ...the rest of your app */}
</>
)
}Alternatively, you can provide children to the Toaster component to customize the rendering of the toasts. If children are omitted, the default toast rendering is used.
// <Toaster /> is ultimately a shortcut for this:
<Toaster toaster={toaster}>
{(toast) => {
return (
<Toast.Root key={toast.id}>
<Toast.Heading>{toast.title}</Toast.Heading>
<Toast.Description>{toast.description}</Toast.Description>
<Toast.CloseButton />
</Toast.Root>
)
}}
</Toaster>Examples
Demos
Each demo uses its own <Toaster /> instance for demonstration. Note that multiple toaster instances may obscure other toasts in practice, so it's recommended to use a single toaster instance for your entire app.
With Action
Use the action property to add an action button to the toast.
toaster.create({
action: {
label: "Action",
onClick: () => {
window.alert("You clicked an action")
},
},
description: "Toast Description",
label: "Toast Label",
})Toast Emphasis
Here's an example of each toast type.
Overlapping Toasts
By default, toasts are stacked on top of each other. To conserve space when rendering many toasts, set the overlap property to true in the toaster.create function.
const toaster = createToaster({
overlap: true,
placement: "bottom-end",
})Toast Duration
Use the duration property to set the duration of the toast.
toaster.create({
duration: 10000,
label: "Task failed successfully",
type: "success",
})Persistent Toast
Set the type property to loading to make the toast stay on screen until dismissed.
toaster.create({
label: "Persistent Toast",
type: "loading",
})Pause and Resume
Use the pause and resume methods on the toaster instance to pause and play the toast.
Pausing a toast prevents it from timing out, while resuming it will continue the timeout from the remaining duration.
Max Visible
Set the max prop on the createToaster function to define the maximum number of toasts that can be rendered at a time. Extra toasts will be queued and rendered when the number of visible toasts drops below the max.
const toaster = createToaster({
max: 3,
placement: "bottom-end",
})Screen Placement
Toasts can be displayed on all four corners of a page. We recommend picking a single placement for your app, as this creates a consistent experience for your users.
const topToaster = createToaster({
placement: "top-end",
})
const bottomToaster = createToaster({
placement: "bottom-start",
})API
In the following sections, the toaster instance is referred to as toaster.
ToastCreateOptions
These are the options passed to the toaster.createToast function.
| Prop | Type | Default |
|---|---|---|
The action of the toast | { | |
Whether the toast is closable | boolean | true |
The description of the toast. | | string | |
The duration the toast will be visible, in milliseconds. | number | |
The unique id of the toast | string | |
The title of the toast. | | string | |
The metadata of the toast. Use this to provide additional information about the
toast for use in your own component | Record< | |
Function called when the toast is visible | ( | |
The duration the toast will be visible, in milliseconds.
Required for exit transitions. | number | 200 |
The type of the toast. Controls the color and icon of the toast. | | 'success' |
{
label: string
onClick: () => void
}
boolean| string
| ReactElement
numberstring| string
| ReactElement
Record<
string,
any
>
(
details: ToastStatusChangeDetails,
) => void
number| 'success'
| 'danger'
| 'loading'
| 'info'
| 'warning'
| 'neutral'
ToasterCreateOptions
Options passed to the createToaster function.
| Prop | Type | Default |
|---|---|---|
number | ||
The gap between the toasts | number | 16 |
The maximum number of toasts. When the number of toasts exceeds this limit, the new toasts are queued. | number | 12 |
The offset from the safe environment edge of the viewport | | string | "1rem" |
Whether to overlap the toasts | boolean | false |
Whether to pause toast when the user leaves the browser tab | boolean | true |
The placement of the toast | | 'top-start' | "bottom-end" |
The duration for the toast to kept alive before it is removed.
Useful for exit transitions. | number | 200 |
numbernumbernumber| string
| Record<
| 'bottom'
| 'left'
| 'right'
| 'top',
string
>
booleanboolean| 'top-start'
| 'top'
| 'top-end'
| 'bottom-start'
| 'bottom'
| 'bottom-end'
numberToasterInstance
This is the instance returned from the createToaster function.
| Prop | Type |
|---|---|
The attributes of the toast store | |
Create a new toast with the given options | ( |
Dismiss a toast by its ID. If no ID is provided, dismisses all toasts | ( |
Get the total number of toasts | () => number |
Get all currently visible toasts | () => Partial< |
Check if a toast with the given ID has been dismissed | ( |
Check if a toast with the given ID is currently visible | ( |
Pause a toast's auto-dismiss timer. If no ID is provided, pauses all toasts | ( |
Create a toast that tracks a promise's state | ( |
Remove a toast by its ID | ( |
Resume a toast's auto-dismiss timer. If no ID is provided, resumes all toasts | ( |
Subscribe to the toast store | ( |
Update an existing toast with new properties | ( |
(
data: ToastOptions<
string | ReactElement
>,
) => string
(
id?: string,
) => void
() => number
() => Partial<
ToastApiProps<
string | ReactElement
>
>[]
(
id: string,
) => boolean
(
id: string,
) => boolean
(
id?: string,
) => void
(
promise:
| Promise<T>
| (() => Promise<T>),
options: ToastPromiseOptions<
string | ReactElement
>,
shared?: Omit<
ToastOptions<V>,
'type'
>,
) => {
id: string
unwrap: () => Promise<T>
}
(
id?: string,
) => void
(
id?: string,
) => void
(
subscriber: (
...args: any[]
) => void,
) => VoidFunction
(
id: string,
data: Partial<
ToastApiProps<V>
>,
) => string
<Toaster>
| Prop | Type | Default |
|---|---|---|
The ToasterInstance instance. | ||
Render Prop
that provides the ToastOptions. | FunctionRenderProp<ToastOptions> | |
The document's text/writing direction. | 'ltr' | 'rtl' | 'ltr' |
A root node to correctly resolve document in custom environments. i.e.,
Iframes, Electron. | () => | |
Allows you to replace the component's HTML element with a different tag or component. Learn more | | ReactElement |
FunctionRenderProp<ToastOptions>
'ltr' | 'rtl'
() =>
| Node
| ShadowRoot
| Document
| ReactElement
| ((
props: object,
) => ReactElement)
ToastPromiseOptions
These are the options passed to the toaster.promise function.
| Prop | Type |
|---|---|
The options for the toast that displays while the Promise is pending. | Omit< |
The function called when the Promise is rejected. | ( |
The function called after the Promise is resolved successfully or rejected. | () => void | Promise<void> |
The function called when the Promise is resolved successfully. | ( |
Omit<
ToastOptions,
'type'
>
(
response: any,
) => Omit<
ToastOptions<V>,
'type'
>
() => void | Promise<void>
(
response: any,
) => Omit<
ToastOptions<V>,
'type'
>