Skip to content

Commit a4baebc

Browse files
committed
Update set primary flow for SCWs
1 parent 27e86d7 commit a4baebc

File tree

1 file changed

+63
-14
lines changed

1 file changed

+63
-14
lines changed

apps/web/src/hooks/useSetPrimaryBasename.ts

Lines changed: 63 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ import useBaseEnsName from 'apps/web/src/hooks/useBaseEnsName';
1111
import { useErrors } from 'apps/web/contexts/Errors';
1212
import useWriteContractWithReceipt from 'apps/web/src/hooks/useWriteContractWithReceipt';
1313
import { useUsernameProfile } from 'apps/web/src/components/Basenames/UsernameProfileContext';
14+
import useWriteContractsWithLogs from 'apps/web/src/hooks/useWriteContractsWithLogs';
15+
import useCapabilitiesSafe from 'apps/web/src/hooks/useCapabilitiesSafe';
16+
import L2ReverseRegistrarAbi from 'apps/web/src/abis/L2ReverseRegistrarAbi';
1417

1518
/*
1619
A hook to set a name as primary for resolution.
@@ -31,6 +34,9 @@ export default function useSetPrimaryBasename({ secondaryUsername }: UseSetPrima
3134

3235
const { currentWalletIsProfileEditor } = useUsernameProfile();
3336
const { basenameChain: secondaryUsernameChain } = useBasenameChain(secondaryUsername);
37+
const { paymasterService: paymasterServiceEnabled } = useCapabilitiesSafe({
38+
chainId: secondaryUsernameChain.id,
39+
});
3440

3541
// Get current primary username
3642
// Note: This is sometimes undefined
@@ -52,6 +58,11 @@ export default function useSetPrimaryBasename({ secondaryUsername }: UseSetPrima
5258
eventName: 'update_primary_name',
5359
});
5460

61+
const { initiateBatchCalls, batchCallsStatus, batchCallsIsLoading } = useWriteContractsWithLogs({
62+
chain: secondaryUsernameChain,
63+
eventName: 'update_primary_name',
64+
});
65+
5566
useEffect(() => {
5667
if (transactionIsSuccess) {
5768
refetchPrimaryUsername()
@@ -68,17 +79,43 @@ export default function useSetPrimaryBasename({ secondaryUsername }: UseSetPrima
6879
if (!address) return undefined;
6980

7081
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-
});
82+
if (!paymasterServiceEnabled) {
83+
await initiateTransaction({
84+
abi: ReverseRegistrarAbi,
85+
address: USERNAME_REVERSE_REGISTRAR_ADDRESSES[secondaryUsernameChain.id],
86+
args: [
87+
address,
88+
address,
89+
USERNAME_L2_RESOLVER_ADDRESSES[secondaryUsernameChain.id],
90+
secondaryUsername,
91+
],
92+
functionName: 'setNameForAddr',
93+
});
94+
} else {
95+
await initiateBatchCalls({
96+
contracts: [
97+
{
98+
abi: ReverseRegistrarAbi,
99+
address: USERNAME_REVERSE_REGISTRAR_ADDRESSES[secondaryUsernameChain.id],
100+
args: [
101+
address,
102+
address,
103+
USERNAME_L2_RESOLVER_ADDRESSES[secondaryUsernameChain.id],
104+
secondaryUsername,
105+
],
106+
functionName: 'setNameForAddr',
107+
},
108+
{
109+
abi: L2ReverseRegistrarAbi,
110+
address: USERNAME_L2_RESOLVER_ADDRESSES[secondaryUsernameChain.id],
111+
functionName: 'setName',
112+
args: [secondaryUsername],
113+
},
114+
],
115+
account: address,
116+
chain: secondaryUsernameChain,
117+
});
118+
}
82119
} catch (error) {
83120
logError(error, 'Set primary name transaction canceled');
84121
return undefined;
@@ -89,12 +126,24 @@ export default function useSetPrimaryBasename({ secondaryUsername }: UseSetPrima
89126
secondaryUsername,
90127
primaryUsername,
91128
address,
129+
paymasterServiceEnabled,
92130
initiateTransaction,
93-
secondaryUsernameChain.id,
131+
secondaryUsernameChain,
132+
initiateBatchCalls,
94133
logError,
95134
]);
96135

97-
const isLoading = transactionIsLoading || primaryUsernameIsLoading || primaryUsernameIsFetching;
136+
const isLoading =
137+
transactionIsLoading ||
138+
primaryUsernameIsLoading ||
139+
primaryUsernameIsFetching ||
140+
batchCallsIsLoading;
98141

99-
return { setPrimaryName, canSetUsernameAsPrimary, isLoading, transactionIsSuccess };
142+
return {
143+
setPrimaryName,
144+
canSetUsernameAsPrimary,
145+
isLoading,
146+
transactionIsSuccess,
147+
batchCallsStatus,
148+
};
100149
}

0 commit comments

Comments
 (0)