Skip to main content

Toast

Toast is a small, non-intrusive notification that appears temporarily on the screen to provide feedback to the user. It is used to display brief messages, such as success, error, or informational alerts, without interrupting the user's workflow. Toasts appear at the bottom of the screen and can optionally automatically disappear after a short duration.

Demo​

Result
Loading...
Live Editor
//import {useToastState, Toast, ButtonGroup, Button} from 'koval-ui';

function Example(props) {
  const toastId = 'foo';

  const {openToast, closeToast} = useToastState(toastId);
  return (
    <Fragment>
      <ButtonGroup>
        <Button onClick={openToast}>Open toast</Button>
        <Button onClick={closeToast}>Close toast</Button>
      </ButtonGroup>
      <Toast id={toastId} title="Hello, world!" body="This is Toast example." />
    </Fragment>
  );
}

Props​

id​

type: string

Provide unique id to the Toast. Mandatory

variant​

type:'default' | 'success' | 'error' | 'warning'

Select a design variant of Toast to show

title​

type: string

Provide a main text to display inside Toast

body​

type: string

Provide an additional text to display inside Toast

icon​

type: React.FC

Provide an icon to show instead of the default.

actions​

type: Array<ActionProps | [ActionProps, ActionProps]>

Provide an array of actions with callbacks

closeLabel​

type: string

Provide custom label for close Toast action

onToggle​

type: (isOpen: boolean) => void

Callback triggered when the user closes Toast

autoClose​

type: number

Set time in seconds to auto close Toast

useToastState hook interface​

useToastState uses Koval Global Context, so it works anywhere in the application. Developers can put Toast in the other component.

openToast​

Show a toast to the user. Will not work from a component scope. Needs to be run as a callback

const {openToast} = useToastState('foo');

// Don't do this!
openToast();

// This will work
const handleClick = useCallback(() => {
openToast();
}, [openToast]);

closeToast​

Hide toast.

const {closeToast} = useToastState('foo');

const handleClick = useCallback(() => {
closeToast();
}, [closeToast]);

isOpen​

Current visibility of toast

Configuring actions​

See the Actions API page

Multiple Toasts​

When user triggers multiple Toasts the newest one replaces oldest. There's no queue, so when visible Toast is dismissed there's nothing to show.

Hook expects a developer to provide unique id of Toast as a parameter.

Result
Loading...
Live Editor
//import {useToastState, Toast, ButtonGroup, Button} from 'koval-ui';

function Example(props) {
  const toastId = 'foo';

  const {openToast: openDefault} = useToastState('foo');
  const {openToast: openSuccess} = useToastState('bar');
  const {openToast: openError} = useToastState('bazz');
  const {openToast: openWarning} = useToastState('buzz');
  return (
    <Fragment>
      <ButtonGroup layout="vertical">
        <Button onClick={openDefault}>Open default toast</Button>
        <Button onClick={openSuccess}>Open success toast</Button>
        <Button onClick={openError}>Open error toast</Button>
        <Button onClick={openWarning}>Open warning toast</Button>
      </ButtonGroup>
      <Toast id="foo" title="This is default toast" variant="default" />
      <Toast id="bar" title="This is success toast" variant="success" />
      <Toast id="bazz" title="This is error toast" variant="error" />
      <Toast id="buzz" title="This is warning toast" variant="warning" />
    </Fragment>
  );
}

Self-closing example​

Result
Loading...
Live Editor
//import {useToastState, Toast, Button} from 'koval-ui';

function Example(props) {
  const toastId = 'foo';

  const {openToast, closeToast} = useToastState(toastId);
  return (
    <Fragment>
      <Button onClick={openToast}>Open self-closing toast</Button>
      <Toast
        id={toastId}
        title="Capre diem!"
        body="I will close in 10 seconds."
        autoClose={10}
      />
    </Fragment>
  );
}