// App.js
import React, { useState } from "react";
import { FaHome, FaBook, FaLaptop, FaBookOpen, FaTools } from "react-icons/fa";
import { BsFillCaretDownFill } from "react-icons/bs";
import "./App.css";
const SidebarItem = ({ item, onClick }) => {
const [isOpen, setIsOpen] = useState(false);
const itemClickFn = () => {
setIsOpen(!isOpen);
if (onClick) {
onClick(item);
}
};
const getIcon = (label) => {
const iconMap = {
Home: <FaHome />,
Topics: <FaBook />,
Languages: <FaLaptop />,
About: <FaBookOpen />,
Frameworks: <FaTools />,
};
return iconMap[label] || <BsFillCaretDownFill />;
};
return (
<div
className={`sidebar-item ${isOpen ? "open" : ""}`}
onClick={itemClickFn}
>
<span className="icon">{getIcon(item.label)}</span>
<span>{item.label}</span>
{isOpen && item.children && (
<div className="sub-menu">
{item.children.map((child, index) => (
<SidebarItem key={index} item={child} />
))}
</div>
)}
</div>
);
};
const App = () => {
const data = [
{ label: "Home" },
{
label: "Topics",
children: [
{ label: "React" },
{ label: "JavaScript" },
{ label: "CSS" },
],
},
{
label: "Languages",
children: [
{
label: "Front-end",
children: [
{ label: "HTML" },
{ label: "CSS" },
{ label: "JavaScript" },
],
},
{
label: "Back-end",
children: [
{ label: "Node.js" },
{ label: "Python" },
{ label: "Ruby" },
],
},
],
},
{ label: "About" },
{
label: "Frameworks",
children: [
{ label: "React" },
{ label: "Angular" },
{ label: "Vue.js" },
],
},
];
return (
<div className="app">
<div className="sidebar">
{data.map((item, index) => (
<SidebarItem key={index} item={item} />
))}
</div>
<div className="content">
<h1>GeeksforGeeks</h1>
<h3>Approach 2: Using CSS Only</h3>
</div>
</div>
);
};
export default App;