Error message if the delete fails

This commit is contained in:
José Oliveira 2021-02-08 10:22:07 +00:00 committed by Josh Harvey
parent 4ec49c4966
commit 76b321accd
11 changed files with 111 additions and 43 deletions

View file

@ -4,6 +4,7 @@ import {
DialogContent, DialogContent,
makeStyles makeStyles
} from '@material-ui/core' } from '@material-ui/core'
// import * as R from 'ramda'
import React from 'react' import React from 'react'
import { Button, IconButton } from 'src/components/buttons' import { Button, IconButton } from 'src/components/buttons'
@ -11,6 +12,8 @@ import { H4, P } from 'src/components/typography'
import { ReactComponent as CloseIcon } from 'src/styling/icons/action/close/zodiac.svg' import { ReactComponent as CloseIcon } from 'src/styling/icons/action/close/zodiac.svg'
import { spacer } from 'src/styling/variables' import { spacer } from 'src/styling/variables'
import ErrorMessage from './ErrorMessage'
const useStyles = makeStyles({ const useStyles = makeStyles({
content: { content: {
width: 434, width: 434,
@ -42,13 +45,15 @@ export const DialogTitle = ({ children, close }) => {
return ( return (
<div className={classes.titleSection}> <div className={classes.titleSection}>
{children} {children}
<IconButton {close && (
size={16} <IconButton
aria-label="close" size={16}
onClick={close} aria-label="close"
className={classes.closeButton}> onClick={close}
<CloseIcon /> className={classes.closeButton}>
</IconButton> <CloseIcon />
</IconButton>
)}
</div> </div>
) )
} }
@ -56,18 +61,31 @@ export const DialogTitle = ({ children, close }) => {
export const DeleteDialog = ({ export const DeleteDialog = ({
title = 'Confirm Delete', title = 'Confirm Delete',
open = false, open = false,
setDeleteDialog,
onConfirmed, onConfirmed,
onDismissed,
item = 'item', item = 'item',
confirmationMessage = `Are you sure you want to delete this ${item}?` confirmationMessage = `Are you sure you want to delete this ${item}?`,
errorMessage = ''
}) => { }) => {
const classes = useStyles() const classes = useStyles()
return ( return (
<Dialog open={open} aria-labelledby="form-dialog-title"> <Dialog open={open} aria-labelledby="form-dialog-title">
<DialogTitle close={() => setDeleteDialog(false)}> <DialogTitle close={() => onDismissed()}>
<H4 className={classes.title}>{title}</H4> <H4 className={classes.title}>{title}</H4>
</DialogTitle> </DialogTitle>
{errorMessage && (
<DialogTitle>
<ErrorMessage>
{errorMessage.split(':').map(error => (
<>
{error}
<br />
</>
))}
</ErrorMessage>
</DialogTitle>
)}
<DialogContent className={classes.content}> <DialogContent className={classes.content}>
{confirmationMessage && <P>{confirmationMessage}</P>} {confirmationMessage && <P>{confirmationMessage}</P>}
</DialogContent> </DialogContent>

View file

@ -1,3 +1,4 @@
/* eslint-disable import/order */
import { makeStyles } from '@material-ui/core' import { makeStyles } from '@material-ui/core'
import classnames from 'classnames' import classnames from 'classnames'
import { Field, useFormikContext } from 'formik' import { Field, useFormikContext } from 'formik'
@ -36,7 +37,8 @@ const ActionCol = ({ disabled, editing }) => {
toggleWidth, toggleWidth,
forceAdd, forceAdd,
clearError, clearError,
actionColSize actionColSize,
error
} = useContext(TableCtx) } = useContext(TableCtx)
const disableEdit = disabled || (disableRowEdit && disableRowEdit(values)) const disableEdit = disabled || (disableRowEdit && disableRowEdit(values))
@ -48,8 +50,9 @@ const ActionCol = ({ disabled, editing }) => {
const [deleteDialog, setDeleteDialog] = useState(false) const [deleteDialog, setDeleteDialog] = useState(false)
const onConfirmed = () => { const onConfirmed = () => {
onDelete(values.id) onDelete(values.id).then(res => {
setDeleteDialog(false) if (!R.isNil(res)) setDeleteDialog(false)
})
} }
return ( return (
@ -93,6 +96,11 @@ const ActionCol = ({ disabled, editing }) => {
open={deleteDialog} open={deleteDialog}
setDeleteDialog={setDeleteDialog} setDeleteDialog={setDeleteDialog}
onConfirmed={onConfirmed} onConfirmed={onConfirmed}
onDismissed={() => {
setDeleteDialog(false)
clearError()
}}
errorMessage={error}
/> />
</Td> </Td>
)} )}

View file

@ -74,9 +74,14 @@ const Blacklist = () => {
display: 'Bitcoin' display: 'Bitcoin'
}) })
const [errorMsg, setErrorMsg] = useState(null) const [errorMsg, setErrorMsg] = useState(null)
const [deleteDialog, setDeleteDialog] = useState(false)
const [deleteEntry] = useMutation(DELETE_ROW, { const [deleteEntry] = useMutation(DELETE_ROW, {
onError: () => console.error('Error while deleting row'), onError: ({ message }) => {
const errorMessage = message ?? 'Error while deleting row'
setErrorMsg(errorMessage)
},
onCompleted: () => setDeleteDialog(false),
refetchQueries: () => ['getBlacklistData'] refetchQueries: () => ['getBlacklistData']
}) })
@ -181,6 +186,10 @@ const Blacklist = () => {
data={formattedData} data={formattedData}
selectedCoin={clickedItem} selectedCoin={clickedItem}
handleDeleteEntry={handleDeleteEntry} handleDeleteEntry={handleDeleteEntry}
errorMessage={errorMsg}
setErrorMessage={setErrorMsg}
deleteDialog={deleteDialog}
setDeleteDialog={setDeleteDialog}
/> />
</div> </div>
</Grid> </Grid>

View file

@ -13,20 +13,19 @@ import styles from './Blacklist.styles'
const useStyles = makeStyles(styles) const useStyles = makeStyles(styles)
const BlacklistTable = ({ data, selectedCoin, handleDeleteEntry }) => { const BlacklistTable = ({
data,
selectedCoin,
handleDeleteEntry,
errorMessage,
setErrorMessage,
deleteDialog,
setDeleteDialog
}) => {
const classes = useStyles() const classes = useStyles()
const [deleteDialog, setDeleteDialog] = useState(false)
const [toBeDeleted, setToBeDeleted] = useState() const [toBeDeleted, setToBeDeleted] = useState()
const onConfirmed = () => {
handleDeleteEntry(
R.path(['cryptoCode'], toBeDeleted),
R.path(['address'], toBeDeleted)
)
setDeleteDialog(false)
}
const elements = [ const elements = [
{ {
name: 'address', name: 'address',
@ -72,8 +71,18 @@ const BlacklistTable = ({ data, selectedCoin, handleDeleteEntry }) => {
/> />
<DeleteDialog <DeleteDialog
open={deleteDialog} open={deleteDialog}
setDeleteDialog={setDeleteDialog} onDismissed={() => {
onConfirmed={onConfirmed} setDeleteDialog(false)
setErrorMessage(null)
}}
onConfirmed={() => {
setErrorMessage(null)
handleDeleteEntry(
R.path(['cryptoCode'], toBeDeleted),
R.path(['address'], toBeDeleted)
)
}}
errorMessage={errorMessage}
/> />
</> </>
) )

View file

@ -38,9 +38,11 @@ const removeCoinFromOverride = crypto => override =>
const Commissions = ({ name: SCREEN_KEY }) => { const Commissions = ({ name: SCREEN_KEY }) => {
const [showMachines, setShowMachines] = useState(false) const [showMachines, setShowMachines] = useState(false)
const [error, setError] = useState(null)
const { data } = useQuery(GET_DATA) const { data } = useQuery(GET_DATA)
const [saveConfig, { error }] = useMutation(SAVE_CONFIG, { const [saveConfig] = useMutation(SAVE_CONFIG, {
refetchQueries: () => ['getData'] refetchQueries: () => ['getData'],
onError: error => setError(error)
}) })
const config = data?.config && fromNamespace(SCREEN_KEY)(data.config) const config = data?.config && fromNamespace(SCREEN_KEY)(data.config)
@ -57,6 +59,7 @@ const Commissions = ({ name: SCREEN_KEY }) => {
const saveOverrides = it => { const saveOverrides = it => {
const config = toNamespace(SCREEN_KEY)(it) const config = toNamespace(SCREEN_KEY)(it)
setError(null)
return saveConfig({ variables: { config } }) return saveConfig({ variables: { config } })
} }

View file

@ -100,12 +100,14 @@ const FiatCurrencyChangeAlert = ({ open, close, save }) => {
const Locales = ({ name: SCREEN_KEY }) => { const Locales = ({ name: SCREEN_KEY }) => {
const [wizard, setWizard] = useState(false) const [wizard, setWizard] = useState(false)
const [onChangeFunction, setOnChangeFunction] = useState(null) const [onChangeFunction, setOnChangeFunction] = useState(null)
const [error, setError] = useState(null)
const [isEditingDefault, setEditingDefault] = useState(false) const [isEditingDefault, setEditingDefault] = useState(false)
const [isEditingOverrides, setEditingOverrides] = useState(false) const [isEditingOverrides, setEditingOverrides] = useState(false)
const { data } = useQuery(GET_DATA) const { data } = useQuery(GET_DATA)
const [saveConfig, { error }] = useMutation(SAVE_CONFIG, { const [saveConfig] = useMutation(SAVE_CONFIG, {
onCompleted: () => setWizard(false), onCompleted: () => setWizard(false),
refetchQueries: () => ['getData'] refetchQueries: () => ['getData'],
onError: error => setError(error)
}) })
const [dataToSave, setDataToSave] = useState(null) const [dataToSave, setDataToSave] = useState(null)
@ -138,6 +140,7 @@ const Locales = ({ name: SCREEN_KEY }) => {
const saveOverrides = it => { const saveOverrides = it => {
const config = toNamespace(SCREEN_KEY)(it) const config = toNamespace(SCREEN_KEY)(it)
setError(null)
return saveConfig({ variables: { config } }) return saveConfig({ variables: { config } })
} }

View file

@ -53,11 +53,6 @@ const PromoCodes = () => {
const [deleteDialog, setDeleteDialog] = useState(false) const [deleteDialog, setDeleteDialog] = useState(false)
const [toBeDeleted, setToBeDeleted] = useState() const [toBeDeleted, setToBeDeleted] = useState()
const onConfirmed = () => {
deleteCode(toBeDeleted)
setDeleteDialog(false)
}
const [showModal, setShowModal] = useState(false) const [showModal, setShowModal] = useState(false)
const [errorMsg, setErrorMsg] = useState(null) const [errorMsg, setErrorMsg] = useState(null)
const toggleModal = () => setShowModal(!showModal) const toggleModal = () => setShowModal(!showModal)
@ -65,6 +60,11 @@ const PromoCodes = () => {
const { data: codeResponse, loading } = useQuery(GET_PROMO_CODES) const { data: codeResponse, loading } = useQuery(GET_PROMO_CODES)
const [deleteCode] = useMutation(DELETE_CODE, { const [deleteCode] = useMutation(DELETE_CODE, {
onError: ({ message }) => {
const errorMessage = message ?? 'Error while deleting row'
setErrorMsg(errorMessage)
},
onCompleted: () => setDeleteDialog(false),
refetchQueries: () => ['promoCodes'] refetchQueries: () => ['promoCodes']
}) })
@ -152,8 +152,15 @@ const PromoCodes = () => {
/> />
<DeleteDialog <DeleteDialog
open={deleteDialog} open={deleteDialog}
setDeleteDialog={setDeleteDialog} onDismissed={() => {
onConfirmed={onConfirmed} setDeleteDialog(false)
setErrorMsg(null)
}}
onConfirmed={() => {
setErrorMsg(null)
deleteCode(toBeDeleted)
}}
errorMessage={errorMsg}
/> />
</> </>
)} )}

View file

@ -57,7 +57,7 @@ const Notifications = ({
const [saveConfig] = useMutation(SAVE_CONFIG, { const [saveConfig] = useMutation(SAVE_CONFIG, {
refetchQueries: ['getData'], refetchQueries: ['getData'],
onCompleted: () => setEditingKey(null), onCompleted: () => setEditingKey(null),
onError: error => setError({ error }) onError: error => setError(error)
}) })
const config = fromNamespace(SCREEN_KEY)(data?.config) const config = fromNamespace(SCREEN_KEY)(data?.config)

View file

@ -19,6 +19,7 @@ const CryptoBalanceOverrides = ({ section }) => {
cryptoCurrencies = [], cryptoCurrencies = [],
data, data,
save, save,
error,
currency, currency,
isDisabled, isDisabled,
setEditing setEditing
@ -135,6 +136,7 @@ const CryptoBalanceOverrides = ({ section }) => {
<EditableTable <EditableTable
name={NAME} name={NAME}
title="Overrides" title="Overrides"
error={error?.message}
enableDelete enableDelete
enableEdit enableEdit
enableCreate enableCreate

View file

@ -15,9 +15,14 @@ const MACHINE_KEY = 'machine'
const NAME = 'fiatBalanceOverrides' const NAME = 'fiatBalanceOverrides'
const FiatBalanceOverrides = ({ section }) => { const FiatBalanceOverrides = ({ section }) => {
const { machines = [], data, save, isDisabled, setEditing } = useContext( const {
NotificationsCtx machines = [],
) data,
save,
isDisabled,
setEditing,
error
} = useContext(NotificationsCtx)
const setupValues = data?.fiatBalanceOverrides ?? [] const setupValues = data?.fiatBalanceOverrides ?? []
const innerSetEditing = it => setEditing(NAME, it) const innerSetEditing = it => setEditing(NAME, it)
@ -121,6 +126,7 @@ const FiatBalanceOverrides = ({ section }) => {
<EditableTable <EditableTable
name={NAME} name={NAME}
title="Overrides" title="Overrides"
error={error?.message}
enableDelete enableDelete
enableEdit enableEdit
enableCreate enableCreate

View file

@ -41,10 +41,12 @@ const Triggers = () => {
const complianceConfig = const complianceConfig =
data?.config && fromNamespace('compliance')(data.config) data?.config && fromNamespace('compliance')(data.config)
const rejectAddressReuse = complianceConfig?.rejectAddressReuse ?? false const rejectAddressReuse = complianceConfig?.rejectAddressReuse ?? false
const [error, setError] = useState(null)
const [saveConfig, { error }] = useMutation(SAVE_CONFIG, { const [saveConfig] = useMutation(SAVE_CONFIG, {
onCompleted: () => setWizard(false), onCompleted: () => setWizard(false),
refetchQueries: () => ['getData'] refetchQueries: () => ['getData'],
onError: error => setError(error)
}) })
const add = rawConfig => { const add = rawConfig => {
@ -60,6 +62,7 @@ const Triggers = () => {
} }
const save = config => { const save = config => {
setError(null)
return saveConfig({ return saveConfig({
variables: { config: { triggers: toServer(config.triggers) } } variables: { config: { triggers: toServer(config.triggers) } }
}) })