diff --git a/src/App/index.tsx b/src/App/index.tsx
index 8d6684fdb0..456b7e0d2a 100644
--- a/src/App/index.tsx
+++ b/src/App/index.tsx
@@ -31,6 +31,7 @@ import TermModal from './TermModal'
import TermContext from 'src/logic/TermContext'
import { fetchAllValidator } from 'src/logic/validator/store/actions'
+import ReceiveModal from './ReceiveModal'
const notificationStyles = {
success: {
@@ -76,7 +77,7 @@ const App: React.FC = ({ children }) => {
const { name: safeName, totalFiatBalance: currentSafeBalance } = useSelector(currentSafeWithNames)
const safeAddress = extractSafeAddress()
const safeId = extractSafeId()
- const { onShow, showSendFunds } = useSafeActions()
+ const { onShow, onHide, showSendFunds, safeActionsState } = useSafeActions()
const { connectWalletState, onConnectWalletShow, onConnectWalletHide } = useConnectWallet()
const currentCurrency = useSelector(currentCurrencySelector)
const granted = useSelector(grantedSelector)
@@ -91,6 +92,7 @@ const App: React.FC = ({ children }) => {
!!formattedTotalBalance && !!currentCurrency ? `${formattedTotalBalance} ${currentCurrency}` : undefined
const onReceiveShow = () => onShow('Receive')
+ const onReceiveHide = () => onHide('Receive')
const onTermHide = () => {
termContext?.SetTerm(false)
@@ -139,6 +141,18 @@ const App: React.FC = ({ children }) => {
onClose={onConnectWalletHide}
>
+ {safeAddress && (
+
+
+
+ )}
+
diff --git a/src/components/FeeAndSequence/index.tsx b/src/components/FeeAndSequence/index.tsx
index 247b980cc3..119cf8a8bd 100644
--- a/src/components/FeeAndSequence/index.tsx
+++ b/src/components/FeeAndSequence/index.tsx
@@ -31,6 +31,7 @@ export default function FeeAndSequence({
useEffect(() => {
setSequence(nextQueueSeq)
}, [nextQueueSeq])
+
useEffect(() => {
recalculateFee()
}, [manualGasLimit])
diff --git a/src/components/Input/TxMemo/index.tsx b/src/components/Input/TxMemo/index.tsx
index 4c81f15512..bed1f60c8e 100644
--- a/src/components/Input/TxMemo/index.tsx
+++ b/src/components/Input/TxMemo/index.tsx
@@ -3,10 +3,11 @@ import TextField from '../TextField'
type Props = {
txMemo: string
setTxMemo: React.Dispatch>
+ disabled?: boolean
}
-const TxMemo = ({ txMemo, setTxMemo }: Props) => {
+const TxMemo = ({ txMemo, setTxMemo, disabled }: Props) => {
return (
-
+
)
}
diff --git a/src/layout/Sidebar/index.tsx b/src/layout/Sidebar/index.tsx
index 17314f6ef6..d47f66a28a 100644
--- a/src/layout/Sidebar/index.tsx
+++ b/src/layout/Sidebar/index.tsx
@@ -1,6 +1,3 @@
-import styled from 'styled-components'
-import { Divider } from '@aura/safe-react-components'
-
import List, { ListItemType } from 'src/components/List'
import SafeHeader from './SafeHeader'
diff --git a/src/logic/safe/store/actions/fetchSafe.ts b/src/logic/safe/store/actions/fetchSafe.ts
index 1774f82ff0..ea91a0eab7 100644
--- a/src/logic/safe/store/actions/fetchSafe.ts
+++ b/src/logic/safe/store/actions/fetchSafe.ts
@@ -13,7 +13,7 @@ import { SafeRecordProps } from 'src/logic/safe/store/models/safe'
import { getLocalSafe } from 'src/logic/safe/utils'
import { getSafeInfo } from 'src/logic/safe/utils/safeInformation'
import { fetchMSafeTokens } from 'src/logic/tokens/store/actions/fetchSafeTokens'
-import { fetchAccountInfo, getAccountAsset, getMSafeInfo } from 'src/services'
+import { fetchAccountInfo, getAccountAsset, getMSafeInfo, getMSafeNextSeq } from 'src/services'
import { IMSafeInfo } from 'src/types/safe'
import { humanReadableValue } from 'src/utils'
import { checksumAddress } from 'src/utils/checksumAddress'
@@ -143,9 +143,10 @@ export const fetchMSafe =
let mSafeInfo: IMSafeInfo | null = null
let accountInfo: SequenceResponse | null = null
let isSafeLoaded = false
+ let nextQueueSeq = ''
try {
- ;[mSafeInfo, remoteSafeInfo, accountInfo, isSafeLoaded] = await _getSafeInfo(safeAddress, safeId)
+ ;[mSafeInfo, remoteSafeInfo, accountInfo, isSafeLoaded, nextQueueSeq] = await _getSafeInfo(safeAddress, safeId)
} catch (err) {
console.error(err)
}
@@ -164,7 +165,7 @@ export const fetchMSafe =
safeInfo = await extractRemoteSafeInfo(remoteSafeInfo)
const onlineData: SequenceResponse | null = accountInfo
- safeInfo.nextQueueSeq = mSafeInfo?.nextQueueSeq || onlineData?.sequence?.toString()
+ safeInfo.nextQueueSeq = nextQueueSeq || onlineData?.sequence?.toString()
safeInfo.sequence = mSafeInfo?.sequence || onlineData?.sequence?.toString()
const coinDecimal = getCoinDecimal()
const { txQueuedTag, txHistoryTag, balances } = currentSafeWithNames(state)
@@ -217,18 +218,25 @@ export const fetchMSafe =
async function _getSafeInfo(
safeAddress: string,
safeId: number,
-): Promise<[IMSafeInfo, SafeInfo, SequenceResponse, boolean]> {
+): Promise<[IMSafeInfo, SafeInfo, SequenceResponse, boolean, string]> {
const getAccountAssetPromise = getAccountAsset(safeAddress)
const getMSafeInfoPromise = getMSafeInfo(safeId)
const getAccountInfoPromise = fetchAccountInfo(safeAddress)
+ const getMSafeNextSeqPromise = getMSafeNextSeq(safeId)
- const results = await Promise.allSettled([getAccountAssetPromise, getMSafeInfoPromise, getAccountInfoPromise])
+ const results = await Promise.allSettled([
+ getAccountAssetPromise,
+ getMSafeInfoPromise,
+ getAccountInfoPromise,
+ getMSafeNextSeqPromise,
+ ])
- const [accountAssetDataResult, mSafeInfotDataResult, accountInfoDataResult] = results
+ const [accountAssetDataResult, mSafeInfotDataResult, accountInfoDataResult, nextQueueSeqResult] = results
const accountAssetData = accountAssetDataResult.status === 'fulfilled' ? accountAssetDataResult.value : null
const mSafeInfotData = mSafeInfotDataResult.status === 'fulfilled' ? mSafeInfotDataResult.value : null
const accountInfoData = accountInfoDataResult.status === 'fulfilled' ? accountInfoDataResult.value : null
+ const nextQueueSeq = nextQueueSeqResult.status === 'fulfilled' ? nextQueueSeqResult.value : ''
if (!mSafeInfotData) {
throw new Error('Get Safe Info failed')
@@ -316,5 +324,5 @@ async function _getSafeInfo(
txHistoryTag: mSafeInfotData.txHistoryTag,
}
- return [formatMSafeInfotData, safeInfoData, accountInfoData, isSafeLoaded]
+ return [formatMSafeInfotData, safeInfoData, accountInfoData, isSafeLoaded, nextQueueSeq]
}
diff --git a/src/pages/Assets/Tokens/index.tsx b/src/pages/Assets/Tokens/index.tsx
index 316e5507e5..c70b250551 100644
--- a/src/pages/Assets/Tokens/index.tsx
+++ b/src/pages/Assets/Tokens/index.tsx
@@ -16,6 +16,10 @@ import Checkbox from 'src/components/Input/Checkbox'
import { updateSafe } from 'src/logic/safe/store/actions/updateSafe'
import { loadFromLocalStorage } from 'src/utils/storage/local'
import { LS_TOKEN_CONFIG } from 'src/utils/constants'
+import useSafeActions from 'src/logic/safe/hooks/useSafeActions'
+import Modal from 'src/components/Modal'
+import { extractSafeAddress } from 'src/routes/routes'
+import ReceiveModal from 'src/App/ReceiveModal'
const Wrap = styled.div`
background: ${(props) => props.theme.backgroundPrimary};
@@ -86,9 +90,14 @@ function Tokens(props): ReactElement {
const [selectedToken, setSelectedToken] = useState('')
const [search, setSearch] = useState('')
const safeTokens: any = useSelector(extendedSafeTokensSelector)
- const { address, isHideZeroBalance } = useSelector(currentSafeWithNames)
+ const { name: safeName, address, isHideZeroBalance, coinConfig: coinConfigState } = useSelector(currentSafeWithNames)
const [hideZeroBalance, setHideZeroBalance] = useState(isHideZeroBalance)
const coinConfig = loadFromLocalStorage(LS_TOKEN_CONFIG) as any[]
+ const { onShow, onHide, safeActionsState } = useSafeActions()
+ const safeAddress = extractSafeAddress()
+
+ const onReceiveShow = () => onShow('Receive')
+ const onReceiveHide = () => onHide('Receive')
const getDefaultTokenConfig = (token) => ({
address: token.address,
@@ -112,10 +121,7 @@ function Tokens(props): ReactElement {
)
.map((token) => getDefaultTokenConfig(token))
- const getTokenConfig = (token) =>
- token.type === 'native' || coinConfig?.find((coin) => coin.address === token.address)?.enable
-
- const tokenConfig = [...safeTokens, ...(filteredTokens ?? [])].filter(getTokenConfig)
+ const tokenConfig = [...safeTokens, ...(filteredTokens ?? [])].filter((token) => token.type === 'native' || coinConfig?.find((coin) => coin.address === token.address)?.enable)
const [listToken, setListToken] = useState(
isHideZeroBalance ? tokenConfig.filter((token) => token.balance.tokenBalance > 0) : tokenConfig,
@@ -128,7 +134,7 @@ function Tokens(props): ReactElement {
return token?.name?.toLowerCase().includes(search) || token?.address?.toLowerCase().includes(search)
}),
)
- }, [safeTokens, hideZeroBalance])
+ }, [safeTokens, hideZeroBalance, coinConfigState])
const handleSearch = (event: ChangeEvent) => {
const searchTerm = event.target.value.toLowerCase()
@@ -200,7 +206,7 @@ function Tokens(props): ReactElement {
Send
-
+
Receive
@@ -210,7 +216,7 @@ function Tokens(props): ReactElement {
)
})}
- {}} onClose={() => setOpen(false)} />
+ { }} onClose={() => setOpen(false)} />
{keepMountedManagePopup && (
+
+
+
)
}
diff --git a/src/pages/Transactions/TxActionModal/ClaimReward/index.tsx b/src/pages/Transactions/TxActionModal/ClaimReward/index.tsx
index 8cb43f467b..a7f24df1df 100644
--- a/src/pages/Transactions/TxActionModal/ClaimReward/index.tsx
+++ b/src/pages/Transactions/TxActionModal/ClaimReward/index.tsx
@@ -116,7 +116,7 @@ export default function Execute({ open, onClose, data, sendTx, rejectTx, disable
>
)}
-
+
>
diff --git a/src/pages/Transactions/TxActionModal/ContractInteraction/index.tsx b/src/pages/Transactions/TxActionModal/ContractInteraction/index.tsx
index d27d2701ce..fa3d53edfc 100644
--- a/src/pages/Transactions/TxActionModal/ContractInteraction/index.tsx
+++ b/src/pages/Transactions/TxActionModal/ContractInteraction/index.tsx
@@ -125,7 +125,7 @@ export default function Execute({ open, onClose, data, sendTx, rejectTx, disable
>
)}
-
+
diff --git a/src/pages/Transactions/TxActionModal/CustomTransaction/index.tsx b/src/pages/Transactions/TxActionModal/CustomTransaction/index.tsx
index 7e44b04ffa..f21dbccc7d 100644
--- a/src/pages/Transactions/TxActionModal/CustomTransaction/index.tsx
+++ b/src/pages/Transactions/TxActionModal/CustomTransaction/index.tsx
@@ -147,7 +147,7 @@ export default function Execute({ open, onClose, data, sendTx, rejectTx, disable
>
)}
-
+
>
)}
-
+
diff --git a/src/pages/Transactions/TxActionModal/MultiSend/index.tsx b/src/pages/Transactions/TxActionModal/MultiSend/index.tsx
index b755566b04..c2626857ca 100644
--- a/src/pages/Transactions/TxActionModal/MultiSend/index.tsx
+++ b/src/pages/Transactions/TxActionModal/MultiSend/index.tsx
@@ -133,7 +133,7 @@ export default function Execute({ open, onClose, data, sendTx, rejectTx, disable
>
)}
-
+
diff --git a/src/pages/Transactions/TxActionModal/Redelegate/index.tsx b/src/pages/Transactions/TxActionModal/Redelegate/index.tsx
index a335ff1c0c..1fda20a74d 100644
--- a/src/pages/Transactions/TxActionModal/Redelegate/index.tsx
+++ b/src/pages/Transactions/TxActionModal/Redelegate/index.tsx
@@ -135,7 +135,7 @@ export default function Execute({ open, onClose, data, sendTx, rejectTx, disable
>
)}
-
+
diff --git a/src/pages/Transactions/TxActionModal/Send/index.tsx b/src/pages/Transactions/TxActionModal/Send/index.tsx
index 1be2f63cb8..c5e5daeeb2 100644
--- a/src/pages/Transactions/TxActionModal/Send/index.tsx
+++ b/src/pages/Transactions/TxActionModal/Send/index.tsx
@@ -123,7 +123,7 @@ export default function Execute({ open, onClose, data, sendTx, rejectTx, disable
>
)}
-
+
diff --git a/src/pages/Transactions/TxActionModal/Undelegate/index.tsx b/src/pages/Transactions/TxActionModal/Undelegate/index.tsx
index accc946f58..ac68401106 100644
--- a/src/pages/Transactions/TxActionModal/Undelegate/index.tsx
+++ b/src/pages/Transactions/TxActionModal/Undelegate/index.tsx
@@ -131,7 +131,7 @@ export default function Execute({ open, onClose, data, sendTx, rejectTx, disable
>
)}
-
+
diff --git a/src/pages/Transactions/TxActionModal/Vote/index.tsx b/src/pages/Transactions/TxActionModal/Vote/index.tsx
index 8b7375e2ae..7b62136142 100644
--- a/src/pages/Transactions/TxActionModal/Vote/index.tsx
+++ b/src/pages/Transactions/TxActionModal/Vote/index.tsx
@@ -130,7 +130,7 @@ export default function Execute({ open, onClose, data, sendTx, rejectTx, disable
>
)}
-
+
>
diff --git a/src/services/index.ts b/src/services/index.ts
index e58bac93a9..ddddf8efed 100644
--- a/src/services/index.ts
+++ b/src/services/index.ts
@@ -161,6 +161,10 @@ export async function getMSafeInfo(safeId: number): Promise {
return axios.get(`${baseUrl}/multisigwallet/${safeId}`).then((res) => res.data.Data)
}
+export async function getMSafeNextSeq(safeId: number): Promise {
+ return axios.get(`${baseUrl}/transaction/next-seq?safeId=${safeId}`).then((res) => res.data.nextSequence)
+}
+
export async function getAccountAsset(safeAddress: string): Promise {
const chainInfo = getChainInfo() as any
return axios