149 lines
3.7 KiB
TypeScript
149 lines
3.7 KiB
TypeScript
// - Import react components
|
|
import { firebaseRef, firebaseAuth } from 'app/firebase/';
|
|
import moment from 'moment';
|
|
import { push } from 'react-router-redux';
|
|
|
|
// -Import domain
|
|
import { User } from 'domain/users';
|
|
import { SocialError } from "domain/common";
|
|
|
|
|
|
// - Import action types
|
|
import { AuthorizeActionType } from 'constants/authorizeActionType';
|
|
|
|
// - Import services
|
|
import { IAuthorizeService } from "services/authorize";
|
|
import { IServiceProvider } from "factories";
|
|
import { ServiceProvide } from "factories";
|
|
|
|
const serviceProvider: IServiceProvider = new ServiceProvide();
|
|
const authorizeService: IAuthorizeService = serviceProvider.createAuthorizeService();
|
|
|
|
// - Import actions
|
|
import * as globalActions from 'actions/globalActions';
|
|
|
|
|
|
/* _____________ CRUD DB _____________ */
|
|
|
|
|
|
/**
|
|
* Log in user in server
|
|
* @param {string} email
|
|
* @param {string} password
|
|
*/
|
|
export const dbLogin = (email: string, password: string) => {
|
|
return (dispatch: any, getState: any) => {
|
|
dispatch(globalActions.showNotificationRequest())
|
|
|
|
return authorizeService.login(email, password).then((result) => {
|
|
dispatch(globalActions.showNotificationSuccess())
|
|
dispatch(login(result.uid))
|
|
dispatch(push('/'))
|
|
}, (error: SocialError) => dispatch(globalActions.showErrorMessage(error.code)))
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Log out user in server
|
|
*/
|
|
export const dbLogout = () => {
|
|
return (dispatch: any, getState: any) => {
|
|
return authorizeService.logout().then((result) => {
|
|
dispatch(logout());
|
|
dispatch(push('/login'));
|
|
|
|
}, (error: SocialError) => dispatch(globalActions.showErrorMessage(error.code)))
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Register user in database
|
|
* @param {object} user
|
|
*/
|
|
export const dbSignup = (user: User) => {
|
|
return (dispatch: any, getState: any) => {
|
|
dispatch(globalActions.showNotificationRequest())
|
|
return authorizeService.registerUser(user).then((result) => {
|
|
dispatch(signup({
|
|
userId: result.uid,
|
|
...user
|
|
}))
|
|
dispatch(push('/'))
|
|
})
|
|
.catch((error: SocialError) => dispatch(globalActions.showErrorMessage(error.code)));
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* Change user's password
|
|
* @param {string} newPassword
|
|
*/
|
|
export const dbUpdatePassword = (newPassword: string) => {
|
|
return (dispatch: any, getState: any) => {
|
|
dispatch(globalActions.showNotificationRequest())
|
|
|
|
return authorizeService.updatePassword(newPassword).then(() => {
|
|
|
|
// Update successful.
|
|
dispatch(globalActions.showNotificationSuccess())
|
|
dispatch(updatePassword())
|
|
dispatch(push('/'))
|
|
})
|
|
.catch((error: SocialError) => {
|
|
// An error happened.
|
|
switch (error.code) {
|
|
case 'auth/requires-recent-login':
|
|
dispatch(globalActions.showErrorMessage(error.code))
|
|
dispatch(dbLogout())
|
|
break;
|
|
default:
|
|
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
|
|
/* _____________ CRUD State _____________ */
|
|
|
|
/**
|
|
* Loing user
|
|
* @param {string} uid
|
|
*/
|
|
export const login = (uid: string) => {
|
|
return {
|
|
type: AuthorizeActionType.LOGIN,
|
|
payload: { authed: true, uid }
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Logout user
|
|
*/
|
|
export const logout = () => {
|
|
return { type: AuthorizeActionType.LOGOUT }
|
|
}
|
|
|
|
/**
|
|
* Register user
|
|
* @param {object} user
|
|
*/
|
|
export const signup = (user: User) => {
|
|
return {
|
|
type: AuthorizeActionType.SIGNUP,
|
|
payload: { ...user }
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Update user's password
|
|
*/
|
|
export const updatePassword = () => {
|
|
return { type: AuthorizeActionType.UPDATE_PASSWORD }
|
|
}
|
|
|