Files
socialhose-php/frontend/app/redux/modules/appState/share/shareForms.js
T
2022-12-09 08:36:26 -06:00

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 (: ****//