149 lines
4.7 KiB
TypeScript
149 lines
4.7 KiB
TypeScript
/*
|
|
* File: authActions.ts
|
|
* Description: Async actions (thunks) for Auth state
|
|
* Design & Developed by Tech4Biz Solutions
|
|
* Copyright (c) Spurrin Innovations. All rights reserved.
|
|
*/
|
|
|
|
import { createAsyncThunk } from '@reduxjs/toolkit';
|
|
import { logout, updateUserProfile } from './authSlice';
|
|
import { authAPI } from '../services/authAPI';
|
|
import { showError, showSuccess, showWarning } from '../../../shared/utils/toast';
|
|
|
|
/**
|
|
* Thunk to login user
|
|
*/
|
|
export const login = createAsyncThunk(
|
|
'auth/login',
|
|
async (credentials: { email: string; password: string }, { rejectWithValue }) => {
|
|
try {
|
|
const response:any = await authAPI.login(credentials.email, credentials.password,'web');
|
|
console.log('response',response)
|
|
if(response.data.message && !response.data.success){
|
|
showError(response.data.message)
|
|
return rejectWithValue(response.data.message);
|
|
}
|
|
|
|
if(response.data.message && response.data.success){
|
|
showSuccess(response.data.message)
|
|
}
|
|
|
|
if (response.ok && response.data && response.data.data) {
|
|
// Return the user data for the fulfilled case
|
|
if(response.data.data.user.dashboard_role !=='er_physician'){
|
|
showWarning('You are not authorized to access this application')
|
|
return rejectWithValue('Not Authorized');
|
|
}
|
|
return {...response.data.data.user,access_token:response.data.data.access_token};
|
|
} else {
|
|
const errorMessage = response.data?.message || response.problem || 'Unknown error';
|
|
return rejectWithValue(errorMessage);
|
|
}
|
|
} catch (error: any) {
|
|
return rejectWithValue(error.message);
|
|
}
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Thunk to update user profile
|
|
*/
|
|
export const updateUserProfileAsync = createAsyncThunk(
|
|
'auth/updateUserProfile',
|
|
async (profileData: { first_name: string; last_name: string }, { getState, rejectWithValue, dispatch }) => {
|
|
try {
|
|
const state = getState() as any;
|
|
const user = state.auth.user;
|
|
const token = user?.access_token;
|
|
|
|
if (!user?.user_id || !token) {
|
|
return rejectWithValue('User not authenticated');
|
|
}
|
|
|
|
const response: any = await authAPI.updateUserProfile(user.user_id, profileData, token);
|
|
|
|
if (response.ok && response.data) {
|
|
// Update local state
|
|
dispatch(updateUserProfile({
|
|
first_name: profileData.first_name,
|
|
last_name: profileData.last_name,
|
|
display_name: `${profileData.first_name} ${profileData.last_name}`
|
|
}));
|
|
|
|
showSuccess('Profile updated successfully');
|
|
return response.data;
|
|
} else {
|
|
const errorMessage = response.data?.message || response.problem || 'Failed to update profile';
|
|
showError(errorMessage);
|
|
return rejectWithValue(errorMessage);
|
|
}
|
|
} catch (error: any) {
|
|
const errorMessage = error.message || 'Failed to update profile';
|
|
showError(errorMessage);
|
|
return rejectWithValue(errorMessage);
|
|
}
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Thunk to change password
|
|
*/
|
|
export const changePasswordAsync = createAsyncThunk(
|
|
'auth/changePassword',
|
|
async (passwordData: { currentPassword: string; newPassword: string }, { getState, rejectWithValue }) => {
|
|
try {
|
|
const state = getState() as any;
|
|
const user = state.auth.user;
|
|
const token = user?.access_token;
|
|
|
|
if (!user?.user_id || !token) {
|
|
return rejectWithValue('User not authenticated');
|
|
}
|
|
|
|
const response: any = await authAPI.changePassword(user.user_id, { password: passwordData.newPassword }, token);
|
|
|
|
if (response.ok && response.data) {
|
|
showSuccess('Password changed successfully');
|
|
return response.data;
|
|
} else {
|
|
const errorMessage = response.data?.message || response.problem || 'Failed to change password';
|
|
showError(errorMessage);
|
|
return rejectWithValue(errorMessage);
|
|
}
|
|
} catch (error: any) {
|
|
const errorMessage = error.message || 'Failed to change password';
|
|
showError(errorMessage);
|
|
return rejectWithValue(errorMessage);
|
|
}
|
|
}
|
|
);
|
|
|
|
/**
|
|
* Thunk to logout user
|
|
*/
|
|
export const logoutUser = createAsyncThunk(
|
|
'auth/logout',
|
|
async (_, { dispatch, rejectWithValue }) => {
|
|
try {
|
|
// TODO: Add logout API call if needed
|
|
// const response = await authAPI.logout();
|
|
|
|
// For now, just dispatch the logout action
|
|
dispatch(logout());
|
|
|
|
// Show success message
|
|
showSuccess('Logged out successfully');
|
|
|
|
return true;
|
|
} catch (error: any) {
|
|
console.error('Logout error:', error);
|
|
return rejectWithValue(error.message);
|
|
}
|
|
}
|
|
);
|
|
|
|
/*
|
|
* End of File: authActions.ts
|
|
* Design & Developed by Tech4Biz Solutions
|
|
* Copyright (c) Spurrin Innovations. All rights reserved.
|
|
*/
|