Add toast notification in case of error

Signed-off-by: soupette <cyril@strapi.io>
This commit is contained in:
soupette 2021-09-28 08:33:40 +02:00
parent 6f2dfac689
commit 5078b041e8
4 changed files with 26 additions and 2 deletions

View File

@ -6,7 +6,7 @@ import { Link } from '@strapi/parts/Link';
const Notification = ({ dispatch, notification }) => { const Notification = ({ dispatch, notification }) => {
const { formatMessage } = useIntl(); const { formatMessage } = useIntl();
const { message, link, type, id, onClose, timeout, blockTransition } = notification; const { message, link, type, id, onClose, timeout, blockTransition, title } = notification;
const formattedMessage = msg => (typeof msg === 'string' ? msg : formatMessage(msg, msg.values)); const formattedMessage = msg => (typeof msg === 'string' ? msg : formatMessage(msg, msg.values));
const handleClose = useCallback(() => { const handleClose = useCallback(() => {
@ -56,6 +56,10 @@ const Notification = ({ dispatch, notification }) => {
variant = 'success'; variant = 'success';
} }
if (title) {
alertTitle = title;
}
return ( return (
<Alert <Alert
action={ action={
@ -93,6 +97,7 @@ Notification.defaultProps = {
}, },
onClose: () => null, onClose: () => null,
timeout: 2500, timeout: 2500,
title: null,
blockTransition: false, blockTransition: false,
}, },
}; };
@ -121,6 +126,7 @@ Notification.propTypes = {
}), }),
]).isRequired, ]).isRequired,
}), }),
title: PropTypes.string,
type: PropTypes.string, type: PropTypes.string,
onClose: PropTypes.func, onClose: PropTypes.func,
timeout: PropTypes.number, timeout: PropTypes.number,

View File

@ -14,6 +14,7 @@ const notificationReducer = (state = initialState, action) =>
draftState.notifications.push({ draftState.notifications.push({
// No action.config spread to limit the notification API and avoid customization // No action.config spread to limit the notification API and avoid customization
id: state.notifId, id: state.notifId,
title: action.config.title || null,
type: get(action, ['config', 'type'], 'success'), type: get(action, ['config', 'type'], 'success'),
message: get(action, ['config', 'message'], { message: get(action, ['config', 'message'], {
id: 'notification.success.saved', id: 'notification.success.saved',

View File

@ -30,6 +30,7 @@ describe('ADMIN | COMPONENTS | NOTIFICATIONS | reducer', () => {
notifications: [ notifications: [
{ {
id: 0, id: 0,
title: null,
type: 'success', type: 'success',
message: { id: 'notification.message' }, message: { id: 'notification.message' },
link: null, link: null,

View File

@ -304,6 +304,13 @@ const EditViewDataManagerProvider = ({
console.error(err); console.error(err);
errors = getYupInnerErrors(err); errors = getYupInnerErrors(err);
const firstError = Object.keys(errors)[0];
toggleNotification({
type: 'warning',
title: `${firstError}:`,
message: errors[firstError],
});
} }
dispatch({ dispatch({
@ -311,7 +318,16 @@ const EditViewDataManagerProvider = ({
errors, errors,
}); });
}, },
[createFormData, isCreatingEntry, modifiedData, onPost, onPut, trackerProperty, yupSchema] [
createFormData,
isCreatingEntry,
modifiedData,
onPost,
onPut,
toggleNotification,
trackerProperty,
yupSchema,
]
); );
const handlePublish = useCallback(async () => { const handlePublish = useCallback(async () => {