import { createSlice, PayloadAction } from '@reduxjs/toolkit' import { RefreshQRCodeProps, UserProps } from './types' import { getUserData } from '../../utils/storage' import { ActiveAccountProps, AdjustedBalanceProps, CheckEmailProps, ConnectWalletProps, GetAdjustedBalances, IncreaseAllowanceProps, LoginWithDappProps, ResetPasswordProps, SendEmailForgotPasswordProps, SignUpWithDappProps, UpdateProfileProps, UpdateProfileResponse, UserState, VerifyInformationChangeProps, } from './types' export const initialUserState: UserState = { loading: { loadingLoginWithEmail: false, loadingLoginWithMetamask: false, loadingSignUp: false, loadingActiveAccount: false, loadingSendEmailForgotPassword: false, loadingResetPassword: false, loadingRefreshQRCode: false, loadingGetAdjustedBalances: false, loadingIncreaseAllowance: false, loadingUpdateProfile: false, loadingVerifyInformationChange: false, loadingCheckEmail: false, loadingConnectWallet: false, loadingResendEmailActive: false, }, isSuccess: { isRegisterSuccess: false, isActiveAccountSuccess: false, isConnectWalletSuccess: false, isSendMailForgotPasswordSuccess: false, isResetPasswordSuccess: false, isCheckMailSuccess: false, isUpdateProfileSuccess: false, isVerifyInformationChangeSuccess: false, }, userData: getUserData(), adjustedBalances: [] as AdjustedBalanceProps[], } export const userSlice = createSlice({ name: 'user', initialState: initialUserState, reducers: { save(state, action: PayloadAction) { const { payload } = action return { ...state, ...payload, } }, // ============= logout ============= logout(state) { state.userData = null }, // ============= login with meta mask ============= loginWithMetaMask(state, _action: PayloadAction) { state.loading.loadingLoginWithMetamask = true }, loginWithMetaMaskSuccess(state, action: PayloadAction) { state.userData = action.payload state.loading.loadingLoginWithMetamask = false }, loginWithMetaMaskFailed(state) { state.loading.loadingLoginWithMetamask = false }, // ============= login with Dapp account ============= loginWithDapp(state, _action: PayloadAction) { state.loading.loadingLoginWithEmail = true }, loginWithDappSuccess(state, action: PayloadAction) { state.userData = action.payload state.loading.loadingLoginWithEmail = false }, loginWithDappFailed(state) { state.loading.loadingLoginWithEmail = false }, // ============= sign up with Dapp account ============= signUpWithDapp(state, _action: PayloadAction) { state.isSuccess.isRegisterSuccess = false state.loading.loadingSignUp = true }, signUpWithDappSuccess(state) { state.isSuccess.isRegisterSuccess = true state.loading.loadingSignUp = false }, signUpWithDappFailed(state) { state.isSuccess.isRegisterSuccess = false state.loading.loadingSignUp = false }, // ============= active account ============= activeAccount(state, _action: PayloadAction) { state.isSuccess.isActiveAccountSuccess = false state.loading.loadingActiveAccount = true }, activeAccountSuccess(state) { state.isSuccess.isActiveAccountSuccess = true state.loading.loadingActiveAccount = false }, activeAccountFailed(state) { state.isSuccess.isActiveAccountSuccess = false state.loading.loadingActiveAccount = false }, // ============= send mail forgot password ============= sendEmailForgotPassword(state, _action: PayloadAction) { state.loading.loadingSendEmailForgotPassword = true }, sendEmailForgotPasswordSuccess(state) { state.isSuccess.isSendMailForgotPasswordSuccess = true state.loading.loadingSendEmailForgotPassword = false }, sendEmailForgotPasswordFailed(state) { state.isSuccess.isSendMailForgotPasswordSuccess = false state.loading.loadingSendEmailForgotPassword = false }, // ============= reset password ============= resetPassword(state, action: PayloadAction) { state.loading.loadingResetPassword = true }, resetPasswordSuccess(state, action: PayloadAction) { state.isSuccess.isResetPasswordSuccess = true state.loading.loadingResetPassword = false }, resetPasswordFailed(state) { state.isSuccess.isResetPasswordSuccess = false state.loading.loadingResetPassword = false }, // ============= check email ============= checkEmail(state, _action: PayloadAction) { state.isSuccess.isCheckMailSuccess = false state.loading.loadingCheckEmail = true }, checkEmailSuccess(state) { state.loading.loadingCheckEmail = false state.isSuccess.isCheckMailSuccess = true }, checkEmailFailed(state) { state.isSuccess.isCheckMailSuccess = false state.loading.loadingCheckEmail = false }, // ============= update profile ============= updateProfile(state, _action: PayloadAction) { state.isSuccess.isUpdateProfileSuccess = false state.loading.loadingUpdateProfile = true }, updateProfileSuccess(state, action: PayloadAction) { const { payload } = action state.userData = payload.userData state.loading.loadingUpdateProfile = false state.isSuccess.isUpdateProfileSuccess = true }, updateProfileFailed(state) { state.loading.loadingUpdateProfile = false state.isSuccess.isUpdateProfileSuccess = false }, // ============= verify information change ============= verifyInformationChange(state, _action: PayloadAction) { state.loading.loadingVerifyInformationChange = true state.isSuccess.isVerifyInformationChangeSuccess = false }, verifyInformationChangeSuccess(state, action: PayloadAction) { const { payload } = action state.userData = payload.userData state.loading.loadingVerifyInformationChange = false state.isSuccess.isVerifyInformationChangeSuccess = true }, verifyInformationChangeFailed(state) { state.loading.loadingVerifyInformationChange = false }, // ============= refresh qr code ============= refreshQRCode(state, _action: PayloadAction) { state.loading.loadingRefreshQRCode = true }, refreshQRCodeSuccess(state, action: PayloadAction) { state.loading.loadingRefreshQRCode = false state.userData.qrCode = action.payload }, refreshQRCodeFailed(state) { state.loading.loadingRefreshQRCode = false }, // ============= get Adjusted Balances ============= getAdjustedBalances(state, _action: PayloadAction) { state.loading.loadingGetAdjustedBalances = true }, getAdjustedBalancesSuccess(state, action: PayloadAction) { state.loading.loadingGetAdjustedBalances = false state.adjustedBalances = action.payload }, getAdjustedBalancesFailed(state) { state.loading.loadingGetAdjustedBalances = false }, // ============= increase allowance ============= increaseAllowance(state, _action: PayloadAction) { state.loading.loadingIncreaseAllowance = true }, increaseAllowanceSuccess(state) { state.loading.loadingIncreaseAllowance = false }, increaseAllowanceFailed(state) { state.loading.loadingIncreaseAllowance = false }, // ============= connect wallet ============= connectWallet(state, action: PayloadAction) { state.loading.loadingConnectWallet = true }, connectWalletSuccess(state) { state.loading.loadingConnectWallet = false state.isSuccess.isConnectWalletSuccess = true }, connectWalletFailed(state) { state.loading.loadingConnectWallet = false }, // ============= resend email active ============= resendEmailActive(state, _action: PayloadAction) { state.loading.loadingResendEmailActive = true }, resendEmailActiveSuccess(state) { state.loading.loadingResendEmailActive = false }, resendEmailActiveFailed(state) { state.loading.loadingResendEmailActive = false }, }, }) const { reducer } = userSlice export const { actions: userActions } = userSlice export default reducer