Skip to content

Commit 062e073

Browse files
authored
Merge pull request dabit3#3 from vytjan/v0
V0
2 parents 503b977 + 0bd77fa commit 062e073

File tree

12 files changed

+113
-282
lines changed

12 files changed

+113
-282
lines changed

lib/api.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,19 @@ export const getMetadataById = async (id, contract) => {
44

55
const tokenUri = await contract.tokenURI(id)
66
const ipfs_gateway = "https://daturians.mypinata.cloud/ipfs/"
7-
7+
88
let newUri = tokenUri.replace("ipfs://", ipfs_gateway)
99
const meta = await axios.get(newUri)
1010
let imgUri = meta.data.image.replace("ipfs://", ipfs_gateway)
11+
// append class name
12+
meta.data.extras.forEach(element => {
13+
element['className'] = element.trait_type.toLowerCase().replace(" ", "-").replace("/","-");
14+
});
15+
meta.data.attributes.forEach(element => {
16+
console.log(element);
17+
element['className'] = element.trait_type.toLowerCase().replace(" ", "-").replace("/","-");
18+
});
19+
1120
let item = {
1221
tokenId: id,
1322
image: imgUri,
@@ -18,3 +27,9 @@ export const getMetadataById = async (id, contract) => {
1827
return item
1928
};
2029

30+
export const getQueryMetadata = (query, items) => {
31+
32+
const resultItems = items.filter(item => item.name.includes(query) ? item : null);
33+
34+
return resultItems
35+
};

package-lock.json

Lines changed: 23 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"lint": "next lint"
1010
},
1111
"dependencies": {
12+
"@chakra-ui/icons": "^1.1.7",
1213
"@chakra-ui/react": "^1.8.6",
1314
"@nomiclabs/hardhat-ethers": "^2.0.5",
1415
"@nomiclabs/hardhat-waffle": "^2.0.3",

pages/components/search.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import {
2+
Input,
3+
IconButton,
4+
InputGroup,
5+
} from "@chakra-ui/react";
6+
import { SearchIcon } from "@chakra-ui/icons";
7+
8+
/**
9+
* search box component
10+
* searches for matching names
11+
* @return {object} SearchBox component
12+
*/
13+
const SearchBox = ({query, setQuery, handleSubmit }) => {
14+
15+
return (
16+
<form onSubmit={handleSubmit} className="max-w-xs">
17+
<InputGroup pb="1rem">
18+
<Input
19+
placeholder="Search for Daturian ID"
20+
variant="ghost"
21+
value={query}
22+
onChange={(e) => setQuery(e.target.value)}
23+
/>
24+
<IconButton
25+
aria-label="Search"
26+
icon={<SearchIcon />}
27+
onClick={handleSubmit}
28+
bg="black"
29+
color="white"
30+
/>
31+
</InputGroup>
32+
</form>
33+
);
34+
};
35+
36+
export default SearchBox

pages/create-nft.js

Lines changed: 0 additions & 105 deletions
This file was deleted.

pages/dashboard.js

Lines changed: 0 additions & 67 deletions
This file was deleted.

pages/index.js

Lines changed: 15 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@ import { trackWindowScroll } from 'react-lazy-load-image-component';
55

66
import { nftcontractaddress } from '../config'
77
import DaturiansNFT from '../artifacts/Daturians.json'
8-
import { getMetadataById } from "../lib/api";
8+
import { getMetadataById, getQueryMetadata } from "../lib/api";
99

1010
import NFT from './components/nft';
11+
import SearchBox from './components/search';
1112

1213
// export default function Home({scrollPosition}) {
1314
const Home = ({scrollPosition}) => {
15+
const [totalNfts, setTotalNfts] = useState([])
1416
const [nfts, setNfts] = useState([])
17+
const [query, setQuery] = useState("");
1518
const [loadingState, setLoadingState] = useState('not-loaded')
1619
const ipfs_gateway = "https://daturians.mypinata.cloud/ipfs/"
1720

@@ -26,10 +29,7 @@ const Home = ({scrollPosition}) => {
2629
const contract = new ethers.Contract(nftcontractaddress, DaturiansNFT.abi, provider)
2730
// get minted number
2831
const minted = await contract.totalMinted.call();
29-
// console.log(minted.toNumber());
30-
// const data = await contract.walletOfOwner("0x55d9fc8d5f84cf151d9578c6713a0c0ec35e0e5f")
3132
const data = Array.from({length: minted}, (x, i) => i+1);
32-
// console.log(data);
3333

3434
/*
3535
* map over items returned from smart contract and format
@@ -38,7 +38,6 @@ const Home = ({scrollPosition}) => {
3838
const ipfsUrl = 'https://daturians.mypinata.cloud/ipfs/QmWeRSySd3RJ9BhoRHzpDsu8PjjNnGYhWwHn44BKDpgvJG/'
3939
const items = await Promise.all(data.map(async i => {
4040

41-
// let item = await getMetadataById(i, contract);
4241
const currentUrl = ipfsUrl+String(i)+'.json';
4342
const meta = await axios.get(currentUrl)
4443
let imgUri = meta.data.image.replace("ipfs://", ipfs_gateway)
@@ -52,45 +51,24 @@ const Home = ({scrollPosition}) => {
5251

5352
return item
5453
}))
55-
54+
// console.log(items[13])
55+
setTotalNfts(items)
5656
setNfts(items)
5757
setLoadingState('loaded')
5858
}
5959

60-
// if (loadingState === 'loaded' && !nfts.length) return (<h1 className="px-20 py-10 text-3xl">No items in marketplace</h1>)
61-
if (!nfts.length) return (<h1 className="px-20 py-10 text-3xl">Loading Daturians NFT</h1>)
62-
// return (
63-
// <div className="flex justify-center">
64-
// <div className="px-4" style={{ maxWidth: '1600px' }}>
65-
// <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 pt-4">
66-
// {nfts.map((nft) => (
67-
// <div
68-
// key={nft.tokenId}
69-
// className="border shadow rounded-xl overflow-hidden"
70-
// >
71-
// <Link href={`/single_nft/${nft.tokenId}`}>
72-
// <a>
73-
// <img
74-
// src={nft.image}
75-
// alt={nft.data.image}
76-
// />
77-
// <div className="p-4">
78-
// <p style={{ height: '64px' }} className="text-2xl font-semibold">{nft.name}</p>
79-
// <div style={{ height: '70px', overflow: 'hidden' }}>
80-
// <p className="text-gray-400">{nft.description}</p>
81-
// </div>
82-
// </div>
83-
// </a>
84-
// </Link>
85-
// </div>
86-
// ))}
87-
// </div>
88-
// </div>
89-
// </div>
90-
// )
60+
const handleSubmit = async (e) => {
61+
await e.preventDefault();
62+
const res = getQueryMetadata(query, totalNfts);
63+
setNfts(res);
64+
}
65+
66+
if (!totalNfts.length) return (<h1 className="px-20 py-10 text-3xl">Loading Daturians NFT</h1>)
67+
// if (!nfts.length) return (<h1 className="px-20 py-10 text-3xl">No Daturians match your search</h1>)
9168
return (
9269
<div className="flex justify-center">
9370
<div className="px-4" style={{ maxWidth: '1600px' }}>
71+
<SearchBox handleSubmit={handleSubmit} query={query} setQuery={setQuery} />
9472
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 pt-4">
9573
{nfts.map((nft) => (
9674
<NFT key={nft.tokenId} scrollPosition={scrollPosition} values={nft} />

0 commit comments

Comments
 (0)