index.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import { actionIsLoading } from '../../loading/action';
  2. import {
  3. actionLogInSuccess,
  4. actionLogInReject,
  5. actionLogOutSuccess,
  6. actionLogOutReject,
  7. } from '../action';
  8. import { setToken, loginUser,updateCredentials,updateUserAvatar } from '../../../api-data';
  9. const asyncCreateUser = (name:string, lastName: string,file:any) => async (dispatch:any) => {
  10. try {
  11. dispatch(actionIsLoading(true));
  12. const reader: any = new FileReader()
  13. const formData:any = new FormData()
  14. reader.onload = async () => {
  15. formData.append("avatar", file);
  16. const data = await Promise.all([updateUserAvatar(formData), updateCredentials(name, lastName)])
  17. const res = data.find(el => el.token)
  18. res?.token&&dispatch(actionLogInSuccess(res.token))
  19. }
  20. await reader.readAsArrayBuffer(file)
  21. } catch (e) {
  22. console.log(e)
  23. } finally {
  24. dispatch(actionIsLoading(false));
  25. }
  26. };
  27. const asyncLogin = (number:string, code: string,cb:() => void ) => async (dispatch:any) => {
  28. try {
  29. dispatch(actionIsLoading(true));
  30. const data = await loginUser<{ token: string, registered: boolean }>(number, code);
  31. const token = data?.token
  32. const registered = data?.registered
  33. if (!token) return
  34. setToken.set(token)
  35. if (!registered) return cb()
  36. dispatch(actionLogInSuccess(token))
  37. } catch (e) {
  38. dispatch(actionLogInReject());
  39. cb()
  40. } finally {
  41. dispatch(actionIsLoading(false));
  42. }
  43. };
  44. const asyncLogout = () => async (dispatch:any) => {
  45. try {
  46. dispatch(actionIsLoading(true));
  47. dispatch(actionLogOutSuccess());
  48. setToken.unset()
  49. } catch (e) {
  50. dispatch(actionLogOutReject());
  51. } finally {
  52. dispatch(actionIsLoading(false));
  53. }
  54. };
  55. export { asyncCreateUser, asyncLogin, asyncLogout };