|
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; |
|
|