input filter
index.jsx
import React from "react";
import PropTypes from "prop-types"
import styles from './Input.module.css'
const Input = ({ onChange, value }) => {
return (
<input
className={styles.input}
onChange={onChange}
placeholder="Search"
value={value}
/>
)
}
Input.propTypes = {
onChange: PropTypes.func,
value: PropTypes.string
}
export default Input
Input.module.css
.input {
box-shadow: var(--main-box-shadow);
border: none;
border-radius: 6px;
padding: 10px;
color: var(--main-font-color);
font-size: 16px;
font-weight: 600;
}
App.js
import React from 'react';
import { useState, useEffect } from 'react';
import axios from 'axios';
import Navbar from './Components/Navbar'
import Container from './Components/Container';
import Input from './Components/Input';
import Empty from './Components/Empty';
import Emojis from './Components/Emojis';
import './App.css';
function App() {
const [emojisData, setEmojisData] = useState([]);
const [searchText, setSearchText] = useState('')
const [loading, setLoading] = useState(false);
const [error, setError] = useState(false)
useEffect(() => {
async function fetchEmojis() {
setLoading(true)
try {
const res = await axios.get('https://run.mocky.io/v3/fe964130-70d0-430f-b839-e55081423c28')
setEmojisData(res.data)
setLoading(false)
} catch (error) {
console.error(error)
setError(true)
setLoading(false)
}
}
fetchEmojis()
}, [])
const handleSearchEmojis = (e) => {
setSearchText(e.target.value)
}
// console.log(searchText)
return (
<>
<Navbar />
<Container>
<Input
onChange={handleSearchEmojis}
value={searchText}
/>
{loading && <Empty text="Loading..." />}
{error && <Empty text="Error..." />}
{emojisData.length > 0 && <Emojis emojisData={emojisData} searchText={searchText} />}
</Container>
</>
);
}
export default App;
Ketika kosong akan muncul "data tidak ditemukan"
index.jsx
import React, { useState, useEffect } from "react";
import EmojiBox from "../EmojiBox";
import Empty from "../Empty";
import PropTypes from 'prop-types';
import styles from './Emojis.module.css';
import { filterEmojis } from "../../Utils/filterEmojis";
const Emojis = ({ emojisData, searchText }) => {
const [filteredEmojis, setFilteredEmojis] = useState([])
useEffect(() => {
setFilteredEmojis(filterEmojis({
emojisData: emojisData,
searchText: searchText
}))
}, [emojisData, searchText])
if(filteredEmojis.length > 0) {
return (
<div className={styles.emojisGrid}>
{filteredEmojis.map((data ,index) => (
<EmojiBox
key={index}
title={data.title}
symbol={data.symbol}
/>
))}
</div>
)
} else {
return (
<Empty text="Data tidak ditemukan" />
)
}
}
Emojis.propTypes = {
emojisData: PropTypes.array,
searchText: PropTypes.string
}
export default Emojis
Last updated
Was this helpful?