refactor: modularize Map component logic into dedicated hooks for map instance management, layers, interactions, and state synchronization

This commit is contained in:
taDuc
2026-05-12 04:05:00 +07:00
parent ac8b0404dd
commit 1baba25303
10 changed files with 1956 additions and 1842 deletions
+6 -7
View File
@@ -5,7 +5,7 @@ import UserDropdown from "@/components/header/UserDropdown";
import { useSidebar } from "@/context/SidebarContext";
import Image from "next/image";
import Link from "next/link";
import React, { useState ,useEffect,useRef} from "react";
import React, { useState, useEffect, useRef } from "react";
const AppHeader: React.FC = () => {
const [isApplicationMenuOpen, setApplicationMenuOpen] = useState(false);
@@ -156,21 +156,20 @@ const AppHeader: React.FC = () => {
</div>
</div>
<div
className={`${
isApplicationMenuOpen ? "flex" : "hidden"
} items-center justify-between w-full gap-4 px-5 py-4 lg:flex shadow-theme-md lg:justify-end lg:px-0 lg:shadow-none`}
className={`${isApplicationMenuOpen ? "flex" : "hidden"
} items-center justify-between w-full gap-4 px-5 py-4 lg:flex shadow-theme-md lg:justify-end lg:px-0 lg:shadow-none`}
>
<div className="flex items-center gap-2 2xsm:gap-3">
{/* <!-- Dark Mode Toggler --> */}
{/* <ThemeToggleButton /> */}
{/* <!-- Dark Mode Toggler --> */}
{/* <NotificationDropdown /> */}
{/* <NotificationDropdown /> */}
{/* <!-- Notification Menu Area --> */}
</div>
{/* <!-- User Area --> */}
<UserDropdown />
<UserDropdown />
</div>
</div>
</header>
+3 -4
View File
@@ -54,7 +54,7 @@ const ALL_NAV_ITEMS: NavItem[] = [
name: "Tài Khoản",
path: "/user/account",
},
];
const OTHERS_ITEMS: NavItem[] = [
@@ -164,11 +164,10 @@ const AppSidebar: React.FC = () => {
{nav.subItems ? (
<button
onClick={() => handleSubmenuToggle(index, menuType)}
className={`menu-item group uppercase ${
openSubmenu?.type === menuType && openSubmenu?.index === index
className={`menu-item group uppercase ${openSubmenu?.type === menuType && openSubmenu?.index === index
? "menu-item-active"
: "menu-item-inactive"
} cursor-pointer ${!isExpanded && !isHovered ? "lg:justify-center" : "lg:justify-start"}`}
} cursor-pointer ${!isExpanded && !isHovered ? "lg:justify-center" : "lg:justify-start"}`}
>
<span
className={