@ttoss/react-notifications
About
This module provides a simple way to show notifications in your application using ttoss ecosystem.
Installation
pnpm add @ttoss/notifications @ttoss/components @ttoss/react-icons @ttoss/ui @emotion/react
Getting Started
Provider
Add a provider on top of your application and set Modal app element.
import { NotificationsProvider } from '@ttoss/react-notifications';
import { ThemeProvider } from '@ttoss/ui';
import { Modal } from '@ttoss/components';
ReactDOM.render(
<React.StrictMode>
<ThemeProvider>
<NotificationsProvider>
<App />
</NotificationsProvider>
</ThemeProvider>
</React.StrictMode>,
document.getElementById('root')
);
Modal.setAppElement('#root');
Loading
This modules provides a global loading bar that you can use on every part of your App.
import { useNotifications } from '@ttoss/react-notifications';
import { Box, Button } from '@ttoss/ui';
const Component = () => {
const { isLoading, setLoading } = useNotifications();
return (
<Box>
<Button onClick={() => setLoading(true)} disabled={isLoading}>
Click Me!
</Button>
</Box>
);
};
Modal
Set viewType
to modal
to show a modal notification.
import { useNotifications } from '@ttoss/react-notifications';
import { Box, Button } from '@ttoss/ui';
const Component = () => {
const { addNotification } = useNotifications();
return (
<Box>
<Button
onClick={() =>
addNotification({
message: "I'm a notification",
type: 'info',
viewType: 'modal',
})
}
>
Click Me!
</Button>
</Box>
);
};
Toast
Set viewType
to toast
to show a toast notification.
import { useNotifications } from '@ttoss/react-notifications';
import { Box, Button } from '@ttoss/ui';
const Component = () => {
const { addNotification } = useNotifications();
return (
<Box>
<Button
onClick={() =>
addNotification({
message: "I'm a notification",
type: 'info',
viewType: 'toast',
})
}
>
Click Me!
</Button>
</Box>
);
};
NotificationsBox
You can use NotificationsBox
to show the notifications in a specific place. You can render as many NotificationsBox
as you want in your application.
import { NotificationsBox } from '@ttoss/react-notifications';
import { Box } from '@ttoss/ui';
const Component = () => {
return (
<Box>
<NotificationsBox />
</Box>
);
};
const App = () => {
return (
<Box>
<NotificationsBox />
<Component />
</Box>
);
};
In the example above, both NotificationsBox
will show the notifications.
To render the notifications in a specific NotificationsBox
, you can set the boxId
in the notification, which is the id
of the NotificationsBox
you want to show the notification.
import { useNotifications, NotificationsBox } from '@ttoss/react-notifications';
import { Box, Button } from '@ttoss/ui';
const Component = () => {
const { addNotification } = useNotifications();
return (
<Box>
<NotificationsBox id="my-box" />
<Button
onClick={() =>
addNotification({
message: "I'm a notification",
type: 'info',
boxId: 'my-box',
})
}
>
Click Me!
</Button>
</Box>
);
};
NotificationsHeader
You can use NotificationsHeader
to display notifications with viewType: 'header'
in a specific place, such as your application's header. Only notifications with viewType: 'header'
will be shown by this component.
import {
NotificationsHeader,
useNotifications,
} from '@ttoss/react-notifications';
import { Box, Button } from '@ttoss/ui';
const Header = () => {
const { addNotification } = useNotifications();
return (
<Box>
<NotificationsHeader />
<Button
onClick={() =>
addNotification({
message: "I'm a header notification",
type: 'info',
viewType: 'header',
})
}
>
Show Header Notification
</Button>
</Box>
);
};
Persistent Notifications
You can create persistent notifications that will not be removed when clearNotifications()
is called by setting the persist
property to true
. This is useful for important notifications that should remain visible until manually dismissed.
import { useNotifications } from '@ttoss/react-notifications';
import { Box, Button } from '@ttoss/ui';
const Component = () => {
const { addNotification, clearNotifications } = useNotifications();
return (
<Box>
<Button
onClick={() =>
addNotification({
message: "I'm a persistent notification",
type: 'warning',
persist: true, // This notification will not be cleared by clearNotifications()
})
}
>
Add Persistent Notification
</Button>
<Button
onClick={() =>
addNotification({
message: "I'm a regular notification",
type: 'info',
persist: false, // This notification will be cleared by clearNotifications()
})
}
>
Add Regular Notification
</Button>
<Button onClick={clearNotifications}>
Clear All Non-Persistent Notifications
</Button>
</Box>
);
};
Recommendation
"You can place the NotificationsBox
component at the root of your application to handle notifications rendering automatically, eliminating the need to manage it manually elsewhere. If you need a specific NotificationsBox
, simply render the NotificationsBox
in the desired location and use the boxId
property to differentiate it."
API
Notification Properties
Property | Type | Default | Description |
---|---|---|---|
id | string | number | Auto-generated | Unique identifier for the notification |
title | string | - | Optional title for the notification |
message | string | Required | The notification message content |
type | 'warning' | 'error' | 'info' | 'success' | Required | The type of notification |
viewType | 'toast' | 'modal' | 'box' | 'header' | 'box' | Where the notification should be displayed |
toast | ToastOptions | - | Additional options for toast notifications |
boxId | string | number | - | ID of the specific NotificationsBox to display the notification |
persist | boolean | false | Whether the notification should persist when clearNotifications() is called |
useNotifications Hook
The useNotifications
hook returns an object with the following properties:
Property | Type | Description |
---|---|---|
notifications | Notification[] | Array of current notifications |
addNotification | (notification: Notification | Notification[]) => void | Function to add one or more notifications |
removeNotification | (id: string | number) => void | Function to remove a specific notification by ID |
clearNotifications | () => void | Function to clear all non-persistent notifications |
isLoading | boolean | Current loading state |
setLoading | (loading: boolean) => void | Function to set the loading state |
defaultViewType | 'toast' | 'modal' | 'box' | 'header' | The default view type for notifications |