@@ -14,7 +14,6 @@ import { currentSafeWithNames } from 'src/logic/safe/store/selectors'
1414import { getChainInfo , getExplorerInfo } from 'src/config'
1515import { checksumAddress } from 'src/utils/checksumAddress'
1616import { getWeb3 } from 'src/logic/wallets/getWeb3'
17- import { AddDelegateModal } from 'src/routes/safe/components/Settings/Delegates/AddDelegateModal'
1817import { userAccountSelector } from 'src/logic/wallets/store/selectors'
1918import Table from 'src/components/Table'
2019import { cellWidth } from 'src/components/Table/TableHead'
@@ -23,8 +22,9 @@ import { styles } from './style'
2322import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo'
2423import Row from 'src/components/layout/Row'
2524import ButtonHelper from 'src/components/ButtonHelper'
26- import { grantedSelector } from 'src/routes/safe/container/selector '
25+ import { AddDelegateModal } from 'src/routes/safe/components/Settings/Delegates/AddDelegateModal '
2726import { RemoveDelegateModal } from 'src/routes/safe/components/Settings/Delegates/RemoveDelegateModal'
27+ import { EditDelegateModal } from 'src/routes/safe/components/Settings/Delegates/EditDelegateModal'
2828
2929// TODO: these types will come from the Client GW SDK once #72 is merged
3030type Page < T > = {
@@ -56,10 +56,11 @@ const useStyles = makeStyles(styles)
5656const Delegates = ( ) : ReactElement => {
5757 const { address : safeAddress } = useSelector ( currentSafeWithNames )
5858 const userAccount = useSelector ( userAccountSelector )
59- const granted = useSelector ( grantedSelector )
6059 const { transactionService } = getChainInfo ( )
6160 const [ delegatesList , setDelegatesList ] = useState < DelegateResponse [ 'results' ] > ( [ ] )
6261 const [ addDelegateModalOpen , setAddDelegateModalOpen ] = useState < boolean > ( false )
62+ const [ editDelegateModalOpen , setEditDelegateModalOpen ] = useState < boolean > ( false )
63+ const [ delegateToEdit , setDelegateToEdit ] = useState < string > ( '' )
6364 const [ removeDelegateModalOpen , setRemoveDelegateModalOpen ] = useState < boolean > ( false )
6465 const [ addressToRemove , setAddressToRemove ] = useState < string > ( '' )
6566 const columns = generateColumns ( )
@@ -118,6 +119,32 @@ const Delegates = (): ReactElement => {
118119 } )
119120 }
120121
122+ const handleEditDelegateLabel = async ( label ) => {
123+ // close Edit delegate modal
124+ setEditDelegateModalOpen ( false )
125+
126+ const delegate = checksumAddress ( delegateToEdit )
127+ const signature = await getSignature ( delegate )
128+
129+ const requestOptions = {
130+ method : 'POST' ,
131+ headers : { 'Content-type' : 'application/json' } ,
132+ body : JSON . stringify ( {
133+ safe : safeAddress ,
134+ delegate : delegate ,
135+ signature : signature ,
136+ label : label ,
137+ } ) ,
138+ }
139+
140+ const url = `${ transactionService } /api/v1/safes/${ safeAddress } /delegates/`
141+ fetch ( url , requestOptions )
142+ . then ( ( response ) => response . json ( ) )
143+ . then ( ( ) => {
144+ fetchDelegates ( )
145+ } )
146+ }
147+
121148 const handleRemoveDelegate = async ( address : string ) => {
122149 // close Remove delegate modal
123150 setRemoveDelegateModalOpen ( false )
@@ -187,32 +214,24 @@ const Delegates = (): ReactElement => {
187214 < Row align = "end" className = { classes . actions } >
188215 < ButtonHelper
189216 onClick = { ( ) => {
190- // setSelectedEntry({
191- // entry: row,
192- // isOwnerAddress: userOwner,
193- // })
194- // setEditCreateEntryModalOpen(true)
217+ setDelegateToEdit ( row [ DELEGATE_ADDRESS_ID ] )
218+ setEditDelegateModalOpen ( true )
195219 } }
196220 >
197- < Icon
198- size = "sm"
199- type = "edit"
200- tooltip = "Edit delegate"
201- className = { granted ? classes . editEntryButton : classes . editEntryButtonNonOwner }
202- />
221+ < Icon size = "sm" type = "edit" tooltip = "Edit delegate" className = { classes . editEntryButton } />
203222 </ ButtonHelper >
204223 < ButtonHelper
205224 onClick = { ( ) => {
206- setRemoveDelegateModalOpen ( true )
207225 setAddressToRemove ( row [ DELEGATE_ADDRESS_ID ] )
226+ setRemoveDelegateModalOpen ( true )
208227 } }
209228 >
210229 < Icon
211230 size = "sm"
212231 type = "delete"
213232 color = "error"
214233 tooltip = "Remove delegate"
215- className = { granted ? classes . removeEntryButton : classes . removeEntryButtonNonOwner }
234+ className = { classes . removeEntryButton }
216235 />
217236 </ ButtonHelper >
218237 </ Row >
@@ -228,13 +247,16 @@ const Delegates = (): ReactElement => {
228247 onClose = { ( ) => setAddDelegateModalOpen ( false ) }
229248 onSubmit = { handleAddDelegate }
230249 />
250+ < EditDelegateModal
251+ delegate = { delegateToEdit }
252+ isOpen = { editDelegateModalOpen }
253+ onClose = { ( ) => setEditDelegateModalOpen ( false ) }
254+ onSubmit = { handleEditDelegateLabel }
255+ />
231256 < RemoveDelegateModal
232257 delegateToDelete = { addressToRemove }
233258 isOpen = { removeDelegateModalOpen }
234- onClose = { ( ) => {
235- setRemoveDelegateModalOpen ( false )
236- setAddressToRemove ( '' )
237- } }
259+ onClose = { ( ) => setRemoveDelegateModalOpen ( false ) }
238260 onSubmit = { handleRemoveDelegate }
239261 />
240262 </ StyledBlock >
0 commit comments