Skip to content
This repository was archived by the owner on Nov 10, 2023. It is now read-only.

Commit 7501928

Browse files
author
Diogo Soares
committed
remove delegate
1 parent e1a61c8 commit 7501928

File tree

4 files changed

+116
-6
lines changed

4 files changed

+116
-6
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import { Text } from '@gnosis.pm/safe-react-components'
2+
import { ReactElement } from 'react'
3+
4+
import { Modal } from 'src/components/Modal'
5+
import GnoForm from 'src/components/forms/GnoForm'
6+
7+
interface RemoveDelegateModalProps {
8+
delegateToDelete: string
9+
isOpen: boolean
10+
onClose: () => void
11+
onSubmit: (address: string) => void
12+
}
13+
14+
export const RemoveDelegateModal = ({
15+
delegateToDelete,
16+
isOpen,
17+
onClose,
18+
onSubmit,
19+
}: RemoveDelegateModalProps): ReactElement => {
20+
const handleDeleteEntrySubmit = () => {
21+
onSubmit(delegateToDelete)
22+
}
23+
24+
return (
25+
<Modal description="Remove delegate" handleClose={onClose} open={isOpen} title="Remove delegate">
26+
<Modal.Header onClose={onClose}>
27+
<Modal.Header.Title>Remove delegate</Modal.Header.Title>
28+
</Modal.Header>
29+
<GnoForm onSubmit={handleDeleteEntrySubmit}>
30+
{() => (
31+
<>
32+
<Modal.Body>
33+
<Text size="xl">
34+
This action will remove{' '}
35+
<Text size="xl" strong as="span">
36+
{delegateToDelete}
37+
</Text>{' '}
38+
from the Safe delegates list.
39+
</Text>
40+
</Modal.Body>
41+
<Modal.Footer>
42+
<Modal.Footer.Buttons
43+
cancelButtonProps={{ onClick: onClose }}
44+
confirmButtonProps={{ color: 'error', text: 'Delete' }}
45+
/>
46+
</Modal.Footer>
47+
</>
48+
)}
49+
</GnoForm>
50+
</Modal>
51+
)
52+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { createStyles, makeStyles } from '@material-ui/core/styles'
2+
3+
import { lg, md } from 'src/theme/variables'
4+
5+
export const useStyles = makeStyles(
6+
createStyles({
7+
heading: {
8+
padding: lg,
9+
justifyContent: 'space-between',
10+
boxSizing: 'border-box',
11+
height: '74px',
12+
},
13+
manage: {
14+
fontSize: lg,
15+
},
16+
container: {
17+
padding: `${md} ${lg}`,
18+
},
19+
close: {
20+
height: '35px',
21+
width: '35px',
22+
},
23+
}),
24+
)

src/routes/safe/components/Settings/Delegates/columns.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@ export const generateColumns = (): Array<DelegatesTableColumn> => {
1919
const delegateColumn = {
2020
id: DELEGATE_ADDRESS_ID,
2121
label: 'Delegate',
22-
width: 150,
22+
width: 170,
2323
custom: false,
2424
align: 'left',
2525
}
2626

2727
const delegatorColumn = {
2828
id: DELEGATOR_ADDRESS_ID,
2929
label: 'Delegator',
30-
width: 150,
30+
width: 170,
3131
custom: false,
3232
align: 'left',
3333
}

src/routes/safe/components/Settings/Delegates/index.tsx

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo'
2424
import Row from 'src/components/layout/Row'
2525
import ButtonHelper from 'src/components/ButtonHelper'
2626
import { grantedSelector } from 'src/routes/safe/container/selector'
27+
import { RemoveDelegateModal } from 'src/routes/safe/components/Settings/Delegates/RemoveDelegateModal'
2728

2829
// TODO: these types will come from the Client GW SDK once #72 is merged
2930
type Page<T> = {
@@ -59,6 +60,8 @@ const Delegates = (): ReactElement => {
5960
const { transactionService } = getChainInfo()
6061
const [delegatesList, setDelegatesList] = useState<DelegateResponse['results']>([])
6162
const [addDelegateModalOpen, setAddDelegateModalOpen] = useState<boolean>(false)
63+
const [removeDelegateModalOpen, setRemoveDelegateModalOpen] = useState<boolean>(false)
64+
const [addressToRemove, setAddressToRemove] = useState<string>('')
6265
const columns = generateColumns()
6366
const autoColumns = columns.filter(({ custom }) => !custom)
6467

@@ -75,10 +78,10 @@ const Delegates = (): ReactElement => {
7578

7679
const getSignature = async (delegate) => {
7780
const totp = Math.floor(Date.now() / 1000 / 3600)
78-
const web3 = getWeb3()
7981
const msg = checksumAddress(delegate) + totp
80-
8182
const hashMessage = keccak256(fromAscii(msg))
83+
84+
const web3 = getWeb3()
8285
const signature = await web3.eth.sign(hashMessage, userAccount)
8386

8487
return signature
@@ -115,6 +118,28 @@ const Delegates = (): ReactElement => {
115118
})
116119
}
117120

121+
const handleRemoveDelegate = async (address: string) => {
122+
// close Remove delegate modal
123+
setRemoveDelegateModalOpen(false)
124+
125+
const delegate = checksumAddress(address)
126+
const signature = await getSignature(delegate)
127+
128+
const requestOptions = {
129+
method: 'DELETE',
130+
headers: { 'Content-type': 'application/json' },
131+
body: JSON.stringify({
132+
signature: signature,
133+
}),
134+
}
135+
136+
const url = `${transactionService}/api/v1/safes/${safeAddress}/delegates/${delegate}/`
137+
fetch(url, requestOptions).then(() => {
138+
setAddressToRemove('')
139+
fetchDelegates()
140+
})
141+
}
142+
118143
return (
119144
<StyledBlock>
120145
<StyledHeading tag="h2">Manage Safe Delegates</StyledHeading>
@@ -178,8 +203,8 @@ const Delegates = (): ReactElement => {
178203
</ButtonHelper>
179204
<ButtonHelper
180205
onClick={() => {
181-
// setSelectedEntry({ entry: row })
182-
// setDeleteEntryModalOpen(true)
206+
setRemoveDelegateModalOpen(true)
207+
setAddressToRemove(row[DELEGATE_ADDRESS_ID])
183208
}}
184209
>
185210
<Icon
@@ -203,6 +228,15 @@ const Delegates = (): ReactElement => {
203228
onClose={() => setAddDelegateModalOpen(false)}
204229
onSubmit={handleAddDelegate}
205230
/>
231+
<RemoveDelegateModal
232+
delegateToDelete={addressToRemove}
233+
isOpen={removeDelegateModalOpen}
234+
onClose={() => {
235+
setRemoveDelegateModalOpen(false)
236+
setAddressToRemove('')
237+
}}
238+
onSubmit={handleRemoveDelegate}
239+
/>
206240
</StyledBlock>
207241
)
208242
}

0 commit comments

Comments
 (0)