- Pada skeleton kode yang terdapat file
main.test.jstidak boleh diubah sama sekali. - Dilarang mengganti nama function yang diberikan.
- Wajib menjalankan
npm installataupnpm installsebelum mengerjakan final project. - Wajib menggunakan beberapa komponen dari Chakra UI.
Yu-Gi OH! merupakan sebuah web sederhana untuk menampilkan beberapa kartu. Kalian diminta untuk melakukan fetch data dari sebuah 3rd party API yang sudah disediakan, yang mana hasil akhirnya bisa kalian lihat di sini.
Klik gambar untuk melihat video preview
Kalian diminta untuk mengerjakan pada fileindex.js, App.js, Home.js, Cards.js, dan Detail.js.
Pada file ini kalian diminta untuk melakukan konfigurasi React router DOM dan Chakra UI. Kalian diperbolehkan menggunakan CSSReset yang dimiliki oleh Chakra UI. Gunakanlah function AnswerHere untuk mengerjakan jawaban kalian.
Pada file ini, kalian diminta untuk membuat Routes untuk aplikasi ini, berikut ketentuannya:
- Buatlah
Routedengan path "/" yang akan merender komponenHome. - Buatlah
Routedengan path "/card/:id" yang akan merender komponenDetails. - Buatlah
Routeyang akan merender komponen "404 Page not found!", yang akan di tampilkan jika user memasukan url tertentu yang tidak kita handle. Berikut contohnya:
Kalian dapat melakukan pembuatan Routes pada function MyRouter yang sudah disediakan.
Pada file ini kalian diminta untuk melakukan fetch data dari 3rd party API berikut:
https://db.ygoprodeck.com/api/v7/cardinfo.php?banlist=tcg&level=4Contoh result dari 3rd party API di atas berupa JSON dengan format:
// Result
{
"data": [
{
"id": 28985331,
"name": "Armageddon Knight",
"type": "Effect Monster",
"desc": "When this card is Summoned: You can send 1 DARK monster from your Deck to the GY.",
"atk": 1400,
"def": 1200,
"level": 4,
"race": "Warrior",
"attribute": "DARK",
"card_sets": [
{
"set_name": "Turbo Pack: Booster One",
"set_code": "TU01-EN011",
"set_rarity": "Rare",
"set_rarity_code": "(R)",
"set_price": "2"
}
],
"banlist_info": {
"ban_tcg": "Limited",
"ban_ocg": "Limited"
},
"card_images": [
{
"id": 28985331,
"image_url": "https://images.ygoprodeck.com/images/cards/28985331.jpg",
"image_url_small": "https://images.ygoprodeck.com/images/cards_small/28985331.jpg"
}
],
"card_prices": [
{
"cardmarket_price": "0.06",
"tcgplayer_price": "0.12",
"ebay_price": "1.48",
"amazon_price": "1.00",
"coolstuffinc_price": "2.99"
}
]
},
...
]
}Jika data belum ada maka akan menampilkan pesan "Loading..." dalam elemen h1, namun jika data yang diterima sudah ada maka akan dilempar ke dalam custom component Cards yang sebelumnya perlu kalian import. Kalian diwajibkan menggunakan komponen SimpleGrid dari Chakra UI untuk membungkus custom component Cards.
Selain itu kalian juga diminta untuk menggunakan komponen Select dari Chakra UI yang memiliki attribute name dengan value "sort".
Di komponen Select tersebut perlu melakukan sort data berdasarkan name, attack, dan defence dari setiap kartu. Sort dilakukan dari nilai yang terendah ke yang tertinggi. Gunakan lah function sortData yang sudah diberikan untuk mengerjakan logic-nya.
Berikut contohnya:
File ini akan membuat sebuah custom component Cards yang akan menerima data yang sudah dilempar dari parent-nya (Home.js) dan ditampilkan dalam bentuk card dengan ketentuan sebagai berikut:
- Elemen untuk membuat card menggunakan komponen
BoxChakra UI yang memilikiclassdengan value "yugioh-card". - Image menggunakan komponen
ImageChakra UI. Card namemenggunakan komponenHeadingChakra UI sebagaih2.- Jika componen ini di klik maka akan berpindah ke halaman detail dan custom component
Detailakan di render berdasarkaniddari setiap data card. GunakanlahLinkdari React router DOM sebagai wrapper untuk mengerjakan hal tersebut.
Berikut contohnya:
File ini akan membuat sebuah custom component Detail, dimana kalian perlu melakuan fetch data dari 3rd party API dibawah ini:
https://db.ygoprodeck.com/api/v7/cardinfo.php?id=<card id>Contoh result dari 3rd party API di atas berupa JSON dengan format:
// Result
{
"data": [
{
"id": 28985331,
"name": "Armageddon Knight",
"type": "Effect Monster",
"desc": "When this card is Summoned: You can send 1 DARK monster from your Deck to the GY.",
"atk": 1400,
"def": 1200,
"level": 4,
"race": "Warrior",
"attribute": "DARK",
"card_sets": [
{
"set_name": "Turbo Pack: Booster One",
"set_code": "TU01-EN011",
"set_rarity": "Rare",
"set_rarity_code": "(R)",
"set_price": "2"
}
],
"banlist_info": {
"ban_tcg": "Limited",
"ban_ocg": "Limited"
},
"card_images": [
{
"id": 28985331,
"image_url": "https://images.ygoprodeck.com/images/cards/28985331.jpg",
"image_url_small": "https://images.ygoprodeck.com/images/cards_small/28985331.jpg"
}
],
"card_prices": [
{
"cardmarket_price": "0.06",
"tcgplayer_price": "0.12",
"ebay_price": "1.48",
"amazon_price": "1.00",
"coolstuffinc_price": "2.99"
}
]
}
]
}Pada halaman detail kalian diminta untuk menampilkan beberapa data yang didapatkan dengan ketentuan berikut:
- Elemen untuk membuat card menggunakan komponen
BoxChakra UI. - Terdapat
buttonback yang akan mengembalikan halaman ke pageHome.buttondibuat menggunakan komponenButtonChakra UI. - Image menggunakan komponen
ImageChakra UI. Card namemenggunakan komponenHeadingChakra UI sebagaih2.- Card
level,attribute,attack,defence,type,race, dandescmenggunakan komponenTextChakra UI.
Berikut format penulisannya:
<name>
Level: <level>
<attribute>
ATK/<attack> DEF/<defence>
[ <type> / <race> ]
<description>Selain itu kalian juga perlu membuat card untuk data card_sets yang di dapat dengan ketentuan berikut:
- Elemen untuk membuat card menggunakan komponen
BoxChakra UI. set_name,set_code,set_rarity,set_pricedibuat menggunakan komponenTextChakra UI.
Berikut format penulisannya:
Name: <set_name>
Code: <set_code>
Rarity: <set_rarity>
Price: <set_price>Jika data belum ada maka akan menampilkan pesan "Loading..." dalam elemen h1, namun jika data yang diterima sudah ada maka akan ditampilkan.
Berikut contohnya:


