diff --git a/amplify/backend/function/fetchColonyBalances/src/index.js b/amplify/backend/function/fetchColonyBalances/src/index.js index 09964cab604..bb2d557e401 100644 --- a/amplify/backend/function/fetchColonyBalances/src/index.js +++ b/amplify/backend/function/fetchColonyBalances/src/index.js @@ -128,7 +128,11 @@ exports.handler = async ({ source: { id: colonyAddress } }) => { }; }); - tokens.map(async ({ token }) => { + const mainChainTokens = tokens.filter( + (token) => token.token.chainMetadata.chainId === chainId, + ); + + mainChainTokens.map(async ({ token }) => { const { id: tokenAddress } = token; balances.push(async () => { @@ -201,7 +205,11 @@ exports.handler = async ({ source: { id: colonyAddress } }) => { }; }); - tokens.map(async ({ token }) => { + const proxyChainTokens = tokens.filter( + (token) => token.token.chainMetadata.chainId === proxyChainId, + ); + + proxyChainTokens.map(async ({ token }) => { const { id: tokenAddress } = token; balances.push(async () => { diff --git a/amplify/backend/function/fetchTokenFromChain/src/index.js b/amplify/backend/function/fetchTokenFromChain/src/index.js index 332ac788f3e..69fbc6e77fc 100644 --- a/amplify/backend/function/fetchTokenFromChain/src/index.js +++ b/amplify/backend/function/fetchTokenFromChain/src/index.js @@ -32,6 +32,9 @@ const baseToken = { decimals: null, type: null, colonies: null, + chainMetadata: { + chainId: '', + }, }; const setEnvVariables = async (network) => { diff --git a/src/components/v5/common/ActionSidebar/partials/AmountField/AmountField.tsx b/src/components/v5/common/ActionSidebar/partials/AmountField/AmountField.tsx index 8b4ab996e5e..e0c68c2a48a 100644 --- a/src/components/v5/common/ActionSidebar/partials/AmountField/AmountField.tsx +++ b/src/components/v5/common/ActionSidebar/partials/AmountField/AmountField.tsx @@ -105,6 +105,7 @@ const AmountField: FC = ({ if (selectedToken?.tokenAddress) { tokenAddressController.onChange(selectedToken.tokenAddress); } + // eslint-disable-next-line react-hooks/exhaustive-deps -- tokenAddressController deliberately omitted }, [selectedToken?.tokenAddress]); const handleTokenSelect = (selectedTokenAddress: string) => { diff --git a/src/components/v5/common/ActionSidebar/partials/AmountField/hooks.ts b/src/components/v5/common/ActionSidebar/partials/AmountField/hooks.ts index f45f7cb60ad..89b6799c50d 100644 --- a/src/components/v5/common/ActionSidebar/partials/AmountField/hooks.ts +++ b/src/components/v5/common/ActionSidebar/partials/AmountField/hooks.ts @@ -2,15 +2,19 @@ import { type FormatNumeralOptions } from 'cleave-zen'; import { useMemo } from 'react'; import { useFormContext } from 'react-hook-form'; +import { DEFAULT_NETWORK_INFO } from '~constants'; import { useColonyContext } from '~context/ColonyContext/ColonyContext.ts'; import { notNull } from '~utils/arrays/index.ts'; import { getTokenDecimalsWithFallback } from '~utils/tokens.ts'; import { CHAIN_FIELD_NAME } from '~v5/common/ActionSidebar/consts.ts'; export const useAmountField = (selectedTokenAddress: string | undefined) => { - const { colony } = useColonyContext(); + const { + colony, + colony: { nativeToken }, + } = useColonyContext(); const { watch } = useFormContext(); - const chainId = watch(CHAIN_FIELD_NAME); + const chainId = watch(CHAIN_FIELD_NAME) ?? DEFAULT_NETWORK_INFO.chainId; const colonyTokens = colony.tokens?.items @@ -21,7 +25,11 @@ export const useAmountField = (selectedTokenAddress: string | undefined) => { const selectedToken = colonyTokens.find( (token) => token?.tokenAddress === selectedTokenAddress, - ) || colonyTokens[0]; + ) || + colonyTokens.find( + (token) => token?.tokenAddress === nativeToken.tokenAddress, + ) || + colonyTokens[0]; const formattingOptions: FormatNumeralOptions = useMemo( () => ({ diff --git a/src/utils/validation/hasEnoughFundsValidation.ts b/src/utils/validation/hasEnoughFundsValidation.ts index 5886a214c80..25876a9ac81 100644 --- a/src/utils/validation/hasEnoughFundsValidation.ts +++ b/src/utils/validation/hasEnoughFundsValidation.ts @@ -3,7 +3,6 @@ import { BigNumber } from 'ethers'; import moveDecimal from 'move-decimal-point'; import { type TestContext } from 'yup'; -import { DEFAULT_NETWORK_INFO } from '~constants'; import { type Colony } from '~types/graphql.ts'; import { notNull } from '~utils/arrays/index.ts'; import { @@ -35,20 +34,20 @@ export const hasEnoughFundsValidation = ({ return false; } const { parent } = context; - const { tokenAddress: tokenAddressFieldValue, chainId } = parent || {}; + const { tokenAddress: tokenAddressFieldValue, chain: chainId } = parent || {}; - // @TODO hook this up with actual balances - if (chainId !== DEFAULT_NETWORK_INFO.chainId) { - return true; - } const colonyTokens = colony.tokens?.items .filter(notNull) .map((colonyToken) => colonyToken.token) || []; const selectedToken = colonyTokens.find( - ({ tokenAddress: selectedTokenAddress }) => - selectedTokenAddress === tokenAddressFieldValue || tokenAddress, + ({ + tokenAddress: selectedTokenAddress, + chainMetadata: { chainId: selectedChainId }, + }) => + (selectedTokenAddress === tokenAddressFieldValue || tokenAddress) && + selectedChainId === chainId, ); if (!selectedToken) {