userDataReducer.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import { isValidPayload } from "../components/loginForm/utils/validations/isValidPayload";
  2. import { isValidUserName } from '../components/loginForm/utils/validations/isValidUserName';
  3. import { sendForm } from '../components/loginForm/utils/sendForm';
  4. import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
  5. const initialState = {
  6. userName:'',
  7. password: '',
  8. userLoadingStatus: 'idle',
  9. token: '',
  10. socket: null,
  11. responseMessage: ''
  12. }
  13. const POST_URL = process.env.REACT_APP_POST_URL || 'http://localhost:5000/login';
  14. export const getUserData = createAsyncThunk(
  15. 'userData/getUser',
  16. ( t , thunkAPI) => {
  17. const userData = thunkAPI.getState().userDataReducer;
  18. if(userData.userName){
  19. if(isValidPayload({...userData}) && isValidUserName({...userData}))
  20. try {
  21. const response = sendForm(POST_URL, userData);
  22. return response;
  23. }catch (err) {
  24. console.log('error getUserData thunk', err)
  25. return err?.message
  26. }
  27. }
  28. });
  29. const getUserDataSlice = createSlice({
  30. name: 'userData',
  31. initialState,
  32. reducers: {
  33. setUserName: (state, action) => {state.userName = action.payload.userName},
  34. setUserPassword: (state, action) => {state.password = action.payload.password},
  35. removeToken: state => {
  36. state.token = ''
  37. },
  38. deleteResponseMessage: state => {state.responseMessage = ''},
  39. },
  40. extraReducers: (builder) => {
  41. builder
  42. .addCase(getUserData.fulfilled, (state, action) => {
  43. if(action.payload?.token){
  44. state.token = action.payload.token
  45. state.userLoadingStatus = 'success'
  46. localStorage.setItem('token', action.payload.token)
  47. }
  48. if(action.payload?.message){
  49. state.responseMessage = action.payload.message
  50. state.userLoadingStatus = 'error';
  51. }
  52. })
  53. .addCase(getUserData.rejected, (state, action) => {
  54. state.userLoadingStatus = 'error';
  55. if(action.payload?.message){
  56. state.responseMessage = action.payload.message
  57. }
  58. state.responseMessage = 'Something went wrong...'
  59. })
  60. },
  61. });
  62. const {actions, reducer} = getUserDataSlice;
  63. const userDataReducer = reducer;
  64. export default userDataReducer;
  65. export const {
  66. setUserName,
  67. setUserPassword,
  68. removeToken,
  69. deleteResponseMessage,
  70. } = actions;