From 59923864b094b898c56c9ac83fdc1a2d1cdd6541 Mon Sep 17 00:00:00 2001 From: Krosmez Date: Sun, 7 Apr 2024 14:15:11 -0400 Subject: [PATCH] recursive filter data --- src/pages/Character/index.js | 124 ++++++++++++++++++--------------- src/pages/Character/styles.css | 6 +- 2 files changed, 71 insertions(+), 59 deletions(-) diff --git a/src/pages/Character/index.js b/src/pages/Character/index.js index a09877a..3919626 100644 --- a/src/pages/Character/index.js +++ b/src/pages/Character/index.js @@ -1,72 +1,80 @@ import "./styles.css"; +import { useEffect, useState } from "react"; + import Container from "../../layouts/Container/index.js"; -import data from "../../data/data.js"; +import allData from "../../data/data.js"; const Character = () => { - var arrayToDelete = []; - const setToDelete = (id) => { - arrayToDelete.push(id); - }; - const makeItComeBack = (id) => { - arrayToDelete = arrayToDelete.filter((item) => item !== id); - }; + const [data, setData] = useState(); - const submitJSON = () => { - console.log(arrayToDelete); - console.log(data); - console.log( - JSON.stringify(data.filter((item) => !arrayToDelete.includes(item._id))) - ); + useEffect(() => { + const filterDataByFolder = (folderId) => { + const filteredData = allData.filter((item) => item.folder === folderId); + + return filteredData.map((item) => { + const subItems = filterDataByFolder(item._id); + return { + ...item, + subItems, + }; + }); + }; + + const mainFolders = allData.filter((item) => item.folder === null); + const filteredData = mainFolders.map((item) => { + const subItems = filterDataByFolder(item._id); + return { + ...item, + subItems, + }; + }); + + setData(filteredData); + }, [setData]); + + const renderSubItems = (subItems) => { + if (subItems?.length === 0) { + return subItems?.length !== 0 ? ( +

+ {subItems?._id} - {subItems?.name} +

+ ) : ( + <> + ); + } else { + return subItems?.map((subItem, subId) => { + return ( +
+ {subItems?.length !== 0 ? ( +
+ {subItem?._id} - {subItem?.name} - {subItem?.folder} +
+ ) : ( + <> + )} + {renderSubItems(subItem?.subItems)} +
+ ); + }); + } }; - //console.log(data.filter((item) => item.folder == null)); - var mainFolders = data.filter((item) => item.folder == null); - for (let i = 0; i < mainFolders.length; i++) { - console.log(mainFolders[i].name); - var subFolders = data.filter((item) => item.folder == mainFolders[i]._id); - console.log(subFolders); - } - //console.log(data.sort((item) => item.folder)); return (
- {data - .sort((item) => item.folder) - // .filter((item) => item.folder == "VsGby7ZZXOXbXFGN") -- TS globales - .map((item, id) => { - return ( -
- {item.name} -

{item.name}

-
- - -
-
- ); - })} - - + {data?.map((item, id) => ( +
+

+ {item?._id} - {item?.name} +

+ {renderSubItems(item?.subItems)} +
+ ))}
); diff --git a/src/pages/Character/styles.css b/src/pages/Character/styles.css index 9b75472..b6d60f2 100644 --- a/src/pages/Character/styles.css +++ b/src/pages/Character/styles.css @@ -1 +1,5 @@ -.character {} \ No newline at end of file +.character {} + +.selected { + color: blue; +} \ No newline at end of file