Fully added listing functionality.

This commit is contained in:
Daniel 2022-06-22 20:44:16 +04:30
parent abffa90506
commit f32b04c057
5 changed files with 79 additions and 13 deletions

View File

@ -12,6 +12,7 @@ import NoResults from "./componets/NoResults";
import Loader from "./componets/Loader"; import Loader from "./componets/Loader";
import SideBar from "./componets/SideBar"; import SideBar from "./componets/SideBar";
import Tags from "./routes/Tags.js"; import Tags from "./routes/Tags.js";
import Lists from "./routes/Lists.js";
import { Route, Routes } from "react-router-dom"; import { Route, Routes } from "react-router-dom";
function App() { function App() {
@ -58,10 +59,6 @@ function App() {
const filteredData = filter(data, searchQuery, filterCheckbox); const filteredData = filter(data, searchQuery, filterCheckbox);
const tags = concatTags(data);
const lists = concatLists(data);
async function fetchData() { async function fetchData() {
const res = await fetch(API_HOST + "/api"); const res = await fetch(API_HOST + "/api");
const resJSON = await res.json(); const resJSON = await res.json();
@ -98,7 +95,8 @@ function App() {
return ( return (
<div className="App"> <div className="App">
<SideBar <SideBar
tags={tags} tags={concatTags(data)}
lists={concatLists(data)}
handleToggleSidebar={handleToggleSidebar} handleToggleSidebar={handleToggleSidebar}
toggle={toggle} toggle={toggle}
/> />
@ -155,8 +153,8 @@ function App() {
onExit={exitAdding} onExit={exitAdding}
reFetch={fetchData} reFetch={fetchData}
lightMode={lightMode} lightMode={lightMode}
tags={() => tags} tags={() => concatTags(data)}
lists={() => lists} lists={() => concatLists(data)}
/> />
) : null} ) : null}
@ -174,8 +172,8 @@ function App() {
lightMode={lightMode} lightMode={lightMode}
SetLoader={SetLoader} SetLoader={SetLoader}
data={filteredData} data={filteredData}
tags={tags} tags={concatTags(data)}
lists={lists} lists={concatLists(data)}
reFetch={fetchData} reFetch={fetchData}
/> />
</div> </div>
@ -189,7 +187,22 @@ function App() {
lightMode={lightMode} lightMode={lightMode}
SetLoader={SetLoader} SetLoader={SetLoader}
data={filteredData} data={filteredData}
tags={tags} tags={concatTags(data)}
lists={concatLists(data)}
reFetch={fetchData}
/>
}
/>
<Route
path="lists/:listId"
element={
<Lists
lightMode={lightMode}
SetLoader={SetLoader}
data={filteredData}
tags={concatTags(data)}
lists={concatLists(data)}
reFetch={fetchData} reFetch={fetchData}
/> />
} }

View File

@ -11,7 +11,7 @@ import "react-pro-sidebar/dist/css/styles.css";
import "../styles/SideBar.css"; import "../styles/SideBar.css";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
const SideBar = ({ tags, handleToggleSidebar, toggle }) => { const SideBar = ({ tags, lists, handleToggleSidebar, toggle }) => {
const sortedTags = tags.sort((a, b) => { const sortedTags = tags.sort((a, b) => {
const A = a.toLowerCase(), const A = a.toLowerCase(),
B = b.toLowerCase(); B = b.toLowerCase();
@ -19,6 +19,19 @@ const SideBar = ({ tags, handleToggleSidebar, toggle }) => {
if (A > B) return 1; if (A > B) return 1;
return 0; return 0;
}); });
const sortedLists = lists
.sort((a, b) => {
const A = a.toLowerCase(),
B = b.toLowerCase();
if (A < B) return -1;
if (A > B) return 1;
return 0;
})
.filter((e) => {
return e != "Unsorted";
});
return ( return (
<ProSidebar <ProSidebar
toggled={toggle} toggled={toggle}
@ -37,6 +50,21 @@ const SideBar = ({ tags, handleToggleSidebar, toggle }) => {
</Link> </Link>
</MenuItem> </MenuItem>
<SubMenu
icon={<h2 className="sidebar-icon">&#xf02c;</h2>}
suffix={<span className="badge">{sortedTags.length}</span>}
title={<h3 className="menu-item">Lists</h3>}
>
{sortedLists.map((e, i) => {
const path = `/lists/${e}`;
return (
<MenuItem prefix={"#"} key={i}>
<Link to={path}>{e}</Link>
</MenuItem>
);
})}
</SubMenu>
<SubMenu <SubMenu
icon={<h2 className="sidebar-icon">&#xf02c;</h2>} icon={<h2 className="sidebar-icon">&#xf02c;</h2>}
suffix={<span className="badge">{sortedTags.length}</span>} suffix={<span className="badge">{sortedTags.length}</span>}

24
src/routes/Lists.js Normal file
View File

@ -0,0 +1,24 @@
import { useParams } from "react-router-dom";
import List from "../componets/List";
const Lists = ({ data, tags, lists, SetLoader, lightMode, reFetch }) => {
const { listId } = useParams();
const dataWithMatchingTag = data.filter((e) => {
return e.list.includes(listId);
});
return (
<div className="content">
<List
lightMode={lightMode}
data={dataWithMatchingTag}
tags={tags}
lists={lists}
SetLoader={SetLoader}
reFetch={reFetch}
/>
</div>
);
};
export default Lists;

View File

@ -1,7 +1,7 @@
import { useParams } from "react-router-dom"; import { useParams } from "react-router-dom";
import List from "../componets/List"; import List from "../componets/List";
const Tags = ({ data, tags, SetLoader, lightMode, reFetch }) => { const Tags = ({ data, tags, lists, SetLoader, lightMode, reFetch }) => {
const { tagId } = useParams(); const { tagId } = useParams();
const dataWithMatchingTag = data.filter((e) => { const dataWithMatchingTag = data.filter((e) => {
return e.tag.includes(tagId); return e.tag.includes(tagId);
@ -13,6 +13,7 @@ const Tags = ({ data, tags, SetLoader, lightMode, reFetch }) => {
lightMode={lightMode} lightMode={lightMode}
data={dataWithMatchingTag} data={dataWithMatchingTag}
tags={tags} tags={tags}
lists={lists}
SetLoader={SetLoader} SetLoader={SetLoader}
reFetch={reFetch} reFetch={reFetch}
/> />