import { useUserPreferences } from '../../providers/UserPreferences'
import React, { ReactElement, useEffect, useState } from 'react'
import Table from '../atoms/Table'
import { DDO, Logger } from '@oceanprotocol/lib'
import { useOcean } from '../../providers/Ocean'
import Price from '../atoms/Price'
import Tooltip from '../atoms/Tooltip'
import { ConfigHelperConfig } from '@oceanprotocol/lib/dist/node/utils/ConfigHelper'
import AssetTitle from './AssetListTitle'
import { queryMetadata } from '../../utils/aquarius'
import axios, { CancelToken } from 'axios'
async function getAssetsBookmarked(
bookmarks: string[],
metadataCacheUri: string,
cancelToken: CancelToken
) {
const searchDids = JSON.stringify(bookmarks)
.replace(/,/g, ' ')
.replace(/"/g, '')
.replace(/(\[|\])/g, '')
// for whatever reason ddo.id is not searchable, so use ddo.dataToken instead
.replace(/(did:op:)/g, '0x')
const queryBookmarks = {
page: 1,
offset: 100,
query: {
query_string: {
query: searchDids,
fields: ['dataToken'],
default_operator: 'OR'
}
},
sort: { created: -1 }
}
try {
const result = await queryMetadata(
queryBookmarks,
metadataCacheUri,
cancelToken
)
return result
} catch (error) {
Logger.error(error.message)
}
}
const columns = [
{
name: 'Data Set',
selector: function getAssetRow(row: DDO) {
const { attributes } = row.findServiceByType('metadata')
return
},
maxWidth: '45rem',
grow: 1
},
{
name: 'Datatoken Symbol',
selector: function getAssetRow(row: DDO) {
return (
{row.dataTokenInfo.symbol}
)
},
maxWidth: '10rem'
},
{
name: 'Price',
selector: function getAssetRow(row: DDO) {
return
},
right: true
}
]
export default function Bookmarks(): ReactElement {
const { config } = useOcean()
const { bookmarks } = useUserPreferences()
const [pinned, setPinned] = useState()
const [isLoading, setIsLoading] = useState()
const networkName = (config as ConfigHelperConfig)?.network
useEffect(() => {
if (!config?.metadataCacheUri || !networkName || bookmarks === {}) return
const source = axios.CancelToken.source()
async function init() {
if (!bookmarks[networkName]?.length) {
setPinned([])
return
}
setIsLoading(true)
try {
const resultPinned = await getAssetsBookmarked(
bookmarks[networkName],
config.metadataCacheUri,
source.token
)
setPinned(resultPinned?.results)
} catch (error) {
Logger.error(error.message)
}
setIsLoading(false)
}
init()
return () => {
source.cancel()
}
}, [bookmarks, config.metadataCacheUri, networkName])
return (
)
}