mirror of https://github.com/oceanprotocol/ipfs
parent
6d377c19cd
commit
f998a90546
@ -1,6 +1,17 @@
|
||||
import React from 'react'
|
||||
import styles from './Spinner.module.css'
|
||||
|
||||
export default function Spinner() {
|
||||
return <div className={styles.spinner} />
|
||||
const Spinner = ({ message }: { message?: string }) => {
|
||||
return (
|
||||
<div className={styles.spinner}>
|
||||
{message && (
|
||||
<div
|
||||
className={styles.spinnerMessage}
|
||||
dangerouslySetInnerHTML={{ __html: message }}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default Spinner
|
||||
|
@ -0,0 +1,49 @@
|
||||
import { useEffect, useState } from 'react'
|
||||
import ipfsClient from 'ipfs-http-client'
|
||||
|
||||
let ipfs: any = null
|
||||
let ipfsVersion = ''
|
||||
|
||||
export interface IpfsConfig {
|
||||
protocol: string
|
||||
host: string
|
||||
port: string
|
||||
}
|
||||
|
||||
export default function useIpfsApi(config: IpfsConfig) {
|
||||
const [isIpfsReady, setIpfsReady] = useState(Boolean(ipfs))
|
||||
const [ipfsError, setIpfsError] = useState('')
|
||||
|
||||
async function initIpfs() {
|
||||
if (ipfs !== null) return
|
||||
// eslint-disable-next-line
|
||||
ipfs = await ipfsClient(config)
|
||||
|
||||
try {
|
||||
const version = await ipfs.version()
|
||||
ipfsVersion = version.version
|
||||
} catch (error) {
|
||||
setIpfsError(`IPFS connection error: ${error.message}`)
|
||||
return
|
||||
}
|
||||
setIpfsReady(Boolean(await ipfs.id()))
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
initIpfs()
|
||||
}, [config])
|
||||
|
||||
useEffect(() => {
|
||||
// just like componentWillUnmount()
|
||||
return function cleanup() {
|
||||
if (ipfs) {
|
||||
setIpfsReady(false)
|
||||
ipfs = null
|
||||
ipfsVersion = ''
|
||||
setIpfsError('')
|
||||
}
|
||||
}
|
||||
}, [])
|
||||
|
||||
return { ipfs, ipfsVersion, isIpfsReady, ipfsError }
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
import ipfsClient from 'ipfs-http-client'
|
||||
import { ipfsNodeUri } from '../site.config'
|
||||
|
||||
export async function saveToIpfs(files: File[]) {
|
||||
const { hostname, port, protocol } = new URL(ipfsNodeUri)
|
||||
|
||||
const ipfsConfig = {
|
||||
protocol: protocol.replace(':', ''),
|
||||
host: hostname,
|
||||
port: port || '443'
|
||||
}
|
||||
|
||||
const ipfs = ipfsClient(ipfsConfig)
|
||||
|
||||
const file = [...files][0]
|
||||
let ipfsId
|
||||
const fileDetails = {
|
||||
path: file.name,
|
||||
content: file
|
||||
}
|
||||
const options = {
|
||||
wrapWithDirectory: true,
|
||||
progress: (prog: number) => console.log(`received: ${prog}`)
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await ipfs.add(fileDetails, options)
|
||||
|
||||
// CID of wrapping directory is returned last
|
||||
ipfsId = `${response[response.length - 1].hash}/${fileDetails.path}`
|
||||
return ipfsId
|
||||
} catch (error) {
|
||||
console.error(error.message)
|
||||
}
|
||||
}
|
Loading…
Reference in new issue