11import { useSafeAppsSDK } from "@gnosis.pm/safe-apps-react-sdk" ;
2- import { BaseTransaction } from "@gnosis.pm/safe-apps-sdk" ;
3- import { Breadcrumb , BreadcrumbElement , Button , Card , Divider , Loader , Text } from "@gnosis.pm/safe-react-components" ;
2+ import { BaseTransaction , GatewayTransactionDetails } from "@gnosis.pm/safe-apps-sdk" ;
3+ import { Breadcrumb , BreadcrumbElement , Button , Card , Divider , Loader } from "@gnosis.pm/safe-react-components" ;
44import { setUseWhatChange } from "@simbathesailor/use-what-changed" ;
55import React , { useCallback , useState , useContext } from "react" ;
66import styled from "styled-components" ;
77
88import { CSVForm } from "./components/CSVForm" ;
99import { Header } from "./components/Header" ;
10+ import { Loading } from "./components/Loading" ;
1011import { Summary } from "./components/Summary" ;
12+ import { TransactionStatusScreen } from "./components/TransactionStatusScreen" ;
1113import { MessageContext } from "./contexts/MessageContextProvider" ;
1214import { useBalances } from "./hooks/balances" ;
1315import { useTokenList } from "./hooks/token" ;
@@ -21,11 +23,9 @@ const App: React.FC = () => {
2123 const balanceLoader = useBalances ( ) ;
2224 const [ tokenTransfers , setTokenTransfers ] = useState < Transfer [ ] > ( [ ] ) ;
2325 const { messages } = useContext ( MessageContext ) ;
24-
25- const [ submitting , setSubmitting ] = useState ( false ) ;
2626 const [ parsing , setParsing ] = useState ( false ) ;
2727 const { sdk } = useSafeAppsSDK ( ) ;
28-
28+ const [ pendingTx , setPendingTx ] = useState < GatewayTransactionDetails > ( ) ;
2929 const assetTransfers = tokenTransfers . filter (
3030 ( transfer ) => transfer . token_type === "erc20" || transfer . token_type === "native" ,
3131 ) as AssetTransfer [ ] ;
@@ -34,7 +34,6 @@ const App: React.FC = () => {
3434 ) as CollectibleTransfer [ ] ;
3535
3636 const submitTx = useCallback ( async ( ) => {
37- setSubmitting ( true ) ;
3837 try {
3938 const txs : BaseTransaction [ ] = [ ] ;
4039 txs . push ( ...buildAssetTransfers ( assetTransfers ) ) ;
@@ -43,11 +42,10 @@ const App: React.FC = () => {
4342 console . log ( `Encoded ${ txs . length } transfers.` ) ;
4443 const sendTxResponse = await sdk . txs . send ( { txs } ) ;
4544 const safeTx = await sdk . txs . getBySafeTxHash ( sendTxResponse . safeTxHash ) ;
46- console . log ( { safeTx } ) ;
45+ setPendingTx ( safeTx ) ;
4746 } catch ( e ) {
4847 console . error ( e ) ;
4948 }
50- setSubmitting ( false ) ;
5149 } , [ assetTransfers , collectibleTransfers , sdk . txs ] ) ;
5250
5351 return (
@@ -56,42 +54,25 @@ const App: React.FC = () => {
5654 {
5755 < >
5856 { isLoading || balanceLoader . isLoading ? (
59- < >
60- < div
61- style = { {
62- display : "flex" ,
63- flexDirection : "column" ,
64- alignItems : "center" ,
65- width : "100%" ,
66- paddingTop : "36px" ,
67- } }
68- >
69- < Text size = { "xl" } strong >
70- Loading tokenlist and balances...
71- </ Text >
72- < Loader size = { "md" } />
73- </ div >
74- </ >
57+ < Loading />
7558 ) : (
7659 < Card className = "cardWithCustomShadow" >
77- < Breadcrumb >
78- < BreadcrumbElement text = "CSV Transfer File" iconType = "paste" />
79- </ Breadcrumb >
80- < CSVForm updateTransferTable = { setTokenTransfers } setParsing = { setParsing } />
81- < Divider />
60+ { ! pendingTx && (
61+ < >
62+ < Breadcrumb >
63+ < BreadcrumbElement text = "CSV Transfer File" iconType = "paste" />
64+ </ Breadcrumb >
65+ < CSVForm updateTransferTable = { setTokenTransfers } setParsing = { setParsing } />
66+ < Divider />
67+ </ >
68+ ) }
8269 < Breadcrumb >
8370 < BreadcrumbElement text = "Summary" iconType = "transactionsInactive" />
8471 < BreadcrumbElement text = "Transfers" color = "placeHolder" />
8572 </ Breadcrumb >
8673 < Summary assetTransfers = { assetTransfers } collectibleTransfers = { collectibleTransfers } />
87- { submitting ? (
88- < >
89- < Loader size = "md" />
90- < br />
91- < Button size = "lg" color = "secondary" onClick = { ( ) => setSubmitting ( false ) } >
92- Cancel
93- </ Button >
94- </ >
74+ { pendingTx ? (
75+ < TransactionStatusScreen tx = { pendingTx } reset = { ( ) => setPendingTx ( undefined ) } />
9576 ) : (
9677 < Button
9778 style = { { alignSelf : "flex-start" , marginTop : 16 , marginBottom : 16 } }
0 commit comments