Untuk exercise kali ini, silahkan teman-teman buka file src\App.js
, jangan lupa untuk menjalankan pnpm start
untuk menjalankan server Reactnya.
- Function:
Task1
- Task: Salin komponen di bawah. Tambahkan di komponen
Box
terluar tiga buah atribut:marginX
dengan valueauto
,bgColor
dengan valueblue.800
,color
dengan valuewhite
. Ambil propsproperty
yang diterima oleh komponenTask1
dan tampilkan di dalam komponenBox
yang sudah dibuat.
function AirbnbCard() {
const property = {
imageUrl: "https://bit.ly/2Z4KKcF",
imageAlt: "Rear view of modern home with pool",
beds: 3,
baths: 2,
title: "Modern home in city center in the heart of historic Los Angeles",
formattedPrice: "$1,900.00",
reviewCount: 34,
rating: 4,
};
return (
<Box maxW="sm" borderWidth="1px" borderRadius="lg" overflow="hidden">
<Image src={property.imageUrl} alt={property.imageAlt} />
<Box p="6">
<Box display="flex" alignItems="baseline">
<Badge borderRadius="full" px="2" colorScheme="teal">
New
</Badge>
<Box
color="gray.500"
fontWeight="semibold"
letterSpacing="wide"
fontSize="xs"
textTransform="uppercase"
ml="2"
>
{property.beds} beds • {property.baths} baths
</Box>
</Box>
<Box
mt="1"
fontWeight="semibold"
as="h4"
lineHeight="tight"
noOfLines={1}
>
{property.title}
</Box>
<Box>
{property.formattedPrice}
<Box as="span" color="gray.600" fontSize="sm">
/ wk
</Box>
</Box>
<Box display="flex" mt="2" alignItems="center">
{Array(5)
.fill("")
.map((_, i) => (
<StarIcon
key={i}
color={i < property.rating ? "teal.500" : "gray.300"}
/>
))}
<Box as="span" ml="2" color="gray.600" fontSize="sm">
{property.reviewCount} reviews
</Box>
</Box>
</Box>
</Box>
);
}
- Function:
Task2
- Task: Buatlah sebuah komponen yang memiliki komponen terluarnya berupa
SimpleGrid
dengan konfigurasi responsive: [1, 2, 4] yang ditaruh di dalam atributcolumns
, dan tambahkan atributgap
senilai14
. Jadikan komponenTask1
sebagai komponen anak dariSimpleGrid
tersebut, dan gunakanTask2_Data
sebagai props untuk mengisi data yang akan ditampilkan olehTask1
(lakukan iterasi terhadap data di dalam arrayTask2_data
).
- Function:
Task3
- Task: Salin komponen di bawah. Ambil props
title
dan jadikan sebagai isi dari componentModalHeader
, dan ambil propsbody
dan jadikan sebagai isi dari componentModalBody
. Pastikan Modal bisa dibuka dengan tombolButton
yang telah disediakan, dan bisa ditutup dengan meng-klik sebuah button di dalam modal bertuliskanClose
.
function BasicUsage() {
const { isOpen, onOpen, onClose } = useDisclosure();
return (
<>
<Button onClick={onOpen}>Open Modal</Button>
<Modal isOpen={isOpen} onClose={onClose}>
<ModalOverlay />
<ModalContent>
<ModalHeader>Modal Title</ModalHeader>
<ModalCloseButton />
<ModalBody>
<Lorem count={2} />
</ModalBody>
<ModalFooter>
<Button colorScheme="blue" mr={3} onClick={onClose}>
Close
</Button>
<Button variant="ghost">Secondary Action</Button>
</ModalFooter>
</ModalContent>
</Modal>
</>
);
}