added initial fetch of tradeoffers without socket

This commit is contained in:
PhilReact 2025-05-18 16:34:00 +03:00
parent 889a1e06da
commit ddde841c7a
3 changed files with 54 additions and 7 deletions

View File

@ -440,7 +440,7 @@ export const TradeOffers: React.FC<any> = ({
}; };
}, []); }, []);
const processOffersWithPresence = () => { const processOffersWithPresence = useCallback(() => {
if (offeringTrades.current === null) return; if (offeringTrades.current === null) return;
async function asyncForEach(array: any, callback: any) { async function asyncForEach(array: any, callback: any) {
for (let index = 0; index < array.length; index++) { for (let index = 0; index < array.length; index++) {
@ -496,7 +496,7 @@ export const TradeOffers: React.FC<any> = ({
}; };
startOfferPresenceMapping(); startOfferPresenceMapping();
}; },[setStuckTrades]);
const restartTradeOffersWebSocket = () => { const restartTradeOffersWebSocket = () => {
setTimeout(() => initTradeOffersWebSocket(true), 50); setTimeout(() => initTradeOffersWebSocket(true), 50);
@ -543,8 +543,44 @@ export const TradeOffers: React.FC<any> = ({
}; };
}; };
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 (socketRef.current) return;
if(restarted === false){
await fetchOffers(selectedCoin)
}
let socketTimeout: any; let socketTimeout: any;
let socketLink; let socketLink;
@ -588,6 +624,9 @@ export const TradeOffers: React.FC<any> = ({
}; };
}; };
useEffect(() => { useEffect(() => {
if (isUsingGateway === null) return; if (isUsingGateway === null) return;
blockedTradesList.current = JSON.parse( blockedTradesList.current = JSON.parse(

View File

@ -356,8 +356,15 @@ export const CreateSell = ({ qortAddress, show }) => {
const StuckOrders = ({setOpenStuckOrders})=> { const StuckOrders = ({setOpenStuckOrders})=> {
const [stuckTrades] = useAtom(stuckTradesAtom) const [stuckTrades] = useAtom(stuckTradesAtom)
const address = useGlobal().auth.address 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 ( return (
<BootstrapDialog <BootstrapDialog
aria-labelledby="customized-dialog-title" aria-labelledby="customized-dialog-title"

View File

@ -24,7 +24,8 @@ interface AtData {
foreignBlockchain: string; foreignBlockchain: string;
foreignAmount: number; foreignAmount: number;
qortalAtAddress: string; qortalAtAddress: string;
timestamp: number timestamp?: number
creationTimestamp?: number
} }
const VirtuosoTableComponents: TableComponents<AtData> = { const VirtuosoTableComponents: TableComponents<AtData> = {
@ -87,7 +88,7 @@ function rowContent(_index: number, row: AtData) {
return ( return (
<> <>
<TableCell>{formatTimestampForum(row?.timestamp)}</TableCell> <TableCell>{formatTimestampForum(row?.timestamp || row?.creationTimestamp)}</TableCell>
<TableCell>{row?.qortAmount}</TableCell> <TableCell>{row?.qortAmount}</TableCell>
<TableCell> <TableCell>
<Button <Button