192 lines
4.1 KiB
JavaScript
192 lines
4.1 KiB
JavaScript
// - Import react components
|
|
import {firebaseRef} from 'app/firebase/'
|
|
|
|
// - Import action types
|
|
import * as types from 'actionTypes'
|
|
|
|
// - Import actions
|
|
import * as globalActions from 'globalActions'
|
|
import * as userActions from 'userActions'
|
|
|
|
|
|
|
|
/* _____________ CRUD DB _____________ */
|
|
|
|
|
|
/**
|
|
* Get user info from database
|
|
*/
|
|
export const dbGetUserInfo = () => {
|
|
return (dispatch, getState) => {
|
|
var uid = getState().authorize.uid
|
|
if (uid) {
|
|
var userInfoRef = firebaseRef.child(`users/${uid}/info`);
|
|
|
|
return userInfoRef.once('value').then((snapshot) => {
|
|
var userInfo = snapshot.val() || {};
|
|
dispatch(addUserInfo(uid,userInfo))
|
|
},error => console.log(error));
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get user info from database
|
|
* @param {string} uid
|
|
*/
|
|
export const dbGetUserInfoByUserId = (uid,sw) => {
|
|
return (dispatch, getState) => {
|
|
if (uid) {
|
|
var userInfoRef = firebaseRef.child(`users/${uid}/info`);
|
|
|
|
return userInfoRef.once('value').then((snapshot) => {
|
|
var userInfo = snapshot.val() || {};
|
|
dispatch(addUserInfo(uid,userInfo))
|
|
switch (sw) {
|
|
case 'header':
|
|
dispatch(globalActions.setHeaderTitle(userInfo.fullName))
|
|
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
},error => console.log(error));
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Updata user information
|
|
* @param {object} newInfo
|
|
*/
|
|
export const dbUpdateUserInfo = (newInfo) => {
|
|
return (dispatch,getState) => {
|
|
|
|
// Get current user id
|
|
var uid = getState().authorize.uid
|
|
|
|
// Write the new data simultaneously in the list
|
|
let updates = {};
|
|
let info = getState().user.info[uid]
|
|
let updatedInfo = {
|
|
avatar: newInfo.avatar || info.avatar || '',
|
|
banner:newInfo.banner || info.banner || '',
|
|
email: newInfo.email || info.email || '',
|
|
fullName: newInfo.fullName || info.fullName || '',
|
|
tagLine: newInfo.tagLine || info.tagLine || ''
|
|
}
|
|
updates[`users/${uid}/info`] = updatedInfo
|
|
return firebaseRef.update(updates).then((result) => {
|
|
|
|
dispatch(updateUserInfo(uid,updatedInfo))
|
|
dispatch(closeEditProfile())
|
|
}, (error) => {
|
|
dispatch(globalActions.showErrorMessage(error.message))
|
|
})
|
|
}
|
|
|
|
}
|
|
|
|
// - Get people info from database
|
|
export const dbGetPeopleInfo = () => {
|
|
return (dispatch, getState) => {
|
|
var uid = getState().authorize.uid
|
|
if (uid) {
|
|
var peopleRef = firebaseRef.child(`users`);
|
|
|
|
return peopleRef.once('value').then((snapshot) => {
|
|
let people = snapshot.val() || {};
|
|
|
|
let parsedPeople = {};
|
|
Object.keys(people).forEach((userId) => {
|
|
if(userId !== uid){
|
|
parsedPeople[userId]={
|
|
...people[userId].info
|
|
}}
|
|
|
|
})
|
|
dispatch(addPeopleInfo(parsedPeople))
|
|
},error => console.log(error));
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
/* _____________ CRUD State _____________ */
|
|
|
|
|
|
/**
|
|
* Add user information
|
|
* @param {string} uid is the user identifier
|
|
* @param {object} info is the information about user
|
|
*/
|
|
export const addUserInfo = (uid,info) => {
|
|
return{
|
|
type: types.ADD_USER_INFO,
|
|
payload: {uid,info}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Add people information
|
|
* @param {[object]} infoList is the lst of information about users
|
|
*/
|
|
export const addPeopleInfo = (infoList) => {
|
|
return{
|
|
type: types.ADD_PEOPLE_INFO,
|
|
payload: infoList
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Update user information
|
|
* @param {string} uid is the user identifier
|
|
* @param {object} info is the information about user
|
|
*/
|
|
export const updateUserInfo = (uid,info) => {
|
|
return{
|
|
type: types.UPDATE_USER_INFO,
|
|
payload: {uid,info}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* User info
|
|
* @param {object} info
|
|
*/
|
|
export const userInfo = (info) => {
|
|
return{
|
|
type: types.USER_INFO,
|
|
info
|
|
}
|
|
}
|
|
|
|
export const clearAllData = () => {
|
|
return {
|
|
type: types.CLEAR_ALL_DATA_USER
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Open edit profile
|
|
*/
|
|
export const openEditProfile = () => {
|
|
return{
|
|
type: types.OPEN_EDIT_PROFILE
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Close edit profile
|
|
*/
|
|
export const closeEditProfile = () => {
|
|
return{
|
|
type: types.CLOSE_EDIT_PROFILE
|
|
}
|
|
|
|
} |