From 11a7d10e38e5af1293af0a17bf24c27392cc0a37 Mon Sep 17 00:00:00 2001 From: Dm1tr1y147 <me@dmitriy.icu> Date: Wed, 23 Sep 2020 18:47:19 +0500 Subject: [PATCH] Imporved error handling in admin components --- src/views/Admin/LogInForm/index.tsx | 19 +++++++++-------- src/views/Admin/RemoveList/index.tsx | 1 + src/views/Admin/RemoveList/utils.ts | 2 +- src/views/Admin/UploadForm/index.tsx | 31 ++++++++++++++++++++++------ src/views/Admin/handlers.ts | 8 +++---- src/views/Admin/utils.ts | 2 +- 6 files changed, 42 insertions(+), 21 deletions(-) diff --git a/src/views/Admin/LogInForm/index.tsx b/src/views/Admin/LogInForm/index.tsx index 3bfc978..d8943b6 100644 --- a/src/views/Admin/LogInForm/index.tsx +++ b/src/views/Admin/LogInForm/index.tsx @@ -4,7 +4,7 @@ import { useHistory } from 'react-router-dom'; import { ILoadingState } from 'types'; import { handleFormSubmit } from 'views/Admin/utils'; import { IErrorStatus } from 'views/Admin/types'; -import { handleLoginError } from 'views/Admin/handlers'; +import { handleError } from 'views/Admin/handlers'; import { handleSuccessfulLogin } from './handlers'; import './main.css'; @@ -31,15 +31,15 @@ const LogInForm: React.FC<props> = ({ setLoading, token, setToken }) => { return ( <form id="logIn" - onSubmit={(e) => - handleFormSubmit( + onSubmit={(e) => { + setErrorStatus({ successful: true }); + return handleFormSubmit( e, 'api/login', - (err) => handleLoginError(err, setErrorStatus), - (res: Response) => handleSuccessfulLogin(res, setToken), - { 'Access-Control-Allow-Origin': '*' } - ) - } + (err) => handleError(err, setErrorStatus), + (res: Response) => handleSuccessfulLogin(res, setToken) + ); + }} > <label htmlFor="">Имя пользователя</label> <input type="text" name="username" /> @@ -47,8 +47,9 @@ const LogInForm: React.FC<props> = ({ setLoading, token, setToken }) => { <label htmlFor="password">Пароль</label> <input type="password" name="password" /> + {!errorStatus.successful ? <p className="errorText">{errorStatus.errorMessage}</p> : ''} + <input type="submit" value="Вход" /> - {!errorStatus.successful ? <p>{errorStatus.errorMessage}</p> : ''} </form> ); }; diff --git a/src/views/Admin/RemoveList/index.tsx b/src/views/Admin/RemoveList/index.tsx index be63f51..fa79187 100644 --- a/src/views/Admin/RemoveList/index.tsx +++ b/src/views/Admin/RemoveList/index.tsx @@ -27,6 +27,7 @@ const RemoveList: React.FC<props> = ({ setLoading, token, setToken }) => { <button onClick={async () => { await removeItem(el.slug, token!); + fetchCardList(setData); }} > <img src={removeIcon} alt="удалить" /> diff --git a/src/views/Admin/RemoveList/utils.ts b/src/views/Admin/RemoveList/utils.ts index 11e8bff..39439aa 100644 --- a/src/views/Admin/RemoveList/utils.ts +++ b/src/views/Admin/RemoveList/utils.ts @@ -4,7 +4,7 @@ const removeItem = async (slug: string, token: string) => { `https://upml-bank.dmitriy.icu/api/card/${slug}/delete`, { method: 'delete', - headers: { Authentification: `Token ${token}` } + headers: { Authorization: `Token ${token}` } } ); if (!res.ok) throw res.statusText; diff --git a/src/views/Admin/UploadForm/index.tsx b/src/views/Admin/UploadForm/index.tsx index f97eeb0..b12c6a9 100644 --- a/src/views/Admin/UploadForm/index.tsx +++ b/src/views/Admin/UploadForm/index.tsx @@ -1,4 +1,4 @@ -import React, { Dispatch, SetStateAction, useEffect } from 'react'; +import React, { Dispatch, SetStateAction, useEffect, useState } from 'react'; import { useHistory } from 'react-router-dom'; import Select from 'components/Form/Select'; @@ -6,6 +6,8 @@ import { ILoadingState } from 'types'; import { handleFormSubmit } from 'views/Admin/utils'; import selectOptions from './selectOptions.json'; import './main.css'; +import { IErrorStatus } from '../types'; +import { handleError } from '../handlers'; type props = { setLoading: Dispatch<SetStateAction<ILoadingState>>; @@ -15,6 +17,10 @@ type props = { const UploadForm: React.FC<props> = ({ setLoading, token }) => { const { push: historyPush } = useHistory(); + const [errorStatus, setErrorStatus] = useState<IErrorStatus>({ + successful: true + }); + useEffect(() => { if (!token) { historyPush('/a/l'); @@ -24,11 +30,18 @@ const UploadForm: React.FC<props> = ({ setLoading, token }) => { return ( <form id="uploadForm" - onSubmit={(e) => - handleFormSubmit(e, 'api/card/create', () => {}, undefined, { - 'Authorization': `Token ${localStorage.token}` - }) - } + onSubmit={(e) => { + setErrorStatus({ successful: true }); + handleFormSubmit( + e, + 'api/card/create', + (err) => handleError(err, setErrorStatus), + undefined, + { + Authorization: `Token ${token}` + } + ); + }} > <label htmlFor="title">Название</label> <input type="text" name="title" /> @@ -62,6 +75,12 @@ const UploadForm: React.FC<props> = ({ setLoading, token }) => { <input type="file" name="image" id="image" /> </aside> + {!errorStatus.successful ? ( + <p className="errorText">{errorStatus.errorMessage}</p> + ) : ( + '' + )} + <input type="submit" value="Отправить" /> </form> ); diff --git a/src/views/Admin/handlers.ts b/src/views/Admin/handlers.ts index 53b62f0..9145969 100644 --- a/src/views/Admin/handlers.ts +++ b/src/views/Admin/handlers.ts @@ -1,15 +1,15 @@ import { Dispatch, SetStateAction } from 'react'; import { IErrorStatus } from './types'; -const handleLoginError = ( - err: ErrorEvent, +const handleError = ( + err: string, setErrorStatus: Dispatch<SetStateAction<IErrorStatus>> ) => { console.log(err); setErrorStatus({ successful: false, - errorMessage: err.toString() + errorMessage: 'Ошибка' }); }; -export { handleLoginError }; +export { handleError }; diff --git a/src/views/Admin/utils.ts b/src/views/Admin/utils.ts index fba2122..e801f7b 100644 --- a/src/views/Admin/utils.ts +++ b/src/views/Admin/utils.ts @@ -22,4 +22,4 @@ const handleFormSubmit = ( .catch((err) => errorHandler(err)); }; -export {handleFormSubmit} \ No newline at end of file +export { handleFormSubmit };