6.2.2. Smartphone
6.2.5. Node.js
6.3.2. React JS
6.3.4. Javascript
6.3.5. Node JS
function App() {
return (
<BrowserRouter>
<header>
<p id="titleGroup">Kelompok 10</p>
</header>
<Routes>
<Route path="" element={<Movie />} />
<Route path="/profile" element={<Profile />} />
</Routes>
<footer>
<NavLink to="" className="iconWrapper">
<HiHome className="icon" />
Movie
</NavLink>
<NavLink to="/profile" className="iconWrapper">
<MdGroup className="icon" />
Profile
</NavLink>
</footer>
</BrowserRouter>
);
}
#titleGroup {
margin: 0;
font-size: 18px;
color: white;
font-family: Verdana;
font-weight: bolder;
font-size: 16px;
}
header {
background-color: rgb(65, 65, 233);
margin: auto;
text-align: center;
padding: 10px 0;
}
footer {
display: flex;
position: fixed;
bottom: 0;
left: 0;
background-color: rgb(23, 23, 43);
width: 100%;
justify-content: space-around;
align-items: center;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
border-top: black;
border-width: 2px;
}
.iconWrapper {
display: flex;
flex-direction: column;
align-items: center;
text-decoration: none;
color: white;
font-family: Verdana;
padding: 5px 0;
font-size: 12px;
}
.icon {
color: white;
margin-bottom: 4px;
font-size: 22px;
}
.active {
color: rgb(65, 65, 233);
}
::-webkit-scrollbar {
width: 5px;
height: 5px;
}
::-webkit-scrollbar-thumb {
background: #4141e9;
border-radius: 0px;
}
::-webkit-scrollbar-thumb:hover {
background: #4141e9;
}
::-webkit-scrollbar-track {
background: #24233b;
box-shadow: inset 0px 0px 0px 0px #f0f0f0;
}
6. Buatlah folder baru bernama “component” dan “pages” pada “src”.
7. Buat file “CardBig.js” dan “CardBig.css” pada folder “component”.
8. Masukkan source code berikut pada file baru saja dibuat.
Source code CardBig.js :
import React from 'react';
import { AiFillStar } from 'react-icons/ai';
import './CardBig.css';
.posterBig {
width: 280px;
height: 160px;
border-radius: 2px;
border-radius: 20px;
}
.descriptionBig {
display: flex;
justify-content: space-between;
align-items: center;
}
#title {
color: white;
font-size: 22px;
font-weight: bold;
font-family: Verdana;
}
#genre {
color: grey;
font-family: Verdana;
font-weight: 500;
font-size: 12px;
margin-top: 5px;
}
9. Buat file “CardSmall.js” dan “CardSmall.css” pada folder “component”.
10. Masukkan source code berikut pada file yang baru saja dibuat.
Source code CardSmall.js :
import React from 'react';
import { AiFillStar } from 'react-icons/ai';
import './CardSmall.css';
.photo {
width: 90px;
height: 120px;
border-radius: 12px;
}
.description {
display: flex;
padding-left: 20px;
flex-direction: column;
justify-content: space-around;
}
#title {
color: white;
font-size: 22px;
font-weight: bold;
font-family: Verdana;
}
#genre {
color: grey;
font-family: Verdana;
font-weight: 500;
font-size: 12px;
margin-top: 5px;
}
11. Pada folder “pages” yang tadi sudah dibuat. Buat file “Movie.js”,
“Movie.css”, dan “Profile.js”.
12. Masukkan source code berikut ke file yang baru saja dibuat.
Source code Movie.js :
import React from 'react';
import { Fragment } from 'react';
import CardBig from '../Components/CardBig';
import CardSmall from '../Components/CardSmall';
import './Movie.css';
const poster = [
{
title: 'John Wick',
id: 1,
rate: 4,
genre: 'action, crime',
img:
'https://dafunda.com/wp-content/uploads/2019/05/john-wick-
4.jpg',
},
{
title: 'John Wick',
id: 2,
rate: 4,
genre: 'action, crime',
img:
'https://dafunda.com/wp-content/uploads/2019/05/john-wick-
4.jpg',
},
{
title: 'John Wick',
id: 3,
rate: 4,
genre: 'action, crime',
img:
'https://dafunda.com/wp-content/uploads/2019/05/john-wick-
4.jpg',
},
];
const data = [
{
title: 'John Wick',
id: 1,
rate: 4,
genre: 'action, crime',
img:
'https://i.pinimg.com/originals/ee/ff/46/eeff468a7cde5720e45
c4f7a1daf8d95.png',
},
{
title: 'John Wick',
id: 2,
rate: 4,
genre: 'action, crime',
img:
'https://i.pinimg.com/originals/ee/ff/46/eeff468a7cde5720e45
c4f7a1daf8d95.png',
},
{
title: 'John Wick',
id: 3,
rate: 4,
genre: 'action, crime',
img:
'https://i.pinimg.com/originals/ee/ff/46/eeff468a7cde5720e45
c4f7a1daf8d95.png',
},
];
return (
<>
<p id="movies">Top Movies</p>
<div className="containerTop">
{poster.map((item, index) => (
<Fragment key={item.id}>
<CardBig title={item.title} img={item.img}
genre={item.genre} size={STAR_SIZE} color={STAR_COLOR} />
{data.length === index + 1 ? <div
style={{ marginRight: 40 }} /> : null}
</Fragment>
))}
</div>
<p id="movies">All Movies</p>
{data.map((item, index) => (
<Fragment key={item.id}>
<CardSmall title={item.title} img={item.img}
genre={item.genre} size={STAR_SIZE} color={STAR_COLOR}
onClick={() => alert('item id = ' + item.id)} />
{data.length === index + 1 && <div
style={{ marginBottom: 80 }} />}
</Fragment>
))}
</>
);
}
Source Code Movie.css
p {
padding: 0;
margin: 0;
}
.containerTop {
display: flex;
overflow: auto;
padding-bottom: 10px;
}
.card {
display: flex;
margin-bottom: 20px;
padding-left: 40px;
}
.photo {
width: 90px;
height: 120px;
border-radius: 12px;
}
.description {
display: flex;
padding-left: 20px;
flex-direction: column;
justify-content: space-around;
}
#movies {
padding: 20px 0 20px 40px;
color: white;
font-size: 24px;
font-weight: bolder;
font-family: Verdana;
}
#title {
color: white;
font-size: 22px;
font-weight: bold;
font-family: Verdana;
}
#genre {
color: grey;
font-family: Verdana;
font-weight: 500;
font-size: 12px;
margin-top: 5px;
}
Source Code Profile.js
import React from 'react';
import { Card } from 'react-bootstrap';
Halaman home
Dapat dilihat pada gambar di atas merupakan hasil dari program percobaan
modul 1. Gambar di atas merupakan bagian dari home atau bagian menampilkan
list movie – movie dari John Wick. Halaman home tersebut di Kelola pada file
movie.js dan movie.css. Terdapat beberapa konstanta pada source code movie.js
yaitu: poster,STAR_COLOR,STAR_SIZE,dan data. Pada konstanta poster dan
data merupakan array object yang di mana terdapat nama – nama dari list film
yang akan ditampilkan. STAR_COLOR dan STAR_SIZE berfungsi untuk
memberikan warna dan ukuran pada bintang di setiap card.
Halaman profile
useEffect(() => {
const fetchData = async () => {
await axios
.get(`https://api.github.com/users/$
{githubAccount[count]}`)
.then(res => setData(res.data))
.catch(error => alert("Gagal!", error));
};
fetchData();
}, [count]);
return (
<div className="profile">
<h1>Profile</h1>
<div className="avatar">
<img src={data.avatar_url} alt={data.login} />
</div>
<div className="full-name">{data.name}</div>
<div className="username">{data.login}</div>
<div className="bio">{data.bio}</div>
<div className="follow-stat">
<span className="followers">{data.followers}
followers</span>
<span> · </span>
<span className="following">{data.following}
following</span>
</div>
<div className="stat">
<span className="repo">{data.public_repos} public
repositories</span>
<span> · </span>
<span className="gists">{data.public_gists} public
gists</span>
</div>
<div className="navigation-left" onClick={prev}>
<img src="/images/svg/chevron-left.svg" alt="Left" />
</div>
<div className="navigation-right" onClick={next}>
<img src="/images/svg/chevron-right.svg" alt="Right" />
</div>
</div>
);
}
Source Code diatas memiliki array yang telah diisi dengan username
GitHub dari para anggota kelompok 10. Array pada source code ini memiliki
fungsi sebagai proses fetch API dimana kita menggunakan library Axios. Pada
halaman profile ini pun juga memiliki tombol yang dapat diinteraksi dengan
simbol (<) untuk pindah halaman dan menampilkan data akun GitHub pada
halaman sebelumnya dan tombol (>) untuk pindah halaman dan menampilkan
data akun GitHub pada halaman selanjutnya. Urutan akun GitHub yang
ditampilkan pada halaman-halaman ini akan sesuai dengan urutan yang telah
dicantumpkan pada array.
Style yang dapat dilihat pada tampilan halaman profile ini telah
dikonfigurasikan pada bagian Profile.css seperti berikut. Warna pada halaman
profile dimiripkan dengan halaman yang lainya untuk untuk transisi yang mulus.
Profile.css
.profile {
color: #f0f0f0;
text-align: center;
}
.profile h1 {
text-align: center;
padding: 1rem 0;
}
.avatar img {
border-radius: 50%;
width: 222px;
height: 222px;
}
.full-name {
font-weight: bold;
font-size: 1.3rem;
}
.username {
color: #ccc;
}
.bio {
padding: 1rem 0;
}
.stat {
padding-top: 1rem;
}
.navigation-left, .navigation-right {
position: fixed;
top: 45%;
background-color: rgba(41, 41, 233, .5);
cursor: pointer;
}
.navigation-right {
right: 0;
}