From ddde841c7aa4073ee318f0519f601899ceb8d086 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sun, 18 May 2025 16:34:00 +0300 Subject: [PATCH] added initial fetch of tradeoffers without socket --- src/components/Grids/TradeOffers.tsx | 45 ++++++++++++++++++++++-- src/components/sell/CreateSell.tsx | 11 ++++-- src/components/sell/StuckOrdersTable.tsx | 5 +-- 3 files changed, 54 insertions(+), 7 deletions(-) diff --git a/src/components/Grids/TradeOffers.tsx b/src/components/Grids/TradeOffers.tsx index 7e071ac..acee8f1 100644 --- a/src/components/Grids/TradeOffers.tsx +++ b/src/components/Grids/TradeOffers.tsx @@ -440,7 +440,7 @@ export const TradeOffers: React.FC = ({ }; }, []); - const processOffersWithPresence = () => { + const processOffersWithPresence = useCallback(() => { if (offeringTrades.current === null) return; async function asyncForEach(array: any, callback: any) { for (let index = 0; index < array.length; index++) { @@ -496,7 +496,7 @@ export const TradeOffers: React.FC = ({ }; startOfferPresenceMapping(); - }; + },[setStuckTrades]); const restartTradeOffersWebSocket = () => { setTimeout(() => initTradeOffersWebSocket(true), 50); @@ -543,8 +543,44 @@ export const TradeOffers: React.FC = ({ }; }; - const initTradeOffersWebSocket = (restarted = false) => { + const fetchOffers = useCallback(async (selectedCoin) => { + try { + + const response = await fetch( + `/crosschain/tradeoffers?foreignBlockchain=${selectedCoin}&includeHistoric=true` + ); + const data = await response.json(); + const transformed = data.map(item => ({ + qortalAtAddress: item.qortalAtAddress, + qortalCreator: item.qortalCreator, + qortalCreatorTradeAddress: item.qortalCreatorTradeAddress, + qortAmount: item.qortAmount, + btcAmount: item.expectedBitcoin ?? item.btcAmount, // fallback if already correct + foreignAmount: item.expectedForeignAmount ?? item.foreignAmount, + tradeTimeout: item.tradeTimeout, + mode: item.mode, + timestamp: item.timestamp ?? item.creationTimestamp, + foreignBlockchain: item.foreignBlockchain, + acctName: item.acctName + })); + + console.log('data', data) + offeringTrades.current = [ + ...transformed?.filter( + (coin) => coin?.foreignBlockchain === selectedCoin && coin?.mode === 'OFFERING' + ), + ]; + processOffersWithPresence(); + } catch (error) { + console.error(error) + } + },[]); + + const initTradeOffersWebSocket = async (restarted = false) => { if (socketRef.current) return; + if(restarted === false){ + await fetchOffers(selectedCoin) + } let socketTimeout: any; let socketLink; @@ -588,6 +624,9 @@ export const TradeOffers: React.FC = ({ }; }; + + + useEffect(() => { if (isUsingGateway === null) return; blockedTradesList.current = JSON.parse( diff --git a/src/components/sell/CreateSell.tsx b/src/components/sell/CreateSell.tsx index c395779..14720f4 100644 --- a/src/components/sell/CreateSell.tsx +++ b/src/components/sell/CreateSell.tsx @@ -356,8 +356,15 @@ export const CreateSell = ({ qortAddress, show }) => { const StuckOrders = ({setOpenStuckOrders})=> { const [stuckTrades] = useAtom(stuckTradesAtom) const address = useGlobal().auth.address - const filteredByAddress = stuckTrades?.filter((item)=> item?.qortalCreator === address) - + const filteredByAddress = stuckTrades + ?.filter((item) => item?.qortalCreator === address) + .sort((a, b) => { + const timestampA = a?.timestamp ?? a?.creationTimestamp ?? 0; + const timestampB = b?.timestamp ?? b?.creationTimestamp ?? 0; + return timestampB - timestampA; // Newest first + }); + + console.log('filteredByAddress', filteredByAddress) return ( = { @@ -87,7 +88,7 @@ function rowContent(_index: number, row: AtData) { return ( <> - {formatTimestampForum(row?.timestamp)} + {formatTimestampForum(row?.timestamp || row?.creationTimestamp)} {row?.qortAmount}