diff --git a/src/components/Header/UserInfo.tsx b/src/components/Header/UserInfo.tsx index c166c63..80213a8 100644 --- a/src/components/Header/UserInfo.tsx +++ b/src/components/Header/UserInfo.tsx @@ -22,11 +22,11 @@ import UserBadge from '@educt/components/UserBadge'; /** * Hooks */ -import useLogoutQuery from '@educt/hooks/useLogoutQuery'; +import { useLogout } from '@educt/hooks/queries'; const UserInfo: React.FC = () => { const { userStore } = useRootStore(); - const { logout } = useLogoutQuery(); + const { logout } = useLogout(); if (userStore.me === null) { return ; diff --git a/src/components/Nav/Mobile/index.tsx b/src/components/Nav/Mobile/index.tsx index 95b518d..31dcca0 100644 --- a/src/components/Nav/Mobile/index.tsx +++ b/src/components/Nav/Mobile/index.tsx @@ -17,7 +17,7 @@ import NavList from '../NavList'; /** * Hooks */ -import useLogoutQuery from '@educt/hooks/useLogoutQuery'; +import { useLogout } from '@educt/hooks/queries'; import { useRootStore } from '@educt/hooks/useRootStore'; import { useColorMode, useDisclosure } from '@chakra-ui/react'; @@ -27,7 +27,7 @@ const NavMobile: React.FC = () => { } = useRootStore(); const { colorMode } = useColorMode(); const { isOpen, onOpen, onClose } = useDisclosure(); - const { logout } = useLogoutQuery(); + const { logout } = useLogout(); return ( <> diff --git a/src/components/SetCourseStatusButton/SetCourseStatusButton.tsx b/src/components/SetCourseStatusButton/SetCourseStatusButton.tsx index f14f08b..55e6092 100644 --- a/src/components/SetCourseStatusButton/SetCourseStatusButton.tsx +++ b/src/components/SetCourseStatusButton/SetCourseStatusButton.tsx @@ -2,7 +2,7 @@ import React, { useState } from 'react'; import { Button } from '@chakra-ui/react'; import { AiOutlineEye, AiOutlineEyeInvisible } from 'react-icons/ai'; import { CourseStatusEnum } from '@educt/enums'; -import useSetCourseStatusQuery from '@educt/hooks/useSetCourseStatusQuery'; +import { useSetCourseStatus } from '@educt/hooks/queries'; type SetCourseStatusButtonPropsType = { courseId: string; @@ -16,7 +16,7 @@ const SetCourseStatusButton: React.FC = ({ loadingText = 'Wait a second...', }) => { const [status, setStatus] = useState(currentStatus); - const { setCourseStatus, isLoading } = useSetCourseStatusQuery(); + const { setCourseStatus, isLoading } = useSetCourseStatus(); const handleChangeStatus = async (newStatus: CourseStatusEnum) => { await setCourseStatus(courseId, newStatus); diff --git a/src/hooks/useLoginQuery.ts b/src/hooks/queries/auth/useLogin.ts similarity index 75% rename from src/hooks/useLoginQuery.ts rename to src/hooks/queries/auth/useLogin.ts index 372fbbb..8ef22c2 100644 --- a/src/hooks/useLoginQuery.ts +++ b/src/hooks/queries/auth/useLogin.ts @@ -1,10 +1,12 @@ import { useToast } from '@chakra-ui/react'; import { IToken } from '@educt/interfaces'; import { useErrorHandler } from 'react-error-boundary'; -import useAsync from './useAsync'; -import { useRootStore } from './useRootStore'; +import useAsync from '../../useAsync'; +import { useRootStore } from '../../useRootStore'; -const useLoginQuery = () => { +type LoginResultDataType = IToken | undefined; + +const useLogin = () => { const { authStore } = useRootStore(); const toast = useToast(); const handleError = useErrorHandler(); @@ -21,16 +23,13 @@ const useLoginQuery = () => { return result.data; } catch (error: any) { if (error.response) { - /** - * Handle response error - */ switch (error.response.status) { case 404: toast({ title: 'User not found in a system.', status: 'error', duration: 2000 }); - throw error; + break; case 401: toast({ title: 'Invalid password.', status: 'error', duration: 2000 }); - throw error; + break; default: handleError(error); break; @@ -38,12 +37,14 @@ const useLoginQuery = () => { } else { handleError(error); } + + return Promise.reject(error); } }; - const { execute, ...state } = useAsync>(login); + const { execute, ...state } = useAsync>(login); return { login: execute, ...state }; }; -export default useLoginQuery; +export { useLogin }; diff --git a/src/hooks/useLogoutQuery.ts b/src/hooks/queries/auth/useLogout.ts similarity index 56% rename from src/hooks/useLogoutQuery.ts rename to src/hooks/queries/auth/useLogout.ts index 67eed7f..f1facd8 100644 --- a/src/hooks/useLogoutQuery.ts +++ b/src/hooks/queries/auth/useLogout.ts @@ -1,10 +1,12 @@ import { useToast } from '@chakra-ui/react'; import { useHistory } from 'react-router-dom'; -import { useRootStore } from './useRootStore'; +import { useRootStore } from '../../useRootStore'; import { useErrorHandler } from 'react-error-boundary'; -import useAsync from './useAsync'; +import useAsync from '../../useAsync'; -const useLogoutQuery = () => { +type LogoutResultDataType = {}; + +const useLogout = () => { const { authStore } = useRootStore(); const history = useHistory(); const toast = useToast(); @@ -12,17 +14,19 @@ const useLogoutQuery = () => { const logout = async () => { try { - await authStore.logout(); + const result = await authStore.logout(); history.push('/auth'); toast({ title: 'You are logged out.', isClosable: true, status: 'info' }); - } catch (error) { + return result.data; + } catch (error: any) { handleError(error); + return Promise.reject(error); } }; - const { execute, ...state } = useAsync>(logout); + const { execute, ...state } = useAsync>(logout); return { logout: execute, ...state }; }; -export default useLogoutQuery; +export { useLogout }; diff --git a/src/hooks/queries/course/useCreateCourse.ts b/src/hooks/queries/course/useCreateCourse.ts index ab81821..690dafc 100644 --- a/src/hooks/queries/course/useCreateCourse.ts +++ b/src/hooks/queries/course/useCreateCourse.ts @@ -28,10 +28,13 @@ const useCreateCourse = () => { return result.data; } catch (error: any) { if (error.response) { - if (error.response.status === 422) { - toast({ title: `${error.response.data.errors[0].message}`, status: 'error' }); - } else { - toast({ title: `${error.message}`, status: 'error' }); + switch (error.response.status) { + case 422: + toast({ title: `${error.response.data.errors[0].message}`, status: 'error' }); + break; + default: + toast({ title: `${error.message}`, status: 'error' }); + break; } } else { handleError(error); diff --git a/src/hooks/useFetchCourseQuery.ts b/src/hooks/queries/course/useFetchCourse.ts similarity index 51% rename from src/hooks/useFetchCourseQuery.ts rename to src/hooks/queries/course/useFetchCourse.ts index 171618c..0e40234 100644 --- a/src/hooks/useFetchCourseQuery.ts +++ b/src/hooks/queries/course/useFetchCourse.ts @@ -7,12 +7,12 @@ import { ICourse } from '@educt/interfaces'; * Hooks */ import { useEffect } from 'react'; -import useAsync from './useAsync'; -import { useRootStore } from './useRootStore'; +import useAsync from '../../useAsync'; +import { useRootStore } from '../../useRootStore'; -type QueryResponseDataType = Omit | undefined; +type CourseResultDataType = Omit | undefined; -const useFetchCourseQuery = (id: string) => { +const useFetchCourse = (id: string) => { const { pageStore: { editCourseStore }, } = useRootStore(); @@ -22,7 +22,7 @@ const useFetchCourseQuery = (id: string) => { return result.data; }; - const { execute: fetchCourseById, ...state } = useAsync>(fetch); + const { execute: fetchCourseById, ...state } = useAsync>(fetch); useEffect(() => { fetchCourseById(id); @@ -31,4 +31,4 @@ const useFetchCourseQuery = (id: string) => { return { ...state }; }; -export default useFetchCourseQuery; +export { useFetchCourse }; diff --git a/src/hooks/useSetCourseStatusQuery.ts b/src/hooks/queries/course/useSetCourseStatus.ts similarity index 71% rename from src/hooks/useSetCourseStatusQuery.ts rename to src/hooks/queries/course/useSetCourseStatus.ts index 853988c..b644c13 100644 --- a/src/hooks/useSetCourseStatusQuery.ts +++ b/src/hooks/queries/course/useSetCourseStatus.ts @@ -3,17 +3,17 @@ */ import { CourseStatusEnum } from '@educt/enums'; import { useErrorHandler } from 'react-error-boundary'; -import useAsync from './useAsync'; -import { useRootStore } from './useRootStore'; +import useAsync from '../../useAsync'; +import { useRootStore } from '../../useRootStore'; import { useToast } from '@chakra-ui/toast'; -type QueryResponseDataType = {} | undefined; +type SetCourseStatusResultDataType = {} | undefined; export type SetCourseStatusFnType = ( id: string, newStatus: CourseStatusEnum -) => Promise; +) => Promise; -const useSetCourseStatusQuery = () => { +const useSetCourseStatus = () => { const { courseStore } = useRootStore(); const toast = useToast(); const handleError = useErrorHandler(); @@ -38,12 +38,16 @@ const useSetCourseStatusQuery = () => { } else { handleError(error); } + + return Promise.reject(error); } }; - const { execute, ...state } = useAsync>(setCourseStatus); + const { execute, ...state } = useAsync>( + setCourseStatus + ); return { setCourseStatus: execute, ...state }; }; -export default useSetCourseStatusQuery; +export { useSetCourseStatus }; diff --git a/src/hooks/queries/index.ts b/src/hooks/queries/index.ts index 6ee26aa..8c80970 100644 --- a/src/hooks/queries/index.ts +++ b/src/hooks/queries/index.ts @@ -1,6 +1,34 @@ +/** + * Auth + */ +import { useLogin } from './auth/useLogin'; +import { useLogout } from './auth/useLogout'; + +/** + * Lesson + */ import { useDeleteLesson } from './lesson/useDeleteLesson'; +/** + * Course + */ import { useCreateCourse } from './course/useCreateCourse'; import { useUpdateCourse } from './course/useUpdateCourse'; +import { useFetchCourse } from './course/useFetchCourse'; +import { useSetCourseStatus } from './course/useSetCourseStatus'; -export { useCreateCourse, useUpdateCourse, useDeleteLesson }; +/** + * User + */ +import { useUpdateUserEmail } from './user/useUpdateUserEmail'; + +export { + useLogin, + useLogout, + useCreateCourse, + useUpdateCourse, + useFetchCourse, + useSetCourseStatus, + useDeleteLesson, + useUpdateUserEmail, +}; diff --git a/src/hooks/queries/user/useUpdateUserEmail.ts b/src/hooks/queries/user/useUpdateUserEmail.ts new file mode 100644 index 0000000..3b85d3a --- /dev/null +++ b/src/hooks/queries/user/useUpdateUserEmail.ts @@ -0,0 +1,49 @@ +import { useToast } from '@chakra-ui/toast'; +import { useErrorHandler } from 'react-error-boundary'; +import { useRootStore } from '@educt/hooks/useRootStore'; +import useAsync from '@educt/hooks/useAsync'; + +type ConfirmationResultDataType = { expired_seconds: number } | null; + +const useUpdateUserEmail = () => { + const { userStore } = useRootStore(); + const toast = useToast(); + const handleError = useErrorHandler(); + + const sendConfirmationCode = async (email: string) => { + try { + const result = await userStore.updateCurrentUserEmail(email); + toast({ title: 'Confirmation code has been sent.', status: 'info' }); + return result.data; + } catch (error: any) { + if (error.response) { + if (error.response.status === 503) { + switch (error.response.data.code) { + case 'E_CONFIRM_CODE_EXIST': + toast({ title: 'Please, try send code later.', status: 'info' }); + break; + default: + toast({ title: `Unable to send confirmation code, try again later.`, status: 'error' }); + break; + } + } else if (error.response.status === 422) { + toast({ title: error.response.data.errors[0].message, status: 'error' }); + } else { + handleError(error); + } + } else { + handleError(error); + } + + return Promise.reject(error); + } + }; + + const { execute, ...state } = useAsync>( + sendConfirmationCode + ); + + return { sendConfirmationCode: execute, ...state }; +}; + +export { useUpdateUserEmail }; diff --git a/src/hooks/useFetchLessonQuery.ts b/src/hooks/useFetchLessonQuery.ts deleted file mode 100644 index d280966..0000000 --- a/src/hooks/useFetchLessonQuery.ts +++ /dev/null @@ -1,56 +0,0 @@ -// /** -// * Types -// */ -// import { ILesson } from '@educt/interfaces'; - -// /** -// * Hooks -// */ -// import { useEffect, useState } from 'react'; -// import { useErrorHandler } from 'react-error-boundary'; -// import useIsMountedRef from './useIsMountedRef'; - -// type LessonStateType = { -// data: ILesson | null; -// error: any; -// loading: boolean; -// fetched: boolean; -// }; - -// const useFetchLessonQuery = (id: string) => { -// const [state, setState] = useState({ data: null, error: null, loading: false, fetched: false }); -// const isMountedRef = useIsMountedRef(); -// const handleError = useErrorHandler(); - -// /** -// * Fetch course handler -// */ -// useEffect(() => { -// setState(s => ({ ...s, loading: true })); -// lessonService -// .fetchById(id) -// .then(data => { -// if (isMountedRef.current) { -// setState(s => ({ ...s, data: data.data })); -// } -// }) -// .catch(error => { -// if (error.response) { -// if (isMountedRef.current) { -// setState(s => ({ ...s, error })); -// } -// } else { -// handleError(error); -// } -// }) -// .finally(() => { -// if (isMountedRef.current) { -// setState(s => ({ ...s, loading: false, fetched: true })); -// } -// }); -// }, [id]); - -// return { ...state }; -// }; - -// export default useFetchLessonQuery; diff --git a/src/hooks/useUpdateUserEmailQuery.ts.ts b/src/hooks/useUpdateUserEmailQuery.ts.ts deleted file mode 100644 index 6c52bc0..0000000 --- a/src/hooks/useUpdateUserEmailQuery.ts.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { useToast } from '@chakra-ui/toast'; -import { IApiRespose } from '@educt/interfaces'; -import { useState } from 'react'; -import { useErrorHandler } from 'react-error-boundary'; -import useIsMountedRef from './useIsMountedRef'; -import { useRootStore } from './useRootStore'; - -type UpdateUserEmailStateType = { - result: IApiRespose<{ expired_seconds: number }> | null; - error: any; - loading: boolean; - fetched: boolean; -}; - -const useUpdateUserEmailQuery = () => { - const isMountedRef = useIsMountedRef(); - const { userStore } = useRootStore(); - const [state, setState] = useState({ - result: null, - error: null, - loading: false, - fetched: false, - }); - const toast = useToast(); - const handleError = useErrorHandler(); - - const sendConfirmationCode = async (email: string) => { - try { - setState(s => ({ ...s, loading: true })); - const result = await userStore.updateCurrentUserEmail(email); - toast({ title: 'Confirmation code has been sent.', status: 'info' }); - - if (isMountedRef.current) { - setState(s => ({ ...s, result })); - } - - return result; - } catch (error: any) { - if (isMountedRef.current) { - setState(s => ({ ...s, error })); - } - - if (error.response) { - const status = error.response.status; - if (status === 503) { - switch (error.response.data.code) { - case 'E_CONFIRM_CODE_EXIST': - toast({ title: 'Please, try send code later.', status: 'info' }); - break; - default: - toast({ title: `Unable to send confirmation code, try again later.`, status: 'error' }); - break; - } - } else if (status === 422) { - toast({ title: error.response.data.errors[0].message, status: 'error' }); - } else { - handleError(error); - } - } else { - handleError(error); - } - } finally { - if (isMountedRef.current) { - setState(s => ({ ...s, loading: false, fetched: true })); - } - } - }; - - return { ...state, sendConfirmationCode }; -}; - -export default useUpdateUserEmailQuery; diff --git a/src/pages/auth/components/AuthForm/AuthForm.tsx b/src/pages/auth/components/AuthForm/AuthForm.tsx index b20c5c2..c49d82d 100644 --- a/src/pages/auth/components/AuthForm/AuthForm.tsx +++ b/src/pages/auth/components/AuthForm/AuthForm.tsx @@ -23,7 +23,7 @@ import type { SubmitHandler } from 'react-hook-form'; * Hooks */ import { useForm } from 'react-hook-form'; -import useLoginQuery from '@educt/hooks/useLoginQuery'; +import { useLogin } from '@educt/hooks/queries'; /** * Schema @@ -44,7 +44,7 @@ const AuthForm: React.FC = () => { } = useForm({ resolver: yupResolver(LoginSchema), }); - const { login, isLoading } = useLoginQuery(); + const { login, isLoading } = useLogin(); /** * Login handler diff --git a/src/pages/courses/components/CourseList/CourseItem.tsx b/src/pages/courses/components/CourseList/CourseItem.tsx index 9dc05ed..ec7cddd 100644 --- a/src/pages/courses/components/CourseList/CourseItem.tsx +++ b/src/pages/courses/components/CourseList/CourseItem.tsx @@ -12,8 +12,8 @@ import { DeleteIcon, EditIcon } from '@chakra-ui/icons'; * Types */ import { ICourse } from '@educt/interfaces'; +import type { SetCourseStatusFnType } from '@educt/hooks/queries/course/useSetCourseStatus'; import { CourseStatusEnum } from '@educt/enums'; -import { SetCourseStatusFnType } from '@educt/hooks/useSetCourseStatusQuery'; /** * Components diff --git a/src/pages/courses/components/CourseList/CourseList.tsx b/src/pages/courses/components/CourseList/CourseList.tsx index 92b6596..c5f35f6 100644 --- a/src/pages/courses/components/CourseList/CourseList.tsx +++ b/src/pages/courses/components/CourseList/CourseList.tsx @@ -18,6 +18,7 @@ import LoadingList from '@educt/components/LoadingList'; * Hooks */ import { useContext, useEffect } from 'react'; +import { useSetCourseStatus } from '@educt/hooks/queries'; import { useRootStore } from '@educt/hooks/useRootStore'; import { useDisclosure } from '@chakra-ui/hooks'; @@ -25,7 +26,6 @@ import { useDisclosure } from '@chakra-ui/hooks'; * Contexts */ import { CoursesPageContext } from '@educt/contexts'; -import useSetCourseStatusQuery from '@educt/hooks/useSetCourseStatusQuery'; type CourseListPropsType = { render: React.FC; @@ -38,7 +38,7 @@ const CourseList: React.FC = ({ render: Item }) => { } = useRootStore(); const { selectedCategory, courseStatus, deletingCourse, setDeletingCourse } = useContext(CoursesPageContext); const { onOpen: onOpenDeleteDialog, onClose: onCloseDeleteDialog, isOpen: isOpenDeleteDialog } = useDisclosure(); - const { setCourseStatus } = useSetCourseStatusQuery(); + const { setCourseStatus } = useSetCourseStatus(); const { courses, isLoading } = courseStore; /** diff --git a/src/pages/courses/edit/edit.tsx b/src/pages/courses/edit/edit.tsx index 8c3dfb1..4ecad80 100644 --- a/src/pages/courses/edit/edit.tsx +++ b/src/pages/courses/edit/edit.tsx @@ -22,7 +22,7 @@ import { StudentList, StudentItem } from './components/StudentList'; */ import { useParams } from 'react-router-dom'; import { useRootStore } from '@educt/hooks/useRootStore'; -import useFetchCourseQuery from '@educt/hooks/useFetchCourseQuery'; +import { useFetchCourse } from '@educt/hooks/queries'; /** * Course editor @@ -34,7 +34,7 @@ const EditCoursePage: React.FC = () => { editCourseStore: { course }, }, } = useRootStore(); - const { error, isLoading } = useFetchCourseQuery(params.id); + const { error, isLoading } = useFetchCourse(params.id); /** * Not Found diff --git a/src/pages/profile/change-email/components/UpdateEmailForm/UpdateEmailForm.tsx b/src/pages/profile/change-email/components/UpdateEmailForm/UpdateEmailForm.tsx index 6cc11ad..4f8134c 100644 --- a/src/pages/profile/change-email/components/UpdateEmailForm/UpdateEmailForm.tsx +++ b/src/pages/profile/change-email/components/UpdateEmailForm/UpdateEmailForm.tsx @@ -15,7 +15,7 @@ import type { SubmitHandler } from 'react-hook-form'; */ import { useContext, useEffect, useState } from 'react'; import { useForm } from 'react-hook-form'; -import useUpdateUserEmailQuery from '@educt/hooks/useUpdateUserEmailQuery.ts'; +import { useUpdateUserEmail } from '@educt/hooks/queries'; /** * Contexts @@ -41,7 +41,7 @@ type UpdateEmailFormPropsType = { const UpdateEmailForm: React.FC = ({ currentEmail }) => { const [newEmail, setNewEmail] = useState(null); const { setIsCodeSent, setConfirmEmailData } = useContext(ChangeEmailPageContext); - const { sendConfirmationCode, loading, result } = useUpdateUserEmailQuery(); + const { sendConfirmationCode, isLoading, data } = useUpdateUserEmail(); const { handleSubmit, register, @@ -54,11 +54,11 @@ const UpdateEmailForm: React.FC = ({ currentEmail }) = * Change page view in confirmation code has been sent */ useEffect(() => { - if (newEmail !== null && result !== null) { + if (newEmail !== null && data !== null) { setIsCodeSent(true); - setConfirmEmailData({ newEmail, expired_seconds: result.data.expired_seconds }); + setConfirmEmailData({ newEmail, expired_seconds: data.expired_seconds }); } - }, [result]); + }, [data]); /** * Submit form handler @@ -93,7 +93,7 @@ const UpdateEmailForm: React.FC = ({ currentEmail }) = type='submit' size='md' variant='outline' - isLoading={loading} + isLoading={isLoading} loadingText='Sending...' > Send code diff --git a/src/pages/profile/change-email/containers/ConfirmEmailContainer/ConfirmEmailContainer.tsx b/src/pages/profile/change-email/containers/ConfirmEmailContainer/ConfirmEmailContainer.tsx index 693c418..0d21847 100644 --- a/src/pages/profile/change-email/containers/ConfirmEmailContainer/ConfirmEmailContainer.tsx +++ b/src/pages/profile/change-email/containers/ConfirmEmailContainer/ConfirmEmailContainer.tsx @@ -12,7 +12,7 @@ import { ConfirmEmailDataType } from '@educt/types'; * Hooks */ import { useEffect, useState } from 'react'; -import useUpdateUserEmailQuery from '@educt/hooks/useUpdateUserEmailQuery.ts'; +import { useUpdateUserEmail } from '@educt/hooks/queries'; import useIsMountedRef from '@educt/hooks/useIsMountedRef'; import { useRootStore } from '@educt/hooks/useRootStore'; import { useToast } from '@chakra-ui/toast'; @@ -25,7 +25,7 @@ type ConfirmEmailContainerPropsType = { const ConfirmEmailContainer: React.FC = ({ data }) => { const { userStore } = useRootStore(); - const { sendConfirmationCode, loading } = useUpdateUserEmailQuery(); + const { sendConfirmationCode, isLoading } = useUpdateUserEmail(); const [isVerifying, setIsVerifying] = useState(false); const [code, setCode] = useState(''); const [expired, setExpired] = useState(data.expired_seconds); @@ -93,11 +93,11 @@ const ConfirmEmailContainer: React.FC = ({ data const resendCodeHandler = async () => { const result = await sendConfirmationCode(data.newEmail); - if (result !== undefined) { + if (result !== null) { /** * Reset timer state */ - const { expired_seconds } = result.data; + const { expired_seconds } = result; setExpired(v => (v = expired_seconds)); } }; @@ -158,7 +158,7 @@ const ConfirmEmailContainer: React.FC = ({ data mt='3' textDecoration='underline' loadingText='Wait a second.' - isLoading={loading} + isLoading={isLoading} > Resend code diff --git a/src/pages/profile/profile.tsx b/src/pages/profile/profile.tsx index e1851cc..50da352 100644 --- a/src/pages/profile/profile.tsx +++ b/src/pages/profile/profile.tsx @@ -1,5 +1,4 @@ import React from 'react'; -import { observer } from 'mobx-react'; import { Avatar, Tabs, @@ -35,7 +34,7 @@ import CourseList from '@educt/pages/profile/components/CourseList'; import { useHistory } from 'react-router-dom'; import { useColorMode } from '@chakra-ui/color-mode'; import { useRootStore } from '@educt/hooks/useRootStore'; -import useLogoutQuery from '@educt/hooks/useLogoutQuery'; +import { useLogout } from '@educt/hooks/queries'; /** * Profile page @@ -45,7 +44,7 @@ const ProfilePage: React.FC = () => { userStore: { me }, } = useRootStore(); const history = useHistory(); - const { logout } = useLogoutQuery(); + const { logout } = useLogout(); const { colorMode } = useColorMode(); if (me === null) return ; @@ -139,7 +138,7 @@ const ProfilePage: React.FC = () => { - diff --git a/src/pages/users/components/CreateUserForm/CreateUserForm.tsx b/src/pages/users/components/CreateUserForm/CreateUserForm.tsx index 1b4e9fd..be7c710 100644 --- a/src/pages/users/components/CreateUserForm/CreateUserForm.tsx +++ b/src/pages/users/components/CreateUserForm/CreateUserForm.tsx @@ -84,6 +84,7 @@ const CreateUserModal: React.FC = () => { /** * Submit handler */ + // TODO: move to hook const onSubmit: SubmitHandler = async data => { try { setLoading(true); diff --git a/src/pages/users/components/DeleteUserDialog/DeleteUserDialog.tsx b/src/pages/users/components/DeleteUserDialog/DeleteUserDialog.tsx index d8b760e..df77ec0 100644 --- a/src/pages/users/components/DeleteUserDialog/DeleteUserDialog.tsx +++ b/src/pages/users/components/DeleteUserDialog/DeleteUserDialog.tsx @@ -44,6 +44,7 @@ const DeleteUserDialog: React.FC = ({ isOpen, onClose * @param isConfirmed Is dialog confirmed * @param id User id */ + // TODO: move to hook const deleteUserHandler = async (isConfirmed: boolean, id: string) => { if (isConfirmed) { try { diff --git a/src/pages/users/components/EditUserForm/EditUserForm.tsx b/src/pages/users/components/EditUserForm/EditUserForm.tsx index c98348d..bdf7265 100644 --- a/src/pages/users/components/EditUserForm/EditUserForm.tsx +++ b/src/pages/users/components/EditUserForm/EditUserForm.tsx @@ -94,6 +94,7 @@ const UpdateUserForm: React.FC = ({ user, onClose, isOp /** * Submit handler */ + // TODO: move to hook const onSubmit: SubmitHandler = async data => { try { setIsLoading(true); diff --git a/src/services/AuthService.ts b/src/services/AuthService.ts index a05988c..3d81255 100644 --- a/src/services/AuthService.ts +++ b/src/services/AuthService.ts @@ -28,7 +28,7 @@ class AuthService implements AuthServiceImpl { * @param password User password * @returns Token result data */ - public async requestLogin(login: string, password: string) { + public async requestLogin(login: string, password: string): Promise> { const result = await this.api.post('v1/auth/login', { login, password, @@ -41,7 +41,7 @@ class AuthService implements AuthServiceImpl { * * @returns Empty obj */ - public async requestLogout() { + public async requestLogout(): Promise> { const result = await this.api.post('v1/auth/logout'); return result.data; }