import React, { useState } from 'react'; import { toast } from 'react-toastify'; import { useRouter } from 'next/router'; import { useGetOffersQuery } from 'src/graphql/hodlhodl/__generated__/query.generated'; import { CardWithTitle, SubTitle, Card, DarkSubTitle, ResponsiveLine, } from '../src/components/generic/Styled'; import { LoadingCard } from '../src/components/loading/LoadingCard'; import { OfferCard } from '../src/views/trading/OfferCard'; import { OfferFilters } from '../src/views/trading/OfferFilters'; import { Link } from '../src/components/link/Link'; import { ColorButton } from '../src/components/buttons/colorButton/ColorButton'; import { decode } from '../src/utils/helpers'; export interface QueryProps { pagination: { limit: number; offset: number; }; filters: {}; sort: { by: string; direction: string; }; } const defaultQuery: QueryProps = { pagination: { limit: 25, offset: 0, }, filters: {}, sort: { by: '', direction: '', }, }; const TradingView = () => { const { query } = useRouter(); let decoded: QueryProps = defaultQuery; if (query?.filter) { const { filter } = query; try { if (typeof filter === 'string') { decoded = JSON.parse(decode(filter)); } else { decoded = JSON.parse(decode(filter[0])); } } catch (error) { toast.error('Incorrect url.'); } } const queryObject = { ...defaultQuery, ...decoded, }; const [indexOpen, setIndexOpen] = useState(0); const [page, setPage] = useState(1); const [fetching, setFetching] = useState(false); const { data, loading, fetchMore, error } = useGetOffersQuery({ variables: { filter: JSON.stringify(queryObject) }, }); if (error) { return ( P2P Trading Failed to connect with HodlHodl. ); } if (loading || !data || !data.getOffers) { return ; } const amountOfOffers = data.getOffers.length; const { pagination: { limit }, } = queryObject; return ( P2P Trading Powered by HodlHodl {amountOfOffers <= 0 && No Offers Found} {data.getOffers.map((offer: any, index: number) => ( ))} {amountOfOffers > 0 && amountOfOffers === limit * page && ( { setFetching(true); fetchMore({ variables: { filter: JSON.stringify({ ...queryObject, pagination: { limit, offset: limit * page }, }), }, updateQuery: (prev, { fetchMoreResult: result }) => { if (!result) return prev; setFetching(false); setPage(prev => prev + 1); return { getOffers: [...prev.getOffers, ...result.getOffers], }; }, }); }} > Show More )} ); }; export default TradingView;