Skip to content

Commit d9d4709

Browse files
authored
fix(ipfs): representation of text from search/or cid content (cybercongress#1042)
1 parent 298de7e commit d9d4709

File tree

3 files changed

+39
-40
lines changed

3 files changed

+39
-40
lines changed

src/components/contentIpfs/contentIpfs.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ function DownloadableItem({ cid, search }: { cid: string; search?: boolean }) {
3434

3535
type ContentTabProps = {
3636
details: IPFSContentDetails;
37-
content: IPFSContentMaybe;
37+
content?: IPFSContentMaybe;
3838
cid: string;
3939
search?: boolean;
4040
};

src/containers/ipfs/components/ContentIpfsCid.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ type Props = {
66
loading?: boolean;
77
statusFetching?: string;
88
status?: QueueItemStatus;
9+
cid: string;
910
};
1011

1112
// TODO: refactor this component

src/containers/ipfs/ipfs.tsx

+37-39
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,43 @@
11
import { useParams } from 'react-router-dom';
22
import ContentIpfs from 'src/components/contentIpfs/contentIpfs';
33
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';
65
import { useAdviser } from 'src/features/adviser/context';
76
import { encodeSlash } from 'src/utils/utils';
87
import { PATTERN_IPFS_HASH } from 'src/utils/config';
98
import { getIpfsHash } from 'src/utils/search/utils';
109
import { parseArrayLikeToDetails } from 'src/services/ipfs/utils/content';
1110
import { IPFSContentDetails } from 'src/services/ipfs/ipfs';
11+
import { useBackend } from 'src/contexts/backend';
1212
import { Dots, MainContainer } from '../../components';
1313
import ContentIpfsCid from './components/ContentIpfsCid';
1414
import styles from './IPFS.module.scss';
1515
import SearchResults from '../Search/SearchResults';
1616
import AdviserMeta from './components/AdviserMeta/AdviserMeta';
17-
import { useBackend } from 'src/contexts/backend';
1817

1918
function Ipfs() {
2019
const { query = '' } = useParams();
21-
22-
const [cid, setKeywordHash] = useState<string>('');
20+
const [cid, setCid] = useState<string>('');
2321

2422
const { fetchParticle, status, content } = useQueueIpfsContent(cid);
2523
const { ipfsNode } = useBackend();
2624
const [ipfsDataDetails, setIpfsDatDetails] = useState<IPFSContentDetails>();
2725

28-
const queryClient = useQueryClient();
2926
const { setAdviser } = useAdviser();
3027

28+
const isText = useMemo(() => !query.match(PATTERN_IPFS_HASH), [query]);
29+
3130
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]);
4841

4942
useEffect(() => {
5043
(async () => {
@@ -53,21 +46,17 @@ function Ipfs() {
5346
}, [cid, fetchParticle]);
5447

5548
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+
})();
6158
}
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]);
7160

7261
useEffect(() => {
7362
if (!status) {
@@ -99,13 +88,22 @@ function Ipfs() {
9988
}
10089
}, [ipfsDataDetails, setAdviser, cid, content, status]);
10190

102-
console.debug(status, cid, content, ipfsDataDetails);
103-
10491
return (
10592
<MainContainer width="62%" resetMaxWidth>
10693
<div className={styles.wrapper}>
107-
{status === 'completed' && ipfsDataDetails !== null ? (
94+
{status === 'completed' && ipfsDataDetails ? (
10895
<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+
/>
109107
) : (
110108
<ContentIpfsCid
111109
loading={status === 'executing'}

0 commit comments

Comments
 (0)