From ae43bd2a67cb5d767b33da59fc7ceabf056814c0 Mon Sep 17 00:00:00 2001 From: Will Urban <will.urban.dev@gmail.com> Date: Mon, 16 Sep 2024 14:51:36 +0700 Subject: [PATCH 01/11] feat: created hook for fetching addresses[] --- .../hooks/useGetAddressesByOrgIdAndAddress.ts | 54 +++++++++++++++++++ .../address-book/queries/queries.ts | 19 +++++++ 2 files changed, 73 insertions(+) create mode 100644 apps/multisig/src/domains/offchain-data/address-book/hooks/useGetAddressesByOrgIdAndAddress.ts diff --git a/apps/multisig/src/domains/offchain-data/address-book/hooks/useGetAddressesByOrgIdAndAddress.ts b/apps/multisig/src/domains/offchain-data/address-book/hooks/useGetAddressesByOrgIdAndAddress.ts new file mode 100644 index 00000000..5e0c5a3c --- /dev/null +++ b/apps/multisig/src/domains/offchain-data/address-book/hooks/useGetAddressesByOrgIdAndAddress.ts @@ -0,0 +1,54 @@ +import { requestSignetBackend } from '@domains/offchain-data/hasura' +import { selectedAccountState } from '@domains/auth' +import { SignedInAccount } from '@domains/auth' +import { useRecoilValue } from 'recoil' +import { useQuery } from '@tanstack/react-query' +import { ADDRESSES_BY_ORG_ID_AND_ADDRESS } from '@domains/offchain-data/address-book/queries/queries' +import { useSelectedMultisig } from '@domains/multisig' +import { Address } from '@util/addresses' +import { Contact } from '../address-book' + +export type ContactAddress = Omit<Contact, 'orgId'> & { team_id?: string; org_id: string } +export type ContactAddressIO = Omit<ContactAddress, 'address'> & { address: string } + +export type PaginatedAddresses = { + rows: ContactAddress[] + pageCount: number + rowCount: number +} + +const fetchGraphQLData = async ({ + orgId, + addresses, + selectedAccount, +}: { + orgId: string + addresses: string[] + selectedAccount: SignedInAccount +}): Promise<ContactAddress[]> => { + const { data } = await requestSignetBackend( + ADDRESSES_BY_ORG_ID_AND_ADDRESS, + { + orgId, + addresses, + }, + selectedAccount + ) + + return ( + data.address?.map((contact: ContactAddressIO) => ({ ...contact, address: Address.fromSs58(contact.address) })) ?? [] + ) +} + +const useGetAddressesByOrgIdAndAddress = (addresses: string[]) => { + const selectedAccount = useRecoilValue(selectedAccountState) + const [selectedMultisig] = useSelectedMultisig() + return useQuery({ + queryKey: ['addresses', selectedMultisig.id, addresses], + queryFn: async () => + fetchGraphQLData({ orgId: selectedMultisig.orgId, addresses, selectedAccount: selectedAccount! }), + enabled: !!selectedAccount && addresses.length > 0, + }) +} + +export default useGetAddressesByOrgIdAndAddress diff --git a/apps/multisig/src/domains/offchain-data/address-book/queries/queries.ts b/apps/multisig/src/domains/offchain-data/address-book/queries/queries.ts index 64570328..efbe78a8 100644 --- a/apps/multisig/src/domains/offchain-data/address-book/queries/queries.ts +++ b/apps/multisig/src/domains/offchain-data/address-book/queries/queries.ts @@ -70,6 +70,25 @@ export const PAGINATED_SUB_CATEGORIES_BY_ORG_ID = gql` } ` +export const ADDRESSES_BY_ORG_ID_AND_ADDRESS = gql` + query AddressesByOrgIdAndAddress($orgId: uuid!, $addresses: [String!]!) { + address(where: { org_id: { _eq: $orgId }, address: { _in: $addresses } }) { + id + org_id + name + address + category { + id + name + } + sub_category { + id + name + } + } + } +` + export const UPSERT_ADDRESSES = gql` mutation UpsertAddressesMutation($orgId: String!, $teamId: String!, $addressesInput: [AddressInput!]!) { UpsertAddresses(addressesInput: { addresses: $addressesInput, org_id: $orgId, team_id: $teamId }) { From 69ca7da952c6561e1a3c09c7a3f643580b595678 Mon Sep 17 00:00:00 2001 From: Will Urban <will.urban.dev@gmail.com> Date: Wed, 18 Sep 2024 10:14:34 +0700 Subject: [PATCH 02/11] feat: useKnownAddresses fetch addresses on demand --- apps/multisig/src/hooks/useKnownAddresses.ts | 21 +++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/apps/multisig/src/hooks/useKnownAddresses.ts b/apps/multisig/src/hooks/useKnownAddresses.ts index 11e6a991..9f6a9b44 100644 --- a/apps/multisig/src/hooks/useKnownAddresses.ts +++ b/apps/multisig/src/hooks/useKnownAddresses.ts @@ -6,20 +6,27 @@ import { useMemo } from 'react' import { useSelectedMultisig } from '@domains/multisig' import { useSmartContracts } from '../domains/offchain-data/smart-contract' import { Contact } from '../domains/offchain-data/address-book/address-book' +import useGetAddressesByOrgIdAndAddress from '../domains/offchain-data/address-book/hooks/useGetAddressesByOrgIdAndAddress' type ContactWithNameAndCategory = Partial<Contact> & AddressWithName export const useKnownAddresses = ( - teamId?: string, + orgId?: string, { includeSelectedMultisig = false, includeContracts = false, - }: { includeSelectedMultisig?: boolean; includeContracts?: boolean } = {} -): { addresses: ContactWithNameAndCategory[]; contactByAddress: Record<string, ContactWithNameAndCategory> } => { + }: { includeSelectedMultisig?: boolean; includeContracts?: boolean } = {}, + addresses?: string[] +): { + addresses: ContactWithNameAndCategory[] + contactByAddress: Record<string, ContactWithNameAndCategory> + isLoading: boolean +} => { const extensionAccounts = useRecoilValue(accountsState) const addressBookByOrgId = useRecoilValue(addressBookByOrgIdState) const [multisig] = useSelectedMultisig() const { contracts } = useSmartContracts() + const { data: addressBookData, isLoading } = useGetAddressesByOrgIdAndAddress(addresses ?? []) const extensionContacts = extensionAccounts.reduce<AddressWithName[]>( (acc, { address, meta: { name = '' } = {} }) => { @@ -37,9 +44,9 @@ export const useKnownAddresses = ( ) const addressBookContacts = useMemo(() => { - if (!teamId) return [] + if (!orgId) return [] - const addresses = addressBookByOrgId[teamId ?? ''] ?? [] + const addresses = [...(addressBookByOrgId[orgId ?? ''] ?? []), ...(addressBookData ?? [])] return addresses.reduce<ContactWithNameAndCategory[]>((acc, { address, name, category, sub_category }) => { if (multisig.isEthereumAccount === address.isEthereum) { @@ -54,7 +61,7 @@ export const useKnownAddresses = ( } return acc }, []) - }, [addressBookByOrgId, multisig.isEthereumAccount, teamId]) + }, [addressBookByOrgId, addressBookData, multisig.isEthereumAccount, orgId]) const combinedList = useMemo(() => { let list = extensionContacts @@ -130,5 +137,5 @@ export const useKnownAddresses = ( }, {} as Record<string, ContactWithNameAndCategory>) }, [combinedList]) - return { addresses: combinedList, contactByAddress } + return { addresses: combinedList, contactByAddress, isLoading } } From 7abc64dbd9f018439503933852c65c453d4446eb Mon Sep 17 00:00:00 2001 From: Will Urban <will.urban.dev@gmail.com> Date: Wed, 18 Sep 2024 10:19:24 +0700 Subject: [PATCH 03/11] feat: fetch contacts in MultiSendExpandedDetails --- .../AddressInput/AccountDetails.tsx | 3 ++ .../AddressInput/NameAndAddress.tsx | 17 +++++++-- .../TransactionDetailsExpandable.tsx | 35 +++++++++++++++---- 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/apps/multisig/src/components/AddressInput/AccountDetails.tsx b/apps/multisig/src/components/AddressInput/AccountDetails.tsx index 287d7355..09212876 100644 --- a/apps/multisig/src/components/AddressInput/AccountDetails.tsx +++ b/apps/multisig/src/components/AddressInput/AccountDetails.tsx @@ -19,6 +19,7 @@ type Props = { hideAddress?: boolean identiconSize?: number breakLine?: boolean + isNameLoading?: boolean } export const AccountDetails: React.FC<Props> = ({ @@ -33,6 +34,7 @@ export const AccountDetails: React.FC<Props> = ({ breakLine, hideIdenticon = false, hideAddress = false, + isNameLoading = false, }) => { const { copy, copied } = useCopied() @@ -54,6 +56,7 @@ export const AccountDetails: React.FC<Props> = ({ nameOrAddressOnly={nameOrAddressOnly} breakLine={breakLine} hideAddress={hideAddress} + isNameLoading={isNameLoading} /> {!disableCopy && ( <div diff --git a/apps/multisig/src/components/AddressInput/NameAndAddress.tsx b/apps/multisig/src/components/AddressInput/NameAndAddress.tsx index 25fcff90..22b5e676 100644 --- a/apps/multisig/src/components/AddressInput/NameAndAddress.tsx +++ b/apps/multisig/src/components/AddressInput/NameAndAddress.tsx @@ -4,6 +4,7 @@ import { useOnchainIdentity } from '@domains/identity/useOnchainIdentity' import { Address } from '@util/addresses' import { Check } from 'lucide-react' import { useEffect, useMemo, useState } from 'react' +import { CircularProgressIndicator } from '@talismn/ui' export const NameAndAddress: React.FC<{ address: Address @@ -12,7 +13,8 @@ export const NameAndAddress: React.FC<{ nameOrAddressOnly?: boolean breakLine?: boolean hideAddress?: boolean -}> = ({ address, name, chain, nameOrAddressOnly, breakLine, hideAddress }) => { + isNameLoading?: boolean +}> = ({ address, name, chain, nameOrAddressOnly, breakLine, hideAddress, isNameLoading = false }) => { const { resolve } = useAzeroID() const [azeroId, setAzeroId] = useState<string | undefined>() const onchainIdentity = useOnchainIdentity(address, chain) @@ -55,12 +57,23 @@ export const NameAndAddress: React.FC<{ return null }, [address, azeroId, chain, name, nameOrAddressOnly, onchainIdentityUi]) - if (!secondaryText) + if (!secondaryText) { + if (isNameLoading) { + return ( + <div className="flex flex-col gap-1"> + {true && !name && <CircularProgressIndicator size={16} />} + <p className="text-gray-200 text-[12px] leading-[1] whitespace-nowrap overflow-hidden text-ellipsis max-w-max w-full pt-[3px]"> + {primaryText} + </p> + </div> + ) + } return ( <p className="text-offWhite overflow-hidden text-ellipsis mt-[3px] w-full max-w-max whitespace-nowrap"> {primaryText} </p> ) + } return ( <div diff --git a/apps/multisig/src/layouts/Overview/Transactions/TransactionDetailsExpandable.tsx b/apps/multisig/src/layouts/Overview/Transactions/TransactionDetailsExpandable.tsx index a7df1bd2..2e131e90 100644 --- a/apps/multisig/src/layouts/Overview/Transactions/TransactionDetailsExpandable.tsx +++ b/apps/multisig/src/layouts/Overview/Transactions/TransactionDetailsExpandable.tsx @@ -31,6 +31,7 @@ import { isExtrinsicProxyWrapped } from '@util/extrinsics' import { CONFIG } from '@lib/config' import { VestingDateRange } from '@components/VestingDateRange' import { Table, TableCell, TableHead, TableHeader, TableRow } from '@components/ui/table' +import { CircularProgressIndicator } from '@talismn/ui' const CopyPasteBox: React.FC<{ content: string; label?: string }> = ({ content, label }) => { const [copied, setCopied] = useState(false) @@ -153,14 +154,17 @@ const ChangeConfigExpandedDetails = ({ t }: { t: Transaction }) => { } const MultiSendExpandedDetails = ({ t }: { t: Transaction }) => { - const { contactByAddress } = useKnownAddresses(t.multisig.orgId) - const shouldDisplayCategory = t.decoded?.recipients.some(r => contactByAddress[r.address.toSs58()]?.category) - const shouldDisplaySubcategory = t.decoded?.recipients.some(r => contactByAddress[r.address.toSs58()]?.sub_category) + const recipientAddresses = t.decoded?.recipients.map(r => r.address.toSs58()) + const { contactByAddress, isLoading } = useKnownAddresses(t.multisig.orgId, {}, recipientAddresses) + const shouldDisplayCategory = + t.decoded?.recipients.some(r => contactByAddress[r.address.toSs58()]?.category) || isLoading + const shouldDisplaySubcategory = + t.decoded?.recipients.some(r => contactByAddress[r.address.toSs58()]?.sub_category) || isLoading const shouldDisplayVesting = t.decoded?.recipients.some(r => r.vestingSchedule) return ( <div className="border border-gray-500 rounded-[8px] overflow-hidden"> - <Table className="border-b-0"> + <Table className="border-b-0 table-auto"> <TableHeader> <TableRow> <TableHead>Recipient</TableHead> @@ -172,7 +176,7 @@ const MultiSendExpandedDetails = ({ t }: { t: Transaction }) => { </TableHeader> {t.decoded?.recipients.map(({ address, balance, vestingSchedule }, i) => ( - <TableRow key={i} className="last:border-b-0"> + <TableRow key={i} className="last:border-b-0 h-[55px]"> <TableCell> <AccountDetails name={contactByAddress[address.toSs58()]?.name} @@ -183,13 +187,30 @@ const MultiSendExpandedDetails = ({ t }: { t: Transaction }) => { identiconSize={28} disableCopy hideIdenticon + isNameLoading={isLoading} /> </TableCell> {shouldDisplayCategory && ( - <TableCell className="text-right">{contactByAddress[address.toSs58()]?.category?.name}</TableCell> + <TableCell className="text-right ml-auto"> + {isLoading ? ( + <div className="flex justify-end"> + <CircularProgressIndicator size={16} /> + </div> + ) : ( + contactByAddress[address.toSs58()]?.category?.name + )} + </TableCell> )} {shouldDisplaySubcategory && ( - <TableCell className="text-right">{contactByAddress[address.toSs58()]?.sub_category?.name}</TableCell> + <TableCell className="text-right"> + {isLoading ? ( + <div className="flex justify-end"> + <CircularProgressIndicator size={16} /> + </div> + ) : ( + contactByAddress[address.toSs58()]?.sub_category?.name + )} + </TableCell> )} {vestingSchedule && ( <TableCell> From 11ace01bbfa1da2fd40f8bd9d85018160ba26fdd Mon Sep 17 00:00:00 2001 From: Will Urban <will.urban.dev@gmail.com> Date: Wed, 18 Sep 2024 11:04:32 +0700 Subject: [PATCH 04/11] refactor: transactionDetailsHeader to use lodable contact name --- .../AddressInput/NameAndAddress.tsx | 27 ++++++++++--------- .../TransactionDetailsExpandable.tsx | 14 +++++++--- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/apps/multisig/src/components/AddressInput/NameAndAddress.tsx b/apps/multisig/src/components/AddressInput/NameAndAddress.tsx index 22b5e676..ff8c8f0e 100644 --- a/apps/multisig/src/components/AddressInput/NameAndAddress.tsx +++ b/apps/multisig/src/components/AddressInput/NameAndAddress.tsx @@ -58,20 +58,23 @@ export const NameAndAddress: React.FC<{ }, [address, azeroId, chain, name, nameOrAddressOnly, onchainIdentityUi]) if (!secondaryText) { - if (isNameLoading) { - return ( - <div className="flex flex-col gap-1"> - {true && !name && <CircularProgressIndicator size={16} />} - <p className="text-gray-200 text-[12px] leading-[1] whitespace-nowrap overflow-hidden text-ellipsis max-w-max w-full pt-[3px]"> + return ( + <div className="flex flex-col gap-1"> + {isNameLoading && !name ? ( + <> + <CircularProgressIndicator size={16} /> + {!nameOrAddressOnly && ( + <p className="text-gray-200 text-[12px] leading-[1] whitespace-nowrap overflow-hidden text-ellipsis max-w-max w-full pt-[3px]"> + {primaryText} + </p> + )} + </> + ) : ( + <p className="text-offWhite overflow-hidden text-ellipsis mt-[3px] w-full max-w-max whitespace-nowrap"> {primaryText} </p> - </div> - ) - } - return ( - <p className="text-offWhite overflow-hidden text-ellipsis mt-[3px] w-full max-w-max whitespace-nowrap"> - {primaryText} - </p> + )} + </div> ) } diff --git a/apps/multisig/src/layouts/Overview/Transactions/TransactionDetailsExpandable.tsx b/apps/multisig/src/layouts/Overview/Transactions/TransactionDetailsExpandable.tsx index 2e131e90..e12b7034 100644 --- a/apps/multisig/src/layouts/Overview/Transactions/TransactionDetailsExpandable.tsx +++ b/apps/multisig/src/layouts/Overview/Transactions/TransactionDetailsExpandable.tsx @@ -322,15 +322,20 @@ function AdvancedExpendedDetails({ } const TransactionDetailsHeaderContent: React.FC<{ t: Transaction }> = ({ t }) => { - const { contactByAddress } = useKnownAddresses(t.multisig.orgId, { - includeContracts: true, - }) const recipients = t.decoded?.recipients || [] + const [recipient] = t.decoded?.recipients || [] + const recipientAddress = recipient?.address.toSs58() + const { contactByAddress, isLoading } = useKnownAddresses( + t.multisig.orgId, + { + includeContracts: true, + }, + recipients.length === 1 && recipientAddress ? [recipientAddress] : [] + ) if (!t.decoded) return null if (t.decoded.type === TransactionType.Transfer) { - const [recipient] = t.decoded.recipients if (recipient) return ( <div className="bg-gray-500 p-[4px] px-[8px] rounded-[8px] max-w-[180px] [&>div>p]:text-[14px]"> @@ -342,6 +347,7 @@ const TransactionDetailsHeaderContent: React.FC<{ t: Transaction }> = ({ t }) => nameOrAddressOnly identiconSize={16} disableCopy + isNameLoading={isLoading} /> </div> ) From 95c86215829b4aaa852685508fa9922953188973 Mon Sep 17 00:00:00 2001 From: Will Urban <will.urban.dev@gmail.com> Date: Wed, 18 Sep 2024 12:06:19 +0700 Subject: [PATCH 05/11] refactor: updated VaultCard to fetch addresses --- apps/multisig/src/components/ScanVaults/VaultCard.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/multisig/src/components/ScanVaults/VaultCard.tsx b/apps/multisig/src/components/ScanVaults/VaultCard.tsx index 14ec2dfe..51154929 100644 --- a/apps/multisig/src/components/ScanVaults/VaultCard.tsx +++ b/apps/multisig/src/components/ScanVaults/VaultCard.tsx @@ -21,7 +21,8 @@ const VaultCard: React.FC<{ vault: ScannedVault; onAdded?: () => void }> = ({ on const { toast } = useToast() const setImportedTeams = useSetRecoilState(importedTeamsState) const navigate = useNavigate() - const { contactByAddress } = useKnownAddresses() + const signerAddresses = vault.multisig.signers.map(s => s.toSs58()) + const { contactByAddress } = useKnownAddresses('', {}, showMultisig ? signerAddresses : []) useEffect(() => { if (add && showMultisig) setShowMultisig(false) }, [add, showMultisig]) From 5fa01714e344b4332688789bd1c4509664aeb809 Mon Sep 17 00:00:00 2001 From: Will Urban <will.urban.dev@gmail.com> Date: Wed, 18 Sep 2024 12:24:24 +0700 Subject: [PATCH 06/11] refactor: updated TransactionSideSheetApprovals to fetch addresses --- apps/multisig/src/components/MemberRow/index.tsx | 9 ++++++++- .../TransactionSidesheetApprovals.tsx | 12 +++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/apps/multisig/src/components/MemberRow/index.tsx b/apps/multisig/src/components/MemberRow/index.tsx index 22e9919b..f995af33 100644 --- a/apps/multisig/src/components/MemberRow/index.tsx +++ b/apps/multisig/src/components/MemberRow/index.tsx @@ -4,7 +4,13 @@ import { css } from '@emotion/css' import { ExternalLink, Trash } from '@talismn/icons' import { AccountDetails } from '@components/AddressInput/AccountDetails' -const MemberRow = (props: { member: AugmentedAccount; chain: Chain; onDelete?: () => void; truncate?: boolean }) => { +const MemberRow = (props: { + member: AugmentedAccount + chain: Chain + onDelete?: () => void + truncate?: boolean + isNameLoading?: boolean +}) => { return ( <div className={css` @@ -27,6 +33,7 @@ const MemberRow = (props: { member: AugmentedAccount; chain: Chain; onDelete?: ( disableCopy withAddressTooltip chain={props.chain} + isNameLoading={props.isNameLoading} /> {props.member.you ? <span className="text-offWhite text-[14px]"> (You)</span> : null} </div> diff --git a/apps/multisig/src/components/TransactionSidesheet/TransactionSidesheetApprovals.tsx b/apps/multisig/src/components/TransactionSidesheet/TransactionSidesheetApprovals.tsx index 76793912..da8d8492 100644 --- a/apps/multisig/src/components/TransactionSidesheet/TransactionSidesheetApprovals.tsx +++ b/apps/multisig/src/components/TransactionSidesheet/TransactionSidesheetApprovals.tsx @@ -7,8 +7,17 @@ import { Address } from '@util/addresses' import { useSelectedMultisig } from '@domains/multisig' export const TransactionSidesheetApprovals: React.FC<{ t: Transaction }> = ({ t }) => { - const { contactByAddress } = useKnownAddresses(t.multisig.orgId) const [{ isEthereumAccount }] = useSelectedMultisig() + const approversAddresses = Object.keys(t.approvals).reduce<string[]>((acc, address) => { + const decodedAddress = isEthereumAccount ? Address.fromSs58(address) : Address.fromPubKey(address) + if (decodedAddress) { + acc.push(decodedAddress.toSs58()) + } + return acc + }, []) + + console.log({ approversAddresses }) + const { contactByAddress, isLoading } = useKnownAddresses(t.multisig.orgId, {}, approversAddresses) return ( <div css={{ display: 'grid', gap: '14px' }}> {Object.entries(t.approvals).map(([address, approval]) => { @@ -24,6 +33,7 @@ export const TransactionSidesheetApprovals: React.FC<{ t: Transaction }> = ({ t <MemberRow member={{ address: decodedAddress, nickname: contact?.name, you: contact?.extensionName !== undefined }} chain={t.multisig.chain} + isNameLoading={isLoading} /> </div> {(t.rawPending || t.executedAt) && ( From e1ac907238e21575da129d280fa1e1a3ac24df1a Mon Sep 17 00:00:00 2001 From: Will Urban <will.urban.dev@gmail.com> Date: Wed, 18 Sep 2024 12:36:35 +0700 Subject: [PATCH 07/11] refactor: updated CollaboratorRow to fetch Address --- .../TransactionSidesheetApprovals.tsx | 1 - .../src/layouts/Collaborators/CollaboratorRow.tsx | 9 +++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/multisig/src/components/TransactionSidesheet/TransactionSidesheetApprovals.tsx b/apps/multisig/src/components/TransactionSidesheet/TransactionSidesheetApprovals.tsx index da8d8492..0ceeb16e 100644 --- a/apps/multisig/src/components/TransactionSidesheet/TransactionSidesheetApprovals.tsx +++ b/apps/multisig/src/components/TransactionSidesheet/TransactionSidesheetApprovals.tsx @@ -16,7 +16,6 @@ export const TransactionSidesheetApprovals: React.FC<{ t: Transaction }> = ({ t return acc }, []) - console.log({ approversAddresses }) const { contactByAddress, isLoading } = useKnownAddresses(t.multisig.orgId, {}, approversAddresses) return ( <div css={{ display: 'grid', gap: '14px' }}> diff --git a/apps/multisig/src/layouts/Collaborators/CollaboratorRow.tsx b/apps/multisig/src/layouts/Collaborators/CollaboratorRow.tsx index f3de06fb..fa025a24 100644 --- a/apps/multisig/src/layouts/Collaborators/CollaboratorRow.tsx +++ b/apps/multisig/src/layouts/Collaborators/CollaboratorRow.tsx @@ -14,7 +14,7 @@ export const CollaboratorRow: React.FC<{ orgId: string; userId: string; address: userId, address, }) => { - const { contactByAddress } = useKnownAddresses(orgId, { includeContracts: true }) + const { contactByAddress, isLoading } = useKnownAddresses(orgId, { includeContracts: true }, [address.toSs58()]) const { deleteCollaborator, deleting } = useDeleteCollaborator() const { isCollaborator } = useUser() @@ -25,7 +25,12 @@ export const CollaboratorRow: React.FC<{ orgId: string; userId: string; address: return ( <div className="w-full bg-gray-900 p-[16px] rounded-[12px] flex items-center justify-between"> <div> - <AccountDetails address={address} name={contactByAddress?.[address.toSs58()]?.name} withAddressTooltip /> + <AccountDetails + address={address} + name={contactByAddress?.[address.toSs58()]?.name} + withAddressTooltip + isNameLoading={isLoading} + /> </div> {!isCollaborator && ( <Tooltip content="Remove collaborator"> From c94109ad92fb1c917f34c19370456de678367046 Mon Sep 17 00:00:00 2001 From: Will Urban <will.urban.dev@gmail.com> Date: Wed, 18 Sep 2024 12:49:11 +0700 Subject: [PATCH 08/11] refactor: updated VaultOverview to fetch addresses --- apps/multisig/src/layouts/Overview/VaultOverview.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/multisig/src/layouts/Overview/VaultOverview.tsx b/apps/multisig/src/layouts/Overview/VaultOverview.tsx index f6394ee2..410c18cf 100644 --- a/apps/multisig/src/layouts/Overview/VaultOverview.tsx +++ b/apps/multisig/src/layouts/Overview/VaultOverview.tsx @@ -24,8 +24,9 @@ const showMemberState = atom<boolean>({ export const VaultOverview: React.FC = () => { const [selectedMultisig] = useSelectedMultisig() const [showMembers, setShowMembers] = useRecoilState(showMemberState) - const { contactByAddress } = useKnownAddresses(selectedMultisig.orgId) const { copy, copied } = useCopied() + const signersAddresses = selectedMultisig.signers.map(signer => signer.toSs58()) + const { contactByAddress, isLoading } = useKnownAddresses(selectedMultisig.orgId, {}, signersAddresses) return ( <section className="flex flex-col p-[24px] rounded-2xl bg-gray-800"> @@ -145,6 +146,7 @@ export const VaultOverview: React.FC = () => { identiconSize={20} nameOrAddressOnly withAddressTooltip + isNameLoading={isLoading} /> ))} </div> From c974ff663d9d99ab427389a0a56e57c6753ece33 Mon Sep 17 00:00:00 2001 From: Will Urban <will.urban.dev@gmail.com> Date: Wed, 18 Sep 2024 15:27:28 +0700 Subject: [PATCH 09/11] refactor: updated components to fetch addresses --- .../Overview/Transactions/TransactionSummaryRow.tsx | 5 ++++- apps/multisig/src/layouts/Settings/RecoverMultisig.tsx | 10 ++++++---- apps/multisig/src/layouts/Settings/SignersSettings.tsx | 8 +++++++- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/apps/multisig/src/layouts/Overview/Transactions/TransactionSummaryRow.tsx b/apps/multisig/src/layouts/Overview/Transactions/TransactionSummaryRow.tsx index d6bbe908..0c67cced 100644 --- a/apps/multisig/src/layouts/Overview/Transactions/TransactionSummaryRow.tsx +++ b/apps/multisig/src/layouts/Overview/Transactions/TransactionSummaryRow.tsx @@ -38,7 +38,9 @@ const TransactionSummaryRow = ({ showShareButton?: boolean onClick?: () => void }) => { - const { contactByAddress } = useKnownAddresses(t.multisig.orgId) + const { contactByAddress, isLoading } = useKnownAddresses(t.multisig.orgId, {}, [ + t?.draft?.creator.address.toSs58() || '', + ]) const sumOutgoing: Balance[] = useMemo(() => calcSumOutgoing(t), [t]) const combinedView = useRecoilValue(combinedViewState) const tokenPrices = useRecoilValueLoadable(tokenPricesState(sumOutgoing.map(b => b.token))) @@ -157,6 +159,7 @@ const TransactionSummaryRow = ({ withAddressTooltip nameOrAddressOnly disableCopy + isNameLoading={isLoading} /> </div> </div> diff --git a/apps/multisig/src/layouts/Settings/RecoverMultisig.tsx b/apps/multisig/src/layouts/Settings/RecoverMultisig.tsx index 28f3f26d..70d8d4d9 100644 --- a/apps/multisig/src/layouts/Settings/RecoverMultisig.tsx +++ b/apps/multisig/src/layouts/Settings/RecoverMultisig.tsx @@ -25,10 +25,11 @@ type Props = { const ScannedMultisigs: React.FC<{ multisigs: { signers: Address[]; threshold: number; address: Address }[] chain: Chain - teamId: string + orgId: string onSelect: (multisig: { signers: Address[]; threshold: number; address: Address }) => void -}> = ({ chain, multisigs, onSelect, teamId }) => { - const { contactByAddress } = useKnownAddresses(teamId) +}> = ({ chain, multisigs, onSelect, orgId }) => { + const signersAddresses = useMemo(() => multisigs.flatMap(m => m.signers.map(signer => signer.toSs58())), [multisigs]) + const { contactByAddress, isLoading } = useKnownAddresses(orgId, {}, signersAddresses) return ( <div className="grid gap-[8px] max-h-[400px] overflow-y-auto"> {multisigs.map(multisig => ( @@ -66,6 +67,7 @@ const ScannedMultisigs: React.FC<{ name={contactByAddress[signer.toSs58()]?.name} withAddressTooltip nameOrAddressOnly + isNameLoading={isLoading} /> </div> ))} @@ -184,7 +186,7 @@ export const RecoverMultisig: React.FC<Props> = ({ multisig }) => { )} <ScannedMultisigs chain={multisig.chain} - teamId={multisig.id} + orgId={multisig.id} multisigs={applicableMultisigs.map(({ multisigAddress, signers, threshold }) => ({ address: multisigAddress, signers, diff --git a/apps/multisig/src/layouts/Settings/SignersSettings.tsx b/apps/multisig/src/layouts/Settings/SignersSettings.tsx index 2fae01db..577377b5 100644 --- a/apps/multisig/src/layouts/Settings/SignersSettings.tsx +++ b/apps/multisig/src/layouts/Settings/SignersSettings.tsx @@ -19,7 +19,12 @@ type Props = { } export const SignersSettings: React.FC<Props> = ({ capHeight, editable, error, members, multisig, onChange }) => { - const { addresses: knownAddresses, contactByAddress } = useKnownAddresses(multisig.orgId) + const membersAddresses = members.map(m => m.toSs58()) + const { + addresses: knownAddresses, + contactByAddress, + isLoading, + } = useKnownAddresses(multisig.orgId, {}, membersAddresses) const prevLength = useRef(members.length) const scrollView = useRef<HTMLDivElement>(null) @@ -62,6 +67,7 @@ export const SignersSettings: React.FC<Props> = ({ capHeight, editable, error, m disableCopy chain={multisig.chain} withAddressTooltip + isNameLoading={isLoading} /> <Button disabled={!editable} From 26f8b4611753f23e35fd82305e09ce3b2812d04f Mon Sep 17 00:00:00 2001 From: Will Urban <will.urban.dev@gmail.com> Date: Wed, 18 Sep 2024 15:53:59 +0700 Subject: [PATCH 10/11] refactor: useKnownAddresses args --- .../src/components/ScanVaults/VaultCard.tsx | 2 +- .../param-input/Address.tsx | 2 +- .../TransactionSidesheetApprovals.tsx | 2 +- apps/multisig/src/hooks/useKnownAddresses.ts | 19 +++++++++++-------- .../Collaborators/AddCollaboratorModal.tsx | 2 +- .../layouts/Collaborators/CollaboratorRow.tsx | 6 +++++- .../NewTransaction/Multisend/index.tsx | 2 +- .../NewTransaction/Send/DetailsForm.tsx | 2 +- .../TransactionDetailsExpandable.tsx | 16 +++++++--------- .../Transactions/TransactionSummaryRow.tsx | 7 ++++--- .../src/layouts/Overview/VaultOverview.tsx | 5 ++++- .../src/layouts/Settings/RecoverMultisig.tsx | 2 +- .../src/layouts/Settings/SignersSettings.tsx | 2 +- .../DeployContractExpandedDetails.tsx | 3 ++- .../SmartContractCallExpandedDetails.tsx | 3 ++- 15 files changed, 43 insertions(+), 32 deletions(-) diff --git a/apps/multisig/src/components/ScanVaults/VaultCard.tsx b/apps/multisig/src/components/ScanVaults/VaultCard.tsx index 51154929..9139ad0c 100644 --- a/apps/multisig/src/components/ScanVaults/VaultCard.tsx +++ b/apps/multisig/src/components/ScanVaults/VaultCard.tsx @@ -22,7 +22,7 @@ const VaultCard: React.FC<{ vault: ScannedVault; onAdded?: () => void }> = ({ on const setImportedTeams = useSetRecoilState(importedTeamsState) const navigate = useNavigate() const signerAddresses = vault.multisig.signers.map(s => s.toSs58()) - const { contactByAddress } = useKnownAddresses('', {}, showMultisig ? signerAddresses : []) + const { contactByAddress } = useKnownAddresses({ addresses: showMultisig ? signerAddresses : [] }) useEffect(() => { if (add && showMultisig) setShowMultisig(false) }, [add, showMultisig]) diff --git a/apps/multisig/src/components/SubstrateContractAbi/param-input/Address.tsx b/apps/multisig/src/components/SubstrateContractAbi/param-input/Address.tsx index ac9cbe9a..67376d29 100644 --- a/apps/multisig/src/components/SubstrateContractAbi/param-input/Address.tsx +++ b/apps/multisig/src/components/SubstrateContractAbi/param-input/Address.tsx @@ -7,7 +7,7 @@ import { useEffect, useState } from 'react' export const AddressParamInput: ParamInputComponent<string> = ({ chain, onChange, arg }) => { const [query, setQuery] = useState('') const [selectedMultisig] = useSelectedMultisig() - const { addresses } = useKnownAddresses(selectedMultisig.orgId, { includeSelectedMultisig: true }) + const { addresses } = useKnownAddresses({ orgId: selectedMultisig.orgId, includeSelectedMultisig: true }) useEffect(() => { if (!arg) setQuery('') diff --git a/apps/multisig/src/components/TransactionSidesheet/TransactionSidesheetApprovals.tsx b/apps/multisig/src/components/TransactionSidesheet/TransactionSidesheetApprovals.tsx index 0ceeb16e..580238ac 100644 --- a/apps/multisig/src/components/TransactionSidesheet/TransactionSidesheetApprovals.tsx +++ b/apps/multisig/src/components/TransactionSidesheet/TransactionSidesheetApprovals.tsx @@ -16,7 +16,7 @@ export const TransactionSidesheetApprovals: React.FC<{ t: Transaction }> = ({ t return acc }, []) - const { contactByAddress, isLoading } = useKnownAddresses(t.multisig.orgId, {}, approversAddresses) + const { contactByAddress, isLoading } = useKnownAddresses({ orgId: t.multisig.orgId, addresses: approversAddresses }) return ( <div css={{ display: 'grid', gap: '14px' }}> {Object.entries(t.approvals).map(([address, approval]) => { diff --git a/apps/multisig/src/hooks/useKnownAddresses.ts b/apps/multisig/src/hooks/useKnownAddresses.ts index 9f6a9b44..9baa0747 100644 --- a/apps/multisig/src/hooks/useKnownAddresses.ts +++ b/apps/multisig/src/hooks/useKnownAddresses.ts @@ -10,14 +10,17 @@ import useGetAddressesByOrgIdAndAddress from '../domains/offchain-data/address-b type ContactWithNameAndCategory = Partial<Contact> & AddressWithName -export const useKnownAddresses = ( - orgId?: string, - { - includeSelectedMultisig = false, - includeContracts = false, - }: { includeSelectedMultisig?: boolean; includeContracts?: boolean } = {}, +export const useKnownAddresses = ({ + orgId, + includeSelectedMultisig, + includeContracts, + addresses, +}: { + orgId?: string + includeSelectedMultisig?: boolean + includeContracts?: boolean addresses?: string[] -): { +} = {}): { addresses: ContactWithNameAndCategory[] contactByAddress: Record<string, ContactWithNameAndCategory> isLoading: boolean @@ -44,7 +47,7 @@ export const useKnownAddresses = ( ) const addressBookContacts = useMemo(() => { - if (!orgId) return [] + if (!orgId || !addressBookData?.length) return [] const addresses = [...(addressBookByOrgId[orgId ?? ''] ?? []), ...(addressBookData ?? [])] diff --git a/apps/multisig/src/layouts/Collaborators/AddCollaboratorModal.tsx b/apps/multisig/src/layouts/Collaborators/AddCollaboratorModal.tsx index 659103c6..c5fdf7b5 100644 --- a/apps/multisig/src/layouts/Collaborators/AddCollaboratorModal.tsx +++ b/apps/multisig/src/layouts/Collaborators/AddCollaboratorModal.tsx @@ -16,7 +16,7 @@ export const AddCollaboratorModal: React.FC<Props> = ({ isOpen, onClose }) => { const [selectedMultisig] = useSelectedMultisig() const [address, setAddress] = useState<Address | undefined>() const [error, setError] = useState<boolean>(false) - const { addresses } = useKnownAddresses(selectedMultisig.orgId) + const { addresses } = useKnownAddresses({ orgId: selectedMultisig.orgId }) const { addCollaborator, adding } = useAddOrgCollaborator() const handleAddressChange = (address: Address | undefined) => { diff --git a/apps/multisig/src/layouts/Collaborators/CollaboratorRow.tsx b/apps/multisig/src/layouts/Collaborators/CollaboratorRow.tsx index fa025a24..a6315476 100644 --- a/apps/multisig/src/layouts/Collaborators/CollaboratorRow.tsx +++ b/apps/multisig/src/layouts/Collaborators/CollaboratorRow.tsx @@ -14,7 +14,11 @@ export const CollaboratorRow: React.FC<{ orgId: string; userId: string; address: userId, address, }) => { - const { contactByAddress, isLoading } = useKnownAddresses(orgId, { includeContracts: true }, [address.toSs58()]) + const { contactByAddress, isLoading } = useKnownAddresses({ + orgId, + includeContracts: true, + addresses: [address.toSs58()], + }) const { deleteCollaborator, deleting } = useDeleteCollaborator() const { isCollaborator } = useUser() diff --git a/apps/multisig/src/layouts/NewTransaction/Multisend/index.tsx b/apps/multisig/src/layouts/NewTransaction/Multisend/index.tsx index de5a11c6..c78a4502 100644 --- a/apps/multisig/src/layouts/NewTransaction/Multisend/index.tsx +++ b/apps/multisig/src/layouts/NewTransaction/Multisend/index.tsx @@ -31,7 +31,7 @@ const MultiSend = () => { const apiLoadable = useRecoilValueLoadable(pjsApiSelector(multisig.chain.genesisHash)) const { toast } = useToast() const permissions = hasPermission(multisig, 'transfer') - const { addresses } = useKnownAddresses(multisig.orgId) + const { addresses } = useKnownAddresses({ orgId: multisig.orgId }) const newSends = useRecoilValue(multisendSendsAtom) const unit = useRecoilValue(multisendAmountUnitAtom) const token = useRecoilValue(multisendTokenAtom) diff --git a/apps/multisig/src/layouts/NewTransaction/Send/DetailsForm.tsx b/apps/multisig/src/layouts/NewTransaction/Send/DetailsForm.tsx index 906e05bc..5f6a41cb 100644 --- a/apps/multisig/src/layouts/NewTransaction/Send/DetailsForm.tsx +++ b/apps/multisig/src/layouts/NewTransaction/Send/DetailsForm.tsx @@ -69,7 +69,7 @@ export const DetailsForm: React.FC<Props> = ({ }) => { const [addressError, setAddressError] = useState<boolean>(false) const [multisig] = useSelectedMultisig() - const { addresses } = useKnownAddresses(multisig.orgId) + const { addresses } = useKnownAddresses({ orgId: multisig.orgId }) const { hasDelayedPermission, hasNonDelayedPermission } = hasPermission(multisig, 'transfer') const vestingConsts = useRecoilValueLoadable(vestingConstsSelector(multisig.chain.genesisHash)) diff --git a/apps/multisig/src/layouts/Overview/Transactions/TransactionDetailsExpandable.tsx b/apps/multisig/src/layouts/Overview/Transactions/TransactionDetailsExpandable.tsx index e12b7034..0188f372 100644 --- a/apps/multisig/src/layouts/Overview/Transactions/TransactionDetailsExpandable.tsx +++ b/apps/multisig/src/layouts/Overview/Transactions/TransactionDetailsExpandable.tsx @@ -116,7 +116,7 @@ const MultisigCallDataBox: React.FC<{ calldata: `0x${string}`; genesisHash: stri } const ChangeConfigExpandedDetails = ({ t }: { t: Transaction }) => { - const { contactByAddress } = useKnownAddresses(t.multisig.orgId) + const { contactByAddress } = useKnownAddresses({ orgId: t.multisig.orgId }) return ( <div> <div css={{ display: 'grid', gap: 12, marginTop: '8px' }}> @@ -155,7 +155,7 @@ const ChangeConfigExpandedDetails = ({ t }: { t: Transaction }) => { const MultiSendExpandedDetails = ({ t }: { t: Transaction }) => { const recipientAddresses = t.decoded?.recipients.map(r => r.address.toSs58()) - const { contactByAddress, isLoading } = useKnownAddresses(t.multisig.orgId, {}, recipientAddresses) + const { contactByAddress, isLoading } = useKnownAddresses({ orgId: t.multisig.orgId, addresses: recipientAddresses }) const shouldDisplayCategory = t.decoded?.recipients.some(r => contactByAddress[r.address.toSs58()]?.category) || isLoading const shouldDisplaySubcategory = @@ -325,13 +325,11 @@ const TransactionDetailsHeaderContent: React.FC<{ t: Transaction }> = ({ t }) => const recipients = t.decoded?.recipients || [] const [recipient] = t.decoded?.recipients || [] const recipientAddress = recipient?.address.toSs58() - const { contactByAddress, isLoading } = useKnownAddresses( - t.multisig.orgId, - { - includeContracts: true, - }, - recipients.length === 1 && recipientAddress ? [recipientAddress] : [] - ) + const { contactByAddress, isLoading } = useKnownAddresses({ + orgId: t.multisig.orgId, + includeContracts: true, + addresses: recipients.length === 1 && recipientAddress ? [recipientAddress] : [], + }) if (!t.decoded) return null diff --git a/apps/multisig/src/layouts/Overview/Transactions/TransactionSummaryRow.tsx b/apps/multisig/src/layouts/Overview/Transactions/TransactionSummaryRow.tsx index 0c67cced..d1d15f19 100644 --- a/apps/multisig/src/layouts/Overview/Transactions/TransactionSummaryRow.tsx +++ b/apps/multisig/src/layouts/Overview/Transactions/TransactionSummaryRow.tsx @@ -38,9 +38,10 @@ const TransactionSummaryRow = ({ showShareButton?: boolean onClick?: () => void }) => { - const { contactByAddress, isLoading } = useKnownAddresses(t.multisig.orgId, {}, [ - t?.draft?.creator.address.toSs58() || '', - ]) + const { contactByAddress, isLoading } = useKnownAddresses({ + orgId: t.multisig.orgId, + addresses: [t?.draft?.creator.address.toSs58() || ''], + }) const sumOutgoing: Balance[] = useMemo(() => calcSumOutgoing(t), [t]) const combinedView = useRecoilValue(combinedViewState) const tokenPrices = useRecoilValueLoadable(tokenPricesState(sumOutgoing.map(b => b.token))) diff --git a/apps/multisig/src/layouts/Overview/VaultOverview.tsx b/apps/multisig/src/layouts/Overview/VaultOverview.tsx index 410c18cf..d9beb721 100644 --- a/apps/multisig/src/layouts/Overview/VaultOverview.tsx +++ b/apps/multisig/src/layouts/Overview/VaultOverview.tsx @@ -26,7 +26,10 @@ export const VaultOverview: React.FC = () => { const [showMembers, setShowMembers] = useRecoilState(showMemberState) const { copy, copied } = useCopied() const signersAddresses = selectedMultisig.signers.map(signer => signer.toSs58()) - const { contactByAddress, isLoading } = useKnownAddresses(selectedMultisig.orgId, {}, signersAddresses) + const { contactByAddress, isLoading } = useKnownAddresses({ + orgId: selectedMultisig.orgId, + addresses: signersAddresses, + }) return ( <section className="flex flex-col p-[24px] rounded-2xl bg-gray-800"> diff --git a/apps/multisig/src/layouts/Settings/RecoverMultisig.tsx b/apps/multisig/src/layouts/Settings/RecoverMultisig.tsx index 70d8d4d9..01d9e51a 100644 --- a/apps/multisig/src/layouts/Settings/RecoverMultisig.tsx +++ b/apps/multisig/src/layouts/Settings/RecoverMultisig.tsx @@ -29,7 +29,7 @@ const ScannedMultisigs: React.FC<{ onSelect: (multisig: { signers: Address[]; threshold: number; address: Address }) => void }> = ({ chain, multisigs, onSelect, orgId }) => { const signersAddresses = useMemo(() => multisigs.flatMap(m => m.signers.map(signer => signer.toSs58())), [multisigs]) - const { contactByAddress, isLoading } = useKnownAddresses(orgId, {}, signersAddresses) + const { contactByAddress, isLoading } = useKnownAddresses({ orgId, addresses: signersAddresses }) return ( <div className="grid gap-[8px] max-h-[400px] overflow-y-auto"> {multisigs.map(multisig => ( diff --git a/apps/multisig/src/layouts/Settings/SignersSettings.tsx b/apps/multisig/src/layouts/Settings/SignersSettings.tsx index 577377b5..8d38bdf4 100644 --- a/apps/multisig/src/layouts/Settings/SignersSettings.tsx +++ b/apps/multisig/src/layouts/Settings/SignersSettings.tsx @@ -24,7 +24,7 @@ export const SignersSettings: React.FC<Props> = ({ capHeight, editable, error, m addresses: knownAddresses, contactByAddress, isLoading, - } = useKnownAddresses(multisig.orgId, {}, membersAddresses) + } = useKnownAddresses({ orgId: multisig.orgId, addresses: membersAddresses }) const prevLength = useRef(members.length) const scrollView = useRef<HTMLDivElement>(null) diff --git a/apps/multisig/src/layouts/SmartContracts/DeployContractExpandedDetails.tsx b/apps/multisig/src/layouts/SmartContracts/DeployContractExpandedDetails.tsx index 9bf6cd38..56167fe4 100644 --- a/apps/multisig/src/layouts/SmartContracts/DeployContractExpandedDetails.tsx +++ b/apps/multisig/src/layouts/SmartContracts/DeployContractExpandedDetails.tsx @@ -32,7 +32,8 @@ const IS_ADDRESS: Record<string, boolean> = { export const DeployContractExpandedDetails: React.FC<{ t: Transaction }> = ({ t }) => { const { api } = useApi(t.multisig.chain.genesisHash) const { decimal, symbol } = useTokenByChain(t.multisig.chain.genesisHash) - const { contactByAddress } = useKnownAddresses(t.multisig.orgId, { + const { contactByAddress } = useKnownAddresses({ + orgId: t.multisig.orgId, includeContracts: true, includeSelectedMultisig: true, }) diff --git a/apps/multisig/src/layouts/SmartContracts/SmartContractCallExpandedDetails.tsx b/apps/multisig/src/layouts/SmartContracts/SmartContractCallExpandedDetails.tsx index 1329e6c8..0a17b3f7 100644 --- a/apps/multisig/src/layouts/SmartContracts/SmartContractCallExpandedDetails.tsx +++ b/apps/multisig/src/layouts/SmartContracts/SmartContractCallExpandedDetails.tsx @@ -37,7 +37,8 @@ export const SmartContractCallExpandedDetails: React.FC<{ t: Transaction }> = ({ const { api } = useApi(t.multisig.chain.genesisHash) const { contract, contractDetails, loading } = useContractByAddress(t.decoded?.contractCall?.address, api) const { symbol, decimal } = useTokenByChain(t.multisig.chain.genesisHash) - const { contactByAddress } = useKnownAddresses(t.multisig.orgId, { + const { contactByAddress } = useKnownAddresses({ + orgId: t.multisig.orgId, includeContracts: true, includeSelectedMultisig: true, }) From a193a74f887234e81488952963805a365bf90213 Mon Sep 17 00:00:00 2001 From: Will Urban <will.urban.dev@gmail.com> Date: Tue, 15 Oct 2024 14:14:25 +0700 Subject: [PATCH 11/11] Update apps/multisig/src/domains/offchain-data/address-book/hooks/useGetAddressesByOrgIdAndAddress.ts Co-authored-by: Chris Ling <81092286+chrisling-dev@users.noreply.github.com> --- .../address-book/hooks/useGetAddressesByOrgIdAndAddress.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/multisig/src/domains/offchain-data/address-book/hooks/useGetAddressesByOrgIdAndAddress.ts b/apps/multisig/src/domains/offchain-data/address-book/hooks/useGetAddressesByOrgIdAndAddress.ts index 5e0c5a3c..4fd423ef 100644 --- a/apps/multisig/src/domains/offchain-data/address-book/hooks/useGetAddressesByOrgIdAndAddress.ts +++ b/apps/multisig/src/domains/offchain-data/address-book/hooks/useGetAddressesByOrgIdAndAddress.ts @@ -45,8 +45,7 @@ const useGetAddressesByOrgIdAndAddress = (addresses: string[]) => { const [selectedMultisig] = useSelectedMultisig() return useQuery({ queryKey: ['addresses', selectedMultisig.id, addresses], - queryFn: async () => - fetchGraphQLData({ orgId: selectedMultisig.orgId, addresses, selectedAccount: selectedAccount! }), + queryFn: () => fetchGraphQLData({ orgId: selectedMultisig.orgId, addresses, selectedAccount: selectedAccount! }), enabled: !!selectedAccount && addresses.length > 0, }) }