import React, { useState, ReactElement } from 'react' import Loader from '../atoms/Loader' import { useOcean, OceanConnectionStatus, useSearch, ComputeItem } from '@oceanprotocol/react' import Price from '../atoms/Price' import { fromWei } from 'web3-utils' import Table from '../atoms/Table' import Button from '../atoms/Button' import { MetadataMain, Logger } from '@oceanprotocol/lib' import DateCell from '../atoms/Table/DateCell' import DdoLinkCell from '../atoms/Table/DdoLinkCell' import shortid from 'shortid' import ActionsCell from '../atoms/Table/ActionsCell' import JobDetailsDialog from '../molecules/JobDetailsDialog' const columns = [ { name: 'Created', selector: 'dateCreated', sortable: true, cell: function getCell(row: any) { return } }, { name: 'Finished', selector: 'dateFinished', sortable: true, cell: function getCell(row: any) { return } }, { name: 'Name', selector: 'name', sortable: true, cell: function getCell(row: any) { return } }, { name: 'Price', selector: 'price', sortable: true, cell: function getCell(row: any) { return } }, { name: 'Status', selector: 'status' }, { name: 'Actions', selector: 'actions', cell: function getCell(row: any) { return ( ) } } ] export default function JobsList(): ReactElement { const { ocean, status, accountId } = useOcean() const [jobList, setJobList] = useState([]) const [isLoading, setIsLoading] = useState(false) const [userAgreed, setUserAgreed] = useState(false) const { getComputeItems } = useSearch() const [isOpen, setIsOpen] = useState(false) const [detailsComputeItem, setDetailsComputeItem] = useState() const onClickViewJobDetails = (compute: ComputeItem) => { setDetailsComputeItem(compute) setIsOpen(true) } const dialogClose = () => { setIsOpen(false) } const getJobs = async () => { if (!accountId || !ocean || status !== OceanConnectionStatus.CONNECTED) return setIsLoading(true) setUserAgreed(true) try { const computeItems = await getComputeItems() if (!computeItems) return const data = computeItems.map((item) => { const { attributes } = item.ddo.findServiceByType('metadata') const { name, price } = attributes.main as MetadataMain return { dateCreated: item.job.dateCreated, dateFinished: item.job.dateFinished, status: item.job.statusText, name: name, price: price, did: item.ddo.id, id: shortid.generate(), onClickViewJobDetails: () => onClickViewJobDetails(item) } }) setJobList(data) setIsLoading(false) } catch (err) { Logger.error(err) // TODO: no error handling } finally { setIsLoading(false) } } return isLoading ? ( ) : accountId && ocean ? ( userAgreed ? ( <> ) : ( <>
) ) : (
Connect your wallet to see your compute jobs.
) }