11import ReverseRegistrarAbi from 'apps/web/src/abis/ReverseRegistrarAbi' ;
22import {
33 USERNAME_L2_RESOLVER_ADDRESSES ,
4+ USERNAME_L2_REVERSE_REGISTRAR_ADDRESSES ,
45 USERNAME_REVERSE_REGISTRAR_ADDRESSES ,
56} from 'apps/web/src/addresses/usernames' ;
67import useBasenameChain from 'apps/web/src/hooks/useBasenameChain' ;
@@ -11,6 +12,9 @@ import useBaseEnsName from 'apps/web/src/hooks/useBaseEnsName';
1112import { useErrors } from 'apps/web/contexts/Errors' ;
1213import useWriteContractWithReceipt from 'apps/web/src/hooks/useWriteContractWithReceipt' ;
1314import { useUsernameProfile } from 'apps/web/src/components/Basenames/UsernameProfileContext' ;
15+ import useWriteContractsWithLogs from 'apps/web/src/hooks/useWriteContractsWithLogs' ;
16+ import useCapabilitiesSafe from 'apps/web/src/hooks/useCapabilitiesSafe' ;
17+ import L2ReverseRegistrarAbi from 'apps/web/src/abis/L2ReverseRegistrarAbi' ;
1418
1519/*
1620 A hook to set a name as primary for resolution.
@@ -31,6 +35,9 @@ export default function useSetPrimaryBasename({ secondaryUsername }: UseSetPrima
3135
3236 const { currentWalletIsProfileEditor } = useUsernameProfile ( ) ;
3337 const { basenameChain : secondaryUsernameChain } = useBasenameChain ( secondaryUsername ) ;
38+ const { paymasterService : paymasterServiceEnabled } = useCapabilitiesSafe ( {
39+ chainId : secondaryUsernameChain . id ,
40+ } ) ;
3441
3542 // Get current primary username
3643 // Note: This is sometimes undefined
@@ -52,6 +59,12 @@ export default function useSetPrimaryBasename({ secondaryUsername }: UseSetPrima
5259 eventName : 'update_primary_name' ,
5360 } ) ;
5461
62+ const { initiateBatchCalls, batchCallsIsSuccess, batchCallsIsLoading } =
63+ useWriteContractsWithLogs ( {
64+ chain : secondaryUsernameChain ,
65+ eventName : 'update_primary_name' ,
66+ } ) ;
67+
5568 useEffect ( ( ) => {
5669 if ( transactionIsSuccess ) {
5770 refetchPrimaryUsername ( )
@@ -68,17 +81,43 @@ export default function useSetPrimaryBasename({ secondaryUsername }: UseSetPrima
6881 if ( ! address ) return undefined ;
6982
7083 try {
71- await initiateTransaction ( {
72- abi : ReverseRegistrarAbi ,
73- address : USERNAME_REVERSE_REGISTRAR_ADDRESSES [ secondaryUsernameChain . id ] ,
74- args : [
75- address ,
76- address ,
77- USERNAME_L2_RESOLVER_ADDRESSES [ secondaryUsernameChain . id ] ,
78- secondaryUsername ,
79- ] ,
80- functionName : 'setNameForAddr' ,
81- } ) ;
84+ if ( ! paymasterServiceEnabled ) {
85+ await initiateTransaction ( {
86+ abi : ReverseRegistrarAbi ,
87+ address : USERNAME_REVERSE_REGISTRAR_ADDRESSES [ secondaryUsernameChain . id ] ,
88+ args : [
89+ address ,
90+ address ,
91+ USERNAME_L2_RESOLVER_ADDRESSES [ secondaryUsernameChain . id ] ,
92+ secondaryUsername ,
93+ ] ,
94+ functionName : 'setNameForAddr' ,
95+ } ) ;
96+ } else {
97+ await initiateBatchCalls ( {
98+ contracts : [
99+ {
100+ abi : ReverseRegistrarAbi ,
101+ address : USERNAME_REVERSE_REGISTRAR_ADDRESSES [ secondaryUsernameChain . id ] ,
102+ args : [
103+ address ,
104+ address ,
105+ USERNAME_L2_RESOLVER_ADDRESSES [ secondaryUsernameChain . id ] ,
106+ secondaryUsername ,
107+ ] ,
108+ functionName : 'setNameForAddr' ,
109+ } ,
110+ {
111+ abi : L2ReverseRegistrarAbi ,
112+ address : USERNAME_L2_REVERSE_REGISTRAR_ADDRESSES [ secondaryUsernameChain . id ] ,
113+ functionName : 'setName' ,
114+ args : [ secondaryUsername ] ,
115+ } ,
116+ ] ,
117+ account : address ,
118+ chain : secondaryUsernameChain ,
119+ } ) ;
120+ }
82121 } catch ( error ) {
83122 logError ( error , 'Set primary name transaction canceled' ) ;
84123 return undefined ;
@@ -89,12 +128,23 @@ export default function useSetPrimaryBasename({ secondaryUsername }: UseSetPrima
89128 secondaryUsername ,
90129 primaryUsername ,
91130 address ,
131+ paymasterServiceEnabled ,
92132 initiateTransaction ,
93133 secondaryUsernameChain . id ,
134+ initiateBatchCalls ,
94135 logError ,
95136 ] ) ;
96137
97- const isLoading = transactionIsLoading || primaryUsernameIsLoading || primaryUsernameIsFetching ;
138+ const isLoading =
139+ transactionIsLoading ||
140+ batchCallsIsLoading ||
141+ primaryUsernameIsLoading ||
142+ primaryUsernameIsFetching ;
98143
99- return { setPrimaryName, canSetUsernameAsPrimary, isLoading, transactionIsSuccess } ;
144+ return {
145+ setPrimaryName,
146+ canSetUsernameAsPrimary,
147+ isLoading,
148+ transactionIsSuccess : transactionIsSuccess || batchCallsIsSuccess ,
149+ } ;
100150}
0 commit comments