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;
}