Error message if the delete fails
This commit is contained in:
parent
4ec49c4966
commit
76b321accd
11 changed files with 111 additions and 43 deletions
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
)}
|
)}
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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 } })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 } })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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) } }
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue