import AssetTeaser from '@shared/AssetTeaser/AssetTeaser' import React, { useEffect, useState } from 'react' import Pagination from '@shared/Pagination' import styles from './AssetList.module.css' import { DDO } from '@oceanprotocol/lib' import classNames from 'classnames/bind' import { getAssetsBestPrices, AssetListPrices } from '@utils/subgraph' import Loader from '../atoms/Loader' import { useUserPreferences } from '@context/UserPreferences' import { useIsMounted } from '@hooks/useIsMounted' const cx = classNames.bind(styles) function LoaderArea() { return (
) } declare type AssetListProps = { assets: DDO[] showPagination: boolean page?: number totalPages?: number isLoading?: boolean onPageChange?: React.Dispatch> className?: string noPublisher?: boolean } const AssetList: React.FC = ({ assets, showPagination, page, totalPages, isLoading, onPageChange, className, noPublisher }) => { const { chainIds } = useUserPreferences() const [assetsWithPrices, setAssetWithPrices] = useState() const [loading, setLoading] = useState(true) const isMounted = useIsMounted() useEffect(() => { if (!assets) return isLoading && setLoading(true) async function fetchPrices() { const asset = await getAssetsBestPrices(assets) if (!isMounted()) return setAssetWithPrices(asset) setLoading(false) } fetchPrices() }, [assets]) // // This changes the page field inside the query function handlePageChange(selected: number) { onPageChange(selected + 1) } const styleClasses = cx({ assetList: true, [className]: className }) return chainIds.length === 0 ? (
No network selected
) : assetsWithPrices && !loading && (isLoading === undefined || isLoading === false) ? ( <>
{assetsWithPrices.length > 0 ? ( assetsWithPrices.map((assetWithPrice) => ( )) ) : (
No results found
)}
{showPagination && ( )} ) : ( ) } export default AssetList