131 lines
4.1 KiB
JavaScript
131 lines
4.1 KiB
JavaScript
import {tokenInject} from '../../../utils/common'
|
|
import {
|
|
NOTIFICATION_SUBSCREENS, RECEIVER_SUBSCREENS, switchShareSubScreen,
|
|
NOTIFICATION_TABLES
|
|
} from './tabs'
|
|
import { addAlert } from '../../common/alerts'
|
|
import { getDefaultTheme } from './emailThemes/themes'
|
|
|
|
import myEmailsTable from './tables/myEmailsTable'
|
|
import publishedEmailsTable from './tables/publishedEmailsTable'
|
|
import emailsTable from './tables/emailsTable'
|
|
|
|
import alertForm from './forms/alertForm'
|
|
import newsletterForm from './forms/newsletterForm'
|
|
import recipientForm from './forms/recipientForm'
|
|
import groupForm from './forms/groupForm'
|
|
|
|
import * as notificationsApi from '../../../../api/notificationsApi'
|
|
|
|
const tablePendingActions = {
|
|
[NOTIFICATION_TABLES.MY_EMAILS]: myEmailsTable.asyncActionPending,
|
|
[NOTIFICATION_TABLES.PUBLISHED]: publishedEmailsTable.asyncActionPending,
|
|
emails: emailsTable.asyncActionPending
|
|
}
|
|
|
|
//**** ACTIONS ****//
|
|
|
|
const loadTablePending = (type, isPending) => {
|
|
return tablePendingActions[type](isPending)
|
|
}
|
|
|
|
const startEditNotification = (notification, table, tab = 'notifications') => {
|
|
return tokenInject((dispatch, getState, token) => {
|
|
if (notification.type === 'alert') {
|
|
|
|
dispatch(loadTablePending(table, true))
|
|
|
|
dispatch(getDefaultTheme())
|
|
.then((defaultTheme) => {
|
|
return notificationsApi.getItem(token, null, notification.id)
|
|
.then((fullNotification) => {
|
|
dispatch(loadTablePending(table, false))
|
|
dispatch(alertForm.actions.fillForm(fullNotification, defaultTheme))
|
|
dispatch(switchShareSubScreen(tab, NOTIFICATION_SUBSCREENS.ALERT_FORM))
|
|
})
|
|
})
|
|
.catch((errors) => {
|
|
dispatch(loadTablePending(table, false))
|
|
dispatch(addAlert(errors))
|
|
})
|
|
}
|
|
})
|
|
}
|
|
|
|
const startCreateNotification = (type, table, tab = 'notifications') => {
|
|
return (dispatch, getState) => {
|
|
|
|
const recipient = getState().getIn(['common', 'auth', 'user', 'recipient']);
|
|
if (!recipient) {
|
|
return dispatch(addAlert('Please create at least one recipient from Manage Recipients to create an alert.'));
|
|
}
|
|
const myself = recipient.toJS()
|
|
const defaultRecipient = {
|
|
value: myself.id,
|
|
label: `${myself.firstName} ${myself.lastName} <${myself.email}>`
|
|
}
|
|
|
|
dispatch(loadTablePending(table, true))
|
|
dispatch(getDefaultTheme())
|
|
.then(() => {
|
|
dispatch(loadTablePending(table, false))
|
|
if (type === NOTIFICATION_SUBSCREENS.ALERT_FORM) {
|
|
dispatch(alertForm.actions.clearForm())
|
|
dispatch(alertForm.actions.changeRecipients([defaultRecipient]))
|
|
dispatch(switchShareSubScreen(tab, NOTIFICATION_SUBSCREENS.ALERT_FORM))
|
|
}
|
|
else if (type === NOTIFICATION_SUBSCREENS.NEWSLETTER_FORM) {
|
|
dispatch(newsletterForm.actions.clearForm())
|
|
dispatch(switchShareSubScreen(tab, NOTIFICATION_SUBSCREENS.NEWSLETTER_FORM))
|
|
}
|
|
})
|
|
.catch((errors) => {
|
|
dispatch(loadTablePending(table, false))
|
|
dispatch(addAlert(errors))
|
|
})
|
|
}
|
|
}
|
|
|
|
const startCreateRecipient = () => {
|
|
return (dispatch) => {
|
|
dispatch(switchShareSubScreen('recipients', RECEIVER_SUBSCREENS.RECIPIENT_FORM))
|
|
dispatch(recipientForm.actions.clearForm())
|
|
}
|
|
}
|
|
|
|
const startCreateGroup = () => {
|
|
return (dispatch) => {
|
|
dispatch(switchShareSubScreen('recipients', RECEIVER_SUBSCREENS.GROUP_FORM))
|
|
dispatch(groupForm.actions.clearForm())
|
|
}
|
|
}
|
|
|
|
const startEditRecipient = (item) => {
|
|
console.log('start edit')
|
|
return (dispatch) => {
|
|
dispatch(switchShareSubScreen('recipients', RECEIVER_SUBSCREENS.RECIPIENT_FORM))
|
|
dispatch(recipientForm.actions.clearForm())
|
|
dispatch(recipientForm.actions.fillForm(item))
|
|
}
|
|
}
|
|
|
|
const startEditGroup = (item) => {
|
|
return (dispatch) => {
|
|
dispatch(switchShareSubScreen('recipients', RECEIVER_SUBSCREENS.GROUP_FORM))
|
|
dispatch(groupForm.actions.clearForm())
|
|
dispatch(groupForm.actions.fillForm(item))
|
|
}
|
|
}
|
|
|
|
export const actions = {
|
|
startEditNotification,
|
|
startCreateNotification,
|
|
startCreateRecipient,
|
|
startCreateGroup,
|
|
startEditRecipient,
|
|
startEditGroup
|
|
}
|
|
|
|
//**** This module has no state (: ****//
|
|
|