feat: mailgun setup in notifications

This commit is contained in:
Nikola Ubavic 2022-03-08 14:40:24 +01:00
parent 4517a373cc
commit c4ca91b59b
2 changed files with 86 additions and 43 deletions

View file

@ -11,6 +11,7 @@ import twilioSchema from 'src/pages/Services/schemas/twilio'
import { fromNamespace, toNamespace, namespaces } from 'src/utils/config' import { fromNamespace, toNamespace, namespaces } from 'src/utils/config'
import Section from '../../components/layout/Section' import Section from '../../components/layout/Section'
import mailgunSchema from '../Services/schemas/mailgun'
import NotificationsCtx from './NotificationsContext' import NotificationsCtx from './NotificationsContext'
import CryptoBalanceAlerts from './sections/CryptoBalanceAlerts' import CryptoBalanceAlerts from './sections/CryptoBalanceAlerts'
@ -64,6 +65,7 @@ const Notifications = ({
const [error, setError] = useState(null) const [error, setError] = useState(null)
const [editingKey, setEditingKey] = useState(null) const [editingKey, setEditingKey] = useState(null)
const [smsSetupPopup, setSmsSetupPopup] = useState(false) const [smsSetupPopup, setSmsSetupPopup] = useState(false)
const [emailSetupPopup, setEmailSetupPopup] = useState(false)
const { data, loading } = useQuery(GET_INFO) const { data, loading } = useQuery(GET_INFO)
@ -74,7 +76,10 @@ const Notifications = ({
}) })
const [saveAccount] = useMutation(SAVE_ACCOUNT, { const [saveAccount] = useMutation(SAVE_ACCOUNT, {
onCompleted: () => setSmsSetupPopup(false), onCompleted: () => {
setSmsSetupPopup(false)
setEmailSetupPopup(false)
},
refetchQueries: ['getData'], refetchQueries: ['getData'],
onError: error => setError(error) onError: error => setError(error)
}) })
@ -83,6 +88,7 @@ const Notifications = ({
const machines = data?.machines const machines = data?.machines
const cryptoCurrencies = data?.cryptoCurrencies const cryptoCurrencies = data?.cryptoCurrencies
const twilioAvailable = R.has('twilio', data?.accounts || {}) const twilioAvailable = R.has('twilio', data?.accounts || {})
const mailgunAvailable = R.has('mailgun', data?.accounts || {})
const currency = R.path(['fiatCurrency'])( const currency = R.path(['fiatCurrency'])(
fromNamespace(namespaces.LOCALE)(data?.config) fromNamespace(namespaces.LOCALE)(data?.config)
@ -110,6 +116,14 @@ const Notifications = ({
}) })
} }
const mailgunSave = it => {
setError(null)
R.compose(save(null), toNamespace('email'))({ active: true })
return saveAccount({
variables: { accounts: { mailgun: it } }
})
}
const isEditing = key => editingKey === key const isEditing = key => editingKey === key
const isDisabled = key => editingKey && editingKey !== key const isDisabled = key => editingKey && editingKey !== key
@ -126,49 +140,55 @@ const Notifications = ({
machines, machines,
cryptoCurrencies, cryptoCurrencies,
twilioAvailable, twilioAvailable,
setSmsSetupPopup setSmsSetupPopup,
mailgunAvailable,
setEmailSetupPopup
} }
return ( return (
!loading && ( !loading && (
<NotificationsCtx.Provider value={contextValue}> <>
{displayTitle && <TitleSection title="Notifications" />} <NotificationsCtx.Provider value={contextValue}>
{displaySetup && ( {displayTitle && <TitleSection title="Notifications" />}
<Section title="Setup" error={error && !section}> {displaySetup && (
<Setup forceDisable={!!editingKey} wizard={wizard} /> <Section title="Setup" error={error && !section}>
</Section> <Setup forceDisable={!!editingKey} wizard={wizard} />
)} </Section>
{displayTransactionAlerts && ( )}
<Section title="Transaction alerts" error={error && section === 'tx'}> {displayTransactionAlerts && (
<TransactionAlerts section="tx" fieldWidth={FIELDS_WIDTH} /> <Section
</Section> title="Transaction alerts"
)} error={error && section === 'tx'}>
{displayFiatAlerts && ( <TransactionAlerts section="tx" fieldWidth={FIELDS_WIDTH} />
<Section </Section>
title="Fiat balance alerts" )}
error={error && section === 'fiat'}> {displayFiatAlerts && (
<FiatBalanceAlerts section="fiat" max={100} fieldWidth={50} /> <Section
{displayOverrides && ( title="Fiat balance alerts"
<FiatBalanceOverrides error={error && section === 'fiat'}>
config={fromNamespace(namespaces.CASH_OUT)(data?.config)} <FiatBalanceAlerts section="fiat" max={100} fieldWidth={50} />
section="fiat" {displayOverrides && (
/> <FiatBalanceOverrides
)} config={fromNamespace(namespaces.CASH_OUT)(data?.config)}
</Section> section="fiat"
)} />
{displayCryptoAlerts && ( )}
<Section </Section>
title="Crypto balance alerts" )}
error={error && section === 'crypto'}> {displayCryptoAlerts && (
<CryptoBalanceAlerts section="crypto" fieldWidth={FIELDS_WIDTH} /> <Section
{displayOverrides && ( title="Crypto balance alerts"
<CryptoBalanceOverrides error={error && section === 'crypto'}>
section="crypto" <CryptoBalanceAlerts section="crypto" fieldWidth={FIELDS_WIDTH} />
fieldWidth={FIELDS_WIDTH} {displayOverrides && (
/> <CryptoBalanceOverrides
)} section="crypto"
</Section> fieldWidth={FIELDS_WIDTH}
)} />
)}
</Section>
)}
</NotificationsCtx.Provider>
{smsSetupPopup && ( {smsSetupPopup && (
<Modal <Modal
title={`Configure Twilio`} title={`Configure Twilio`}
@ -186,7 +206,24 @@ const Notifications = ({
/> />
</Modal> </Modal>
)} )}
</NotificationsCtx.Provider> {emailSetupPopup && (
<Modal
title={`Configure Mailgun`}
width={478}
handleClose={() => setEmailSetupPopup(false)}
open={true}>
<P>
In order for the mail notifications to work, you'll first need to
configure Mailgun.
</P>
<FormRenderer
save={mailgunSave}
elements={mailgunSchema.elements}
validationSchema={mailgunSchema.getValidationSchema}
/>
</Modal>
)}
</>
) )
) )
} }

View file

@ -85,7 +85,9 @@ const Setup = ({ wizard, forceDisable }) => {
data: rawData, data: rawData,
save: rawSave, save: rawSave,
twilioAvailable, twilioAvailable,
setSmsSetupPopup setSmsSetupPopup,
mailgunAvailable,
setEmailSetupPopup
} = useContext(NotificationsCtx) } = useContext(NotificationsCtx)
const namespaces = [ const namespaces = [
@ -93,7 +95,11 @@ const Setup = ({ wizard, forceDisable }) => {
name: 'email', name: 'email',
forceDisable: forceDisable, forceDisable: forceDisable,
shouldUpperCase: false, shouldUpperCase: false,
onActivation: () => true onActivation: () => {
if (mailgunAvailable) return true
setEmailSetupPopup(true)
return false
}
}, },
{ {
name: 'sms', name: 'sms',