This repository has been archived on 2025-09-03. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
resolver/app/actions/notifyActions.jsx
2017-07-06 11:20:18 +04:30

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
}
}