fluxtech-me / frontik

Frontend Development Libraries
https://frontik.js.org
MIT License
10 stars 0 forks source link

Notifications Investigation #20

Closed babkenhovhannisyan closed 1 year ago

babkenhovhannisyan commented 1 year ago

Among the priorities are to figure out either to create a custom Notification Service or to use the existing npm package. Define the main problems that Notifications Service will solve.

Ruben-Arushanyan commented 1 year ago
import { toast } from 'react-toastify';
import _get from 'lodash/get';

import './notify.scss';

const defaultErrorMessage = 'Something went wrong';
const defaultSuccessMessage = 'Success';

export const getAxiosErrorMessage = (axiosError) => {
    const err = _get(axiosError, 'response.data');
    switch (true) {
        case _get(err, 'isMessageError', true /* TODO .........*/): {
            return _get(err, 'message', defaultErrorMessage);
        }
        default: {
            return defaultErrorMessage;
        }
    }
};

// override and define some interface
const notify = {
    ...toast,
    error(errorNode = defaultErrorMessage, options) {
        const toastId = _get(options, 'toastId');
        let errorMessage = errorNode;
        if (_get(errorNode, 'isAxiosError')) {
            errorMessage = getAxiosErrorMessage(errorNode);
        }

        if (toast.isActive(toastId)) {
            toast.dismiss(toastId);
        }
        return toast.error(errorMessage, { ...options, autoClose: 3000, className: 'errorToaster' });
    },
    success(successMessage = defaultSuccessMessage, options) {
        const toastId = _get(options, 'toastId');

        if (toast.isActive(toastId)) {
            toast.dismiss(toastId);
        }
        return toast.success(successMessage, { ...options, autoClose: 3000, className: 'successToaster' });
    },
};

export { notify };
Ruben-Arushanyan commented 1 year ago

Requirements