169 lines
3.6 KiB
JavaScript
169 lines
3.6 KiB
JavaScript
// - Import react components
|
|
import moment from 'moment'
|
|
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 _____________ */
|
|
|
|
/**
|
|
* Add notificaition to database
|
|
* @param {object} newNotify user notificaition
|
|
*/
|
|
export const dbAddNotify = (newNotify) => {
|
|
return (dispatch, getState) => {
|
|
|
|
var uid = getState().authorize.uid
|
|
var notify = {
|
|
description: newNotify.description,
|
|
url: newNotify.url,
|
|
notifierUserId: newNotify.notifierUserId,
|
|
isSeen: false
|
|
}
|
|
|
|
var notifyRef = firebaseRef.child(`userNotifies/${newNotify.notifyRecieverUserId}`).push(notify)
|
|
return notifyRef.then(() => {
|
|
dispatch(addNotify())
|
|
}, (error) => dispatch(globalActions.showErrorMessage(error.message)))
|
|
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get all notificaitions from database
|
|
*/
|
|
export const dbGetNotifies = () => {
|
|
return (dispatch, getState) => {
|
|
var uid = getState().authorize.uid
|
|
if (uid) {
|
|
var notifiesRef = firebaseRef.child(`userNotifies/${uid}`);
|
|
|
|
return notifiesRef.on('value', (snapshot) => {
|
|
var notifies = snapshot.val() || {};
|
|
|
|
Object.keys(notifies).forEach((key => {
|
|
if (!getState().user.info[notifies[key].notifierUserId]) {
|
|
dispatch(userActions.dbGetUserInfoByUserId(notifies[key].notifierUserId))
|
|
|
|
}
|
|
}))
|
|
dispatch(addNotifyList(notifies))
|
|
})
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Delete a notificaition from database
|
|
* @param {string} id of notificaition
|
|
*/
|
|
export const dbDeleteNotify = (id) => {
|
|
return (dispatch, getState) => {
|
|
|
|
// Get current user id
|
|
var uid = getState().authorize.uid
|
|
|
|
// Write the new data simultaneously in the list
|
|
var updates = {};
|
|
updates[`userNotifies/${uid}/${id}`] = null;
|
|
|
|
return firebaseRef.update(updates).then((result) => {
|
|
dispatch(deleteNotify(id))
|
|
}, (error) => dispatch(globalActions.showErrorMessage(error.message)))
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* Make seen a notificaition from database
|
|
* @param {string} id of notificaition
|
|
*/
|
|
export const dbSeenNotify = (id) => {
|
|
return (dispatch, getState) => {
|
|
|
|
// Get current user id
|
|
var uid = getState().authorize.uid
|
|
let notify = getState().notify.userNotifies[id]
|
|
let updatedNotify = {
|
|
description: notify.description,
|
|
url: notify.url,
|
|
notifierUserId: notify.notifierUserId,
|
|
isSeen: true
|
|
}
|
|
// Write the new data simultaneously in the list
|
|
var updates = {};
|
|
updates[`userNotifies/${uid}/${id}`] = updatedNotify;
|
|
|
|
return firebaseRef.update(updates).then((result) => {
|
|
dispatch(seenNotify(id))
|
|
}, (error) => dispatch(globalActions.showErrorMessage(error.message)))
|
|
}
|
|
|
|
}
|
|
|
|
/* _____________ CRUD State _____________ */
|
|
|
|
|
|
/**
|
|
* Add notificaition
|
|
* @param {object} data
|
|
*/
|
|
export const addNotify = () => {
|
|
|
|
return {
|
|
type: types.ADD_NOTIFY
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Add notificaition list
|
|
* @param {[object]} userNotifies an array of notificaitions
|
|
*/
|
|
export const addNotifyList = (userNotifies) => {
|
|
|
|
return {
|
|
type: types.ADD_NOTIFY_LIST,
|
|
payload: userNotifies
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Delete a notificaition
|
|
* @param {string} id of notificaition
|
|
*/
|
|
export const deleteNotify = (id) => {
|
|
return { type: types.DELETE_NOTIFY, payload: id }
|
|
|
|
}
|
|
|
|
/**
|
|
* Change notificaition to has seen status
|
|
* @param {string} id of notificaition
|
|
*/
|
|
export const seenNotify = (id) => {
|
|
return { type: types.SEEN_NOTIFY, payload: id }
|
|
|
|
}
|
|
|
|
/**
|
|
* Clear all data
|
|
*/
|
|
export const clearAllNotifications = () => {
|
|
return {
|
|
type: types.CLEAR_ALL_DATA_NOTIFY
|
|
}
|
|
}
|
|
|
|
|