1
1
import { useParams } from 'react-router-dom' ;
2
2
import ContentIpfs from 'src/components/contentIpfs/contentIpfs' ;
3
3
import useQueueIpfsContent from 'src/hooks/useQueueIpfsContent' ;
4
- import { useEffect , useState } from 'react' ;
5
- import { useQueryClient } from 'src/contexts/queryClient' ;
4
+ import { useEffect , useMemo , useState } from 'react' ;
6
5
import { useAdviser } from 'src/features/adviser/context' ;
7
6
import { encodeSlash } from 'src/utils/utils' ;
8
7
import { PATTERN_IPFS_HASH } from 'src/utils/config' ;
9
8
import { getIpfsHash } from 'src/utils/search/utils' ;
10
9
import { parseArrayLikeToDetails } from 'src/services/ipfs/utils/content' ;
11
10
import { IPFSContentDetails } from 'src/services/ipfs/ipfs' ;
11
+ import { useBackend } from 'src/contexts/backend' ;
12
12
import { Dots , MainContainer } from '../../components' ;
13
13
import ContentIpfsCid from './components/ContentIpfsCid' ;
14
14
import styles from './IPFS.module.scss' ;
15
15
import SearchResults from '../Search/SearchResults' ;
16
16
import AdviserMeta from './components/AdviserMeta/AdviserMeta' ;
17
- import { useBackend } from 'src/contexts/backend' ;
18
17
19
18
function Ipfs ( ) {
20
19
const { query = '' } = useParams ( ) ;
21
-
22
- const [ cid , setKeywordHash ] = useState < string > ( '' ) ;
20
+ const [ cid , setCid ] = useState < string > ( '' ) ;
23
21
24
22
const { fetchParticle, status, content } = useQueueIpfsContent ( cid ) ;
25
23
const { ipfsNode } = useBackend ( ) ;
26
24
const [ ipfsDataDetails , setIpfsDatDetails ] = useState < IPFSContentDetails > ( ) ;
27
25
28
- const queryClient = useQueryClient ( ) ;
29
26
const { setAdviser } = useAdviser ( ) ;
30
27
28
+ const isText = useMemo ( ( ) => ! query . match ( PATTERN_IPFS_HASH ) , [ query ] ) ;
29
+
31
30
useEffect ( ( ) => {
32
- ( async ( ) => {
33
- if ( cid !== query ) {
34
- if ( query . match ( PATTERN_IPFS_HASH ) ) {
35
- setKeywordHash ( query ) ;
36
- } else {
37
- const cidFromQuery = ( await getIpfsHash (
38
- encodeSlash ( query )
39
- ) ) as string ;
40
- if ( cidFromQuery !== cid ) {
41
- await ipfsNode ?. addContent ( query ) ;
42
- setKeywordHash ( cidFromQuery ) ;
43
- }
44
- }
45
- }
46
- } ) ( ) ;
47
- } , [ cid , query , ipfsNode ] ) ;
31
+ if ( ! isText ) {
32
+ setCid ( query ) ;
33
+ } else {
34
+ ( async ( ) => {
35
+ const cidFromQuery = ( await getIpfsHash ( encodeSlash ( query ) ) ) as string ;
36
+ await ipfsNode ?. addContent ( query ) ;
37
+ setCid ( cidFromQuery ) ;
38
+ } ) ( ) ;
39
+ }
40
+ } , [ isText , query , ipfsNode ] ) ;
48
41
49
42
useEffect ( ( ) => {
50
43
( async ( ) => {
@@ -53,21 +46,17 @@ function Ipfs() {
53
46
} , [ cid , fetchParticle ] ) ;
54
47
55
48
useEffect ( ( ) => {
56
- // TODO: cover case with content === 'availableDownload'
57
- // && !content?.availableDownload
58
-
59
- if ( status !== 'completed' ) {
60
- return ;
49
+ if ( status === 'completed' ) {
50
+ ( async ( ) => {
51
+ const details = await parseArrayLikeToDetails (
52
+ content ,
53
+ cid
54
+ // (progress: number) => console.log(`${cid} progress: ${progress}`)
55
+ ) ;
56
+ setIpfsDatDetails ( details ) ;
57
+ } ) ( ) ;
61
58
}
62
- ( async ( ) => {
63
- const details = await parseArrayLikeToDetails (
64
- content ,
65
- cid
66
- // (progress: number) => console.log(`${cid} progress: ${progress}`)
67
- ) ;
68
- setIpfsDatDetails ( details ) ;
69
- } ) ( ) ;
70
- } , [ content , status , cid , queryClient ] ) ;
59
+ } , [ content , status , cid ] ) ;
71
60
72
61
useEffect ( ( ) => {
73
62
if ( ! status ) {
@@ -99,13 +88,22 @@ function Ipfs() {
99
88
}
100
89
} , [ ipfsDataDetails , setAdviser , cid , content , status ] ) ;
101
90
102
- console . debug ( status , cid , content , ipfsDataDetails ) ;
103
-
104
91
return (
105
92
< MainContainer width = "62%" resetMaxWidth >
106
93
< div className = { styles . wrapper } >
107
- { status === 'completed' && ipfsDataDetails !== null ? (
94
+ { status === 'completed' && ipfsDataDetails ? (
108
95
< ContentIpfs content = { content } details = { ipfsDataDetails } cid = { cid } />
96
+ ) : isText ? (
97
+ < ContentIpfs
98
+ details = { {
99
+ type : 'text' ,
100
+ text : query ,
101
+ content : query ,
102
+ cid,
103
+ gateway : false ,
104
+ } }
105
+ cid = { cid }
106
+ />
109
107
) : (
110
108
< ContentIpfsCid
111
109
loading = { status === 'executing' }
0 commit comments