123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- import { useMemo } from 'react';
- import { v4 as uuidv4 } from 'uuid';
- import { getMessageFromError } from 'app/core/utils/errors';
- import { AppNotification, AppNotificationSeverity, useDispatch } from 'app/types';
- import { notifyApp } from '../actions';
- const defaultSuccessNotification = {
- title: '',
- text: '',
- severity: AppNotificationSeverity.Success,
- icon: 'check',
- };
- const defaultWarningNotification = {
- title: '',
- text: '',
- severity: AppNotificationSeverity.Warning,
- icon: 'exclamation-triangle',
- };
- const defaultErrorNotification = {
- title: '',
- text: '',
- severity: AppNotificationSeverity.Error,
- icon: 'exclamation-triangle',
- };
- export const createSuccessNotification = (title: string, text = '', traceId?: string): AppNotification => ({
- ...defaultSuccessNotification,
- title,
- text,
- id: uuidv4(),
- timestamp: Date.now(),
- showing: true,
- });
- export const createErrorNotification = (
- title: string,
- text: string | Error = '',
- traceId?: string,
- component?: React.ReactElement
- ): AppNotification => {
- return {
- ...defaultErrorNotification,
- text: getMessageFromError(text),
- title,
- id: uuidv4(),
- traceId,
- component,
- timestamp: Date.now(),
- showing: true,
- };
- };
- export const createWarningNotification = (title: string, text = '', traceId?: string): AppNotification => ({
- ...defaultWarningNotification,
- title,
- text,
- traceId,
- id: uuidv4(),
- timestamp: Date.now(),
- showing: true,
- });
- /** Hook for showing toast notifications with varying severity (success, warning error).
- * @example
- * const notifyApp = useAppNotification();
- * notifyApp.success('Success!', 'Some additional text');
- * notifyApp.warning('Warning!');
- * notifyApp.error('Error!');
- */
- export function useAppNotification() {
- const dispatch = useDispatch();
- return useMemo(
- () => ({
- success: (title: string, text = '') => {
- dispatch(notifyApp(createSuccessNotification(title, text)));
- },
- warning: (title: string, text = '', traceId?: string) => {
- dispatch(notifyApp(createWarningNotification(title, text, traceId)));
- },
- error: (title: string, text = '', traceId?: string) => {
- dispatch(notifyApp(createErrorNotification(title, text, traceId)));
- },
- }),
- [dispatch]
- );
- }
|