96 lines
2.4 KiB
JavaScript
96 lines
2.4 KiB
JavaScript
import { makeStyles } from '@material-ui/core'
|
|
import * as R from 'ramda'
|
|
import React, { useContext } from 'react'
|
|
|
|
import {
|
|
Table,
|
|
THead,
|
|
TBody,
|
|
Tr,
|
|
Td,
|
|
Th
|
|
} from 'src/components/fake-table/Table'
|
|
import { Switch } from 'src/components/inputs'
|
|
import { fromNamespace, toNamespace } from 'src/utils/config'
|
|
import { startCase } from 'src/utils/string'
|
|
|
|
import NotificationsCtx from '../NotificationsContext'
|
|
|
|
const channelSize = 229
|
|
const sizes = {
|
|
balance: 152,
|
|
transactions: 184,
|
|
compliance: 178,
|
|
errors: 142,
|
|
security: 152,
|
|
active: 263
|
|
}
|
|
|
|
const Row = ({ namespace, forceDisable, shouldUpperCase }) => {
|
|
const { data: rawData, save: rawSave } = useContext(NotificationsCtx)
|
|
|
|
const save = R.compose(rawSave(null), toNamespace(namespace))
|
|
const data = fromNamespace(namespace)(rawData)
|
|
|
|
const disabled = forceDisable || !data || !data.active
|
|
|
|
const Cell = ({ name, disabled }) => {
|
|
const value = !!(data && data[name])
|
|
|
|
return (
|
|
<Td width={sizes[name]} textAlign="center">
|
|
<Switch
|
|
disabled={disabled}
|
|
checked={value}
|
|
onChange={event => {
|
|
save({ [name]: event.target.checked })
|
|
}}
|
|
value={value}
|
|
/>
|
|
</Td>
|
|
)
|
|
}
|
|
|
|
return (
|
|
<Tr>
|
|
<Td width={channelSize}>
|
|
{shouldUpperCase ? R.toUpper(namespace) : startCase(namespace)}
|
|
</Td>
|
|
<Cell name="balance" disabled={disabled} />
|
|
<Cell name="transactions" disabled={disabled} />
|
|
<Cell name="compliance" disabled={disabled} />
|
|
<Cell name="errors" disabled={disabled} />
|
|
<Cell name="security" disabled={disabled} />
|
|
<Cell name="active" disabled={forceDisable} />
|
|
</Tr>
|
|
)
|
|
}
|
|
|
|
const useStyles = makeStyles({
|
|
wizardTable: {
|
|
width: 930
|
|
}
|
|
})
|
|
const Setup = ({ wizard, forceDisable }) => {
|
|
const widthAdjust = wizard ? 20 : 0
|
|
const classes = useStyles()
|
|
return (
|
|
<Table className={wizard ? classes.wizardTable : null}>
|
|
<THead>
|
|
<Th width={channelSize - widthAdjust}>Channel</Th>
|
|
{Object.keys(sizes).map(it => (
|
|
<Th key={it} width={sizes[it] - widthAdjust} textAlign="center">
|
|
{startCase(it)}
|
|
</Th>
|
|
))}
|
|
</THead>
|
|
<TBody>
|
|
<Row namespace="email" forceDisable={forceDisable} />
|
|
<Row namespace="sms" shouldUpperCase forceDisable={forceDisable} />
|
|
<Row namespace="notificationCenter" forceDisable={forceDisable} />
|
|
</TBody>
|
|
</Table>
|
|
)
|
|
}
|
|
|
|
export default Setup
|