@kano/kbc-toast
v2.0.61
Published
Toast manager.
Downloads
25
Maintainers
Keywords
Readme
kbc-toast
A manager and a set of toast configurations.
Setup
This package provides a context with a global toastManager
that you can use to trigger toasts.
To set it up, add the following provider:
import { ToastManagerProvider } from '@kano/kbc-toast';
ReactDOM.render(
<ToastManagerProvider config={{}} >
{/* A component that will trigger a toast. */}
<Component prop="Hello" />
</ToastManagerProvider>
);
How to trigger a toast
You can trigger a toast like so
import { withToastManager, IToastManagerAPI } from '@kano/kbc-toast';
interface ComponentProps extends IToastManagerAPI {
prop: string;
}
const Component = withToastManager(({ prop, toastManager }: ComponentProps) => {
const handleClick = () => {
toastManager.queueToast(
'notice',
'consent-needed', /* Toast id */
{
icon: 'Info',
title: 'Can\'t do this',
message: 'You need permission to click this button'
}
);
};
return <button className="component" onClick={handleClick}>{prop}</button>;
});
The first parameter selects which toast component to use (in this case notice
). The second
parameter is custom toast id that you can use to refer to the toast later. The last parameter
will be passed as props to the toast component.
toastManager.current
has the currently displayed toast.
toastManager.current.id
has the id that you provided as a second parameter.
You can dismiss it by calling current.dismiss()
. The toast manager will show the next toast in
the queue. You can also cancel the entire queue by calling current.cancel()
.
## Toast types
Here are the toast types currently available. To add a new one, create a new file in the toasts/
directory.
Notice
A notice with a customisable icon, title and message.
Example:
toastManager.queueToast(
'notice',
'consent-needed',
{
icon: 'Info',
title: 'Can\'t do this',
message: 'You need permission to click this button'
}
);
Cookie Consent
A cookie consent with Allow, Deny and close dismiss buttons.
Example:
toastManager.queueToast(
'cookie-consent',
'rich-teas',
{
onAllow() {
console.log('COOL');
},
onDeny() {
console.log('NOT COOL');
},
}
);