nolual's picture
Upload 55 files
0c20ea8
raw
history blame
9.11 kB
import { useState, useEffect } from "react";
import seiki from "../../assets/images/seiki.png";
import { BsSearch, BsChevronDown } from "react-icons/bs";
import { FaMapLocationDot, FaLocationDot } from "react-icons/fa6";
import { AiFillCar, AiFillDatabase } from "react-icons/ai";
import { RiDashboardFill } from "react-icons/ri";
import { IoFootstepsSharp, IoStatsChartSharp } from "react-icons/io5";
import { FaBusAlt, FaInfoCircle, FaMapMarkedAlt } from "react-icons/fa";
import { Poi } from "../../redux/types/Poi";
import FootfallSection from "../footfall";
type DrawerSectionProps = {
poiList: Poi[];
setSelectedPoi: React.Dispatch<React.SetStateAction<Poi>>;
isFootfallSection: boolean;
setFootfallSection: React.Dispatch<React.SetStateAction<boolean>>;
isModeSection: boolean;
setModeSection: React.Dispatch<React.SetStateAction<boolean>>;
isDemographicsSection: boolean;
setDemographicsSection: React.Dispatch<React.SetStateAction<boolean>>;
isInformationSection: boolean;
setInformationSection: React.Dispatch<React.SetStateAction<boolean>>;
isTraficSection: boolean;
setTraficSection: React.Dispatch<React.SetStateAction<boolean>>;
isMapView: boolean;
setIsMapView: React.Dispatch<React.SetStateAction<boolean>>;
};
const DrawerSection: React.FC<DrawerSectionProps> = ({
poiList,
setSelectedPoi,
isFootfallSection,
setFootfallSection,
isModeSection,
setModeSection,
isDemographicsSection,
setDemographicsSection,
isInformationSection,
setInformationSection,
isTraficSection,
setTraficSection,
isMapView,
setIsMapView,
}) => {
const [open, setOpen] = useState(true);
const [submenuOpen, setSubmenuOpen] = useState(false);
const Menus = [
{
title: "Points of interest",
icon: <FaLocationDot />,
submenu: true,
submenuItems: poiList,
},
{
title: "Footfall",
icon: <IoFootstepsSharp />,
},
{
title: "Mode",
icon: <AiFillCar />,
},
{
title: "Demographics",
icon: <IoStatsChartSharp />,
},
{
title: "Section info",
icon: <FaInfoCircle />,
},
{
title: "Trafic data",
icon: <AiFillDatabase />,
},
];
return (
<div
className={`p-5 pt-8 ${open ? "w-72" : "w-20"} duration-300 relative`}
style={{ height: "100%", backgroundColor: "#191F20" }}
>
<div className="inline-flex">
<img
src={seiki}
width={40}
height={100}
className={`text-4xl rounded cursor-pointer block float-left mr-4 duration-500 ${
open && "rotate-[360deg]"
}`}
onClick={() => setOpen(!open)}
/>
<h1
className={`text-white origin-left font-medium text-2xl duration-300 ${
!open && "scale-0"
}`}
style={{ fontFamily: "airbnb_semi_bold", fontSize: 35 }}
>
seiki
</h1>
</div>
<div
className={`flex items-center rounded-md bg-light-white mt-6 ${
!open ? "px-2.5" : "px-4"
} py-2`}
>
<BsSearch
className={`text-white text-lg block float-left cursor-pointer ${
open && "mr-2"
}`}
/>
<input
type={"search"}
placeholder="Search"
className={`text-base bg-transparent w-full text-white focus:outline-none ${
!open && "hidden"
}`}
/>
</div>
<ul className="pt-2">
<li
className={`text-gray-300 text-sm flex items-center gap-x-4 cursor-pointer p-2
hover:bg-light-white rounded-md mb-2`}
>
<span className="text-2xl block float-left">
<FaLocationDot />
</span>
<span
className={`text-base font-medium flex-1 duration-200 ${
!open && "hidden"
}`}
style={{ fontFamily: "airbnb_light" }}
>
Points of interest
</span>
{open && (
<BsChevronDown
className={`${submenuOpen && "rotate-180"}`}
onClick={() => {
setSubmenuOpen(!submenuOpen);
}}
/>
)}
</li>
{submenuOpen && open && (
<ul>
{Menus[0].submenuItems ? (
Menus[0].submenuItems.map((submenuItem, index) => (
<li
onClick={() => {
setSelectedPoi(submenuItem);
}}
key={index}
className="text-gray-300 text-sm flex items-center gap-x-4 cursor-pointer p-2 px-5
hover:bg-light-white rounded-md"
style={{ fontFamily: "airbnb_light" }}
>
{submenuItem.address}
</li>
))
) : (
<></>
)}
</ul>
)}
<li
className={`text-gray-300 text-sm flex items-center gap-x-4 cursor-pointer p-2
hover:bg-light-white rounded-md mb-2 ${
isFootfallSection ? "" : "bg-light-white"
}`}
onClick={() => {
setFootfallSection(!isFootfallSection);
}}
>
<span className="text-2xl block float-left">
<IoFootstepsSharp />
</span>
<span
className={`text-base font-medium flex-1 duration-200 ${
!open && "hidden"
}`}
style={{ fontFamily: "airbnb_light" }}
>
Footfall
</span>
</li>
<li
className={`text-gray-300 text-sm flex items-center gap-x-4 cursor-pointer p-2
hover:bg-light-white rounded-md mb-2 ${
isModeSection ? "" : "bg-light-white"
}`}
onClick={() => {
setModeSection(!isModeSection);
}}
>
<span className="text-2xl block float-left">
<AiFillCar />
</span>
<span
className={`text-base font-medium flex-1 duration-200 ${
!open && "hidden"
}`}
style={{ fontFamily: "airbnb_light" }}
>
Mode
</span>
</li>
<li
className={`text-gray-300 text-sm flex items-center gap-x-4 cursor-pointer p-2
hover:bg-light-white rounded-md mb-2 ${
isDemographicsSection ? "" : "bg-light-white"
}`}
onClick={() => {
setDemographicsSection(!isDemographicsSection);
}}
>
<span className="text-2xl block float-left">
<IoStatsChartSharp />
</span>
<span
className={`text-base font-medium flex-1 duration-200 ${
!open && "hidden"
}`}
style={{ fontFamily: "airbnb_light" }}
>
Demographics
</span>
</li>
<li
className={`text-gray-300 text-sm flex items-center gap-x-4 cursor-pointer p-2
hover:bg-light-white rounded-md mb-2 ${
isInformationSection ? "" : "bg-light-white"
}`}
onClick={() => {
setInformationSection(!isInformationSection);
}}
>
<span className="text-2xl block float-left">
<FaInfoCircle />
</span>
<span
className={`text-base font-medium flex-1 duration-200 ${
!open && "hidden"
}`}
style={{ fontFamily: "airbnb_light" }}
>
Section info
</span>
</li>
<li
className={`text-gray-300 text-sm flex items-center gap-x-4 cursor-pointer p-2
hover:bg-light-white rounded-md mb-2 ${
isTraficSection ? "" : "bg-light-white"
}`}
onClick={() => {
setTraficSection(!isTraficSection);
}}
>
<span className="text-2xl block float-left">
<AiFillDatabase />
</span>
<span
className={`text-base font-medium flex-1 duration-200 ${
!open && "hidden"
}`}
style={{ fontFamily: "airbnb_light" }}
>
Trafic data
</span>
</li>
<li
className={`text-gray-300 text-sm flex items-center gap-x-4 cursor-pointer p-2
hover:bg-light-white rounded-md mb-2 ${
isTraficSection ? "" : "bg-light-white"
}`}
onClick={() => {
setIsMapView(!isMapView);
}}
>
<span className="text-2xl block float-left">
<FaMapMarkedAlt />
</span>
<span
className={`text-base font-medium flex-1 duration-200 ${
!open && "hidden"
}`}
style={{ fontFamily: "airbnb_light" }}
>
Map View
</span>
</li>
</ul>
</div>
);
};
export default DrawerSection;