2022-04-16 12:50:42 -05:00
|
|
|
import { useEffect, useState } from 'react';
|
2022-04-22 07:13:22 -05:00
|
|
|
import './styles/App.css';
|
2022-04-16 12:50:42 -05:00
|
|
|
import List from './componets/List';
|
2022-04-22 07:13:22 -05:00
|
|
|
import AddModal from './componets/AddModal';
|
2022-05-10 11:40:08 -05:00
|
|
|
import config from './config.json';
|
2022-04-09 03:14:50 -05:00
|
|
|
|
|
|
|
function App() {
|
2022-04-16 12:50:42 -05:00
|
|
|
const [data, setData] = useState([]);
|
2022-04-22 07:13:22 -05:00
|
|
|
const [isAdding, setIsAdding] = useState(false);
|
2022-04-24 18:34:30 -05:00
|
|
|
const [searchQuery, setSearchQuery] = useState('');
|
2022-05-27 02:26:21 -05:00
|
|
|
const [numberOfResults, setNumberOfResults] = useState(0);
|
2022-04-22 07:13:22 -05:00
|
|
|
|
|
|
|
function exitAdding() {
|
2022-05-27 02:26:21 -05:00
|
|
|
setIsAdding(!isAdding);
|
2022-04-22 07:13:22 -05:00
|
|
|
}
|
2022-04-16 12:50:42 -05:00
|
|
|
|
2022-04-24 18:34:30 -05:00
|
|
|
function search(e) {
|
|
|
|
setSearchQuery(e.target.value);
|
|
|
|
}
|
2022-05-28 04:42:30 -05:00
|
|
|
|
2022-04-24 18:34:30 -05:00
|
|
|
const filteredData = data.filter((e) => {
|
2022-05-28 04:42:30 -05:00
|
|
|
return (e.name.toLowerCase().includes(searchQuery.toLowerCase()) || e.title.toLowerCase().includes(searchQuery.toLowerCase()) || e.tag.some((e) => e.includes(searchQuery.toLowerCase())))
|
2022-04-24 18:34:30 -05:00
|
|
|
});
|
|
|
|
|
2022-05-26 11:15:07 -05:00
|
|
|
async function fetchData() {
|
|
|
|
const address = config.api.address + ":" + config.api.port;
|
|
|
|
const res = await fetch(address + '/api');
|
|
|
|
const resJSON = await res.json();
|
|
|
|
const Data = resJSON.sort((a, b) => { return b-a });
|
|
|
|
setData(Data);
|
|
|
|
}
|
2022-04-16 12:50:42 -05:00
|
|
|
|
2022-05-26 11:15:07 -05:00
|
|
|
useEffect(() => {
|
2022-04-16 12:50:42 -05:00
|
|
|
fetchData();
|
2022-05-26 11:15:07 -05:00
|
|
|
}, []);
|
2022-05-27 02:26:21 -05:00
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
setNumberOfResults(filteredData.length);
|
|
|
|
}, [filteredData]);
|
2022-04-16 12:50:42 -05:00
|
|
|
|
2022-04-09 03:14:50 -05:00
|
|
|
return (
|
|
|
|
<div className="App">
|
2022-04-14 09:10:27 -05:00
|
|
|
<div className="head">
|
2022-04-26 15:12:56 -05:00
|
|
|
<input className="search" type="search" placeholder=" Search for Name / Title / Tag" onChange={search}/>
|
|
|
|
<button className="add-btn" onClick={() => setIsAdding(true)}></button>
|
2022-04-14 09:10:27 -05:00
|
|
|
</div>
|
2022-05-27 08:03:01 -05:00
|
|
|
<p className="results">{numberOfResults > 0 ? numberOfResults + ' Bookmarks' : 'No bookmarks.'}</p>
|
2022-05-26 11:15:07 -05:00
|
|
|
<List data={filteredData} reFetch={fetchData} />
|
|
|
|
{isAdding ? <AddModal onExit={exitAdding} reFetch={fetchData} /> : null}
|
2022-04-09 03:14:50 -05:00
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2022-04-19 07:22:53 -05:00
|
|
|
export default App;
|