index.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import {
  2. actionLogInSuccess,
  3. actionLogInReject,
  4. actionLogOutSuccess,
  5. actionLogOutReject,
  6. actionCurrentSuccess,
  7. actionCurrentReject
  8. } from '../action';
  9. import { setToken, loginUser, logoutUser, updateCredentials, updateUserAvatar, currentUser } from '../../../api-data';
  10. import { IAuthorizationState } from '../../../typescript/redux/authorization/interfaces'
  11. import { TResPromiseAll } from '../../../typescript/redux/authorization/types'
  12. const asyncCreateUser = (name:string, lastName: string,file:object) => async (dispatch:any) => {
  13. try {
  14. const formData: any = new FormData()
  15. formData.append("avatar", file);
  16. const data = await Promise.all<TResPromiseAll>(
  17. [updateUserAvatar(formData), updateCredentials(name, lastName)])
  18. const token = data.find(el => el?.token)?.token
  19. token&&dispatch(actionLogInSuccess(token))
  20. } catch (e) {
  21. dispatch(actionLogInReject())
  22. }
  23. };
  24. const asyncLogin = (number:string, code: string,cb:() => void ) => async (dispatch:any) => {
  25. try {
  26. const data = await loginUser<{ token: string, registered: boolean }>(number, code);
  27. const token = data?.token
  28. const registered = data?.registered
  29. if (!token) return
  30. setToken.set(token)
  31. if (!registered) return cb()
  32. dispatch(actionLogInSuccess(token))
  33. } catch (e) {
  34. dispatch(actionLogInReject());
  35. cb()
  36. }
  37. };
  38. const asyncLogout = () => async (dispatch:any) => {
  39. try {
  40. const data = await logoutUser<object>();
  41. if (data) {
  42. dispatch(actionLogOutSuccess());
  43. setToken.unset()
  44. }
  45. } catch (e) {
  46. dispatch(actionLogOutReject());
  47. }
  48. };
  49. const asyncCurrentUser = () => async (dispatch:any) => {
  50. try {
  51. const data = await currentUser<IAuthorizationState>()
  52. data && dispatch(actionCurrentSuccess(data));
  53. if(!data?.token) throw new Error('old token')
  54. } catch (e) {
  55. dispatch(actionCurrentReject());
  56. }
  57. };
  58. export { asyncCreateUser, asyncLogin, asyncLogout, asyncCurrentUser };