Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 63 additions & 13 deletions apps/web/src/hooks/useSetPrimaryBasename.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import ReverseRegistrarAbi from 'apps/web/src/abis/ReverseRegistrarAbi';
import {
USERNAME_L2_RESOLVER_ADDRESSES,
USERNAME_L2_REVERSE_REGISTRAR_ADDRESSES,
USERNAME_REVERSE_REGISTRAR_ADDRESSES,
} from 'apps/web/src/addresses/usernames';
import useBasenameChain from 'apps/web/src/hooks/useBasenameChain';
Expand All @@ -11,6 +12,9 @@ import useBaseEnsName from 'apps/web/src/hooks/useBaseEnsName';
import { useErrors } from 'apps/web/contexts/Errors';
import useWriteContractWithReceipt from 'apps/web/src/hooks/useWriteContractWithReceipt';
import { useUsernameProfile } from 'apps/web/src/components/Basenames/UsernameProfileContext';
import useWriteContractsWithLogs from 'apps/web/src/hooks/useWriteContractsWithLogs';
import useCapabilitiesSafe from 'apps/web/src/hooks/useCapabilitiesSafe';
import L2ReverseRegistrarAbi from 'apps/web/src/abis/L2ReverseRegistrarAbi';

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

const { currentWalletIsProfileEditor } = useUsernameProfile();
const { basenameChain: secondaryUsernameChain } = useBasenameChain(secondaryUsername);
const { paymasterService: paymasterServiceEnabled } = useCapabilitiesSafe({
chainId: secondaryUsernameChain.id,
});

// Get current primary username
// Note: This is sometimes undefined
Expand All @@ -52,6 +59,12 @@ export default function useSetPrimaryBasename({ secondaryUsername }: UseSetPrima
eventName: 'update_primary_name',
});

const { initiateBatchCalls, batchCallsIsSuccess, batchCallsIsLoading } =
useWriteContractsWithLogs({
chain: secondaryUsernameChain,
eventName: 'update_primary_name',
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this need to correspond to an onchain event? or is it just for client handling?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's just for client side logging

});

useEffect(() => {
if (transactionIsSuccess) {
refetchPrimaryUsername()
Expand All @@ -68,17 +81,43 @@ export default function useSetPrimaryBasename({ secondaryUsername }: UseSetPrima
if (!address) return undefined;

try {
await initiateTransaction({
abi: ReverseRegistrarAbi,
address: USERNAME_REVERSE_REGISTRAR_ADDRESSES[secondaryUsernameChain.id],
args: [
address,
address,
USERNAME_L2_RESOLVER_ADDRESSES[secondaryUsernameChain.id],
secondaryUsername,
],
functionName: 'setNameForAddr',
});
if (!paymasterServiceEnabled) {
await initiateTransaction({
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@amiecorso Here's where you'll need to update this flow for EOAs

abi: ReverseRegistrarAbi,
address: USERNAME_REVERSE_REGISTRAR_ADDRESSES[secondaryUsernameChain.id],
args: [
address,
address,
USERNAME_L2_RESOLVER_ADDRESSES[secondaryUsernameChain.id],
secondaryUsername,
],
functionName: 'setNameForAddr',
});
} else {
await initiateBatchCalls({
contracts: [
{
abi: ReverseRegistrarAbi,
address: USERNAME_REVERSE_REGISTRAR_ADDRESSES[secondaryUsernameChain.id],
args: [
address,
address,
USERNAME_L2_RESOLVER_ADDRESSES[secondaryUsernameChain.id],
secondaryUsername,
],
functionName: 'setNameForAddr',
},
{
abi: L2ReverseRegistrarAbi,
address: USERNAME_L2_REVERSE_REGISTRAR_ADDRESSES[secondaryUsernameChain.id],
functionName: 'setName',
args: [secondaryUsername],
},
],
account: address,
chain: secondaryUsernameChain,
});
}
} catch (error) {
logError(error, 'Set primary name transaction canceled');
return undefined;
Expand All @@ -89,12 +128,23 @@ export default function useSetPrimaryBasename({ secondaryUsername }: UseSetPrima
secondaryUsername,
primaryUsername,
address,
paymasterServiceEnabled,
initiateTransaction,
secondaryUsernameChain.id,
initiateBatchCalls,
logError,
]);

const isLoading = transactionIsLoading || primaryUsernameIsLoading || primaryUsernameIsFetching;
const isLoading =
transactionIsLoading ||
batchCallsIsLoading ||
primaryUsernameIsLoading ||
primaryUsernameIsFetching;

return { setPrimaryName, canSetUsernameAsPrimary, isLoading, transactionIsSuccess };
return {
setPrimaryName,
canSetUsernameAsPrimary,
isLoading,
transactionIsSuccess: transactionIsSuccess || batchCallsIsSuccess,
};
}