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 ? (
) : assetsWithPrices &&
!loading &&
(isLoading === undefined || isLoading === false) ? (
<>
{assetsWithPrices.length > 0 ? (
assetsWithPrices.map((assetWithPrice) => (
))
) : (
No results found
)}
{showPagination && (
)}
>
) : (
)
}
export default AssetList