"use client"; import React from 'react' import Logo from '@/components/logo'; import SidebarHoverToggle from '@/components/partials/sidebar/sidebar-hover-toggle'; import { Ellipsis, LogOut } from "lucide-react"; import { usePathname } from "@/components/navigation"; import { cn } from "@/lib/utils"; import { getMenuList } from "@/lib/menus"; import { ScrollArea } from "@/components/ui/scroll-area"; import { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from "@/components/ui/tooltip"; import { useConfig } from "@/hooks/use-config"; import MenuLabel from "../common/menu-label"; import MenuItem from "../common/menu-item"; import { CollapseMenuButton } from "../common/collapse-menu-button"; import MenuWidget from "../common/menu-widget"; import SearchBar from '@/components/partials/sidebar/common/search-bar' import TeamSwitcher from '../common/team-switcher' // for dnd import { DndContext, KeyboardSensor, MouseSensor, TouchSensor, closestCenter, useSensor, type DragEndEvent, type UniqueIdentifier, useSensors, } from "@dnd-kit/core"; import { restrictToVerticalAxis, restrictToHorizontalAxis, } from "@dnd-kit/modifiers"; import { useSortable, arrayMove, SortableContext, verticalListSortingStrategy, horizontalListSortingStrategy, } from "@dnd-kit/sortable"; import { useTranslations } from 'next-intl'; import { useParams } from 'next/navigation' import { getLangDir } from 'rtl-detect'; import { CSS } from "@dnd-kit/utilities"; export function MenuDragAble() { const t = useTranslations("Menu") const pathname = usePathname(); const menuList = getMenuList(pathname, t); const [config, setConfig] = useConfig() const collapsed = config.collapsed const params = useParams<{ locale: string; }>(); const direction = getLangDir(params?.locale ?? ''); // for dnd // reorder rows after drag & drop const [data, setData] = React.useState(menuList); const dataIds = React.useMemo( () => data.flatMap(group => group.menus.map(menu => menu.id)), [data] ); function handleDragEnd(event: DragEndEvent) { const { active, over } = event; if (active && over && active.id !== over.id) { setData((data) => { const dataIds = data.flatMap(group => group.menus.map(menu => menu.id)); const oldIndex = dataIds.indexOf(active.id as string); const newIndex = dataIds.indexOf(over.id as string); if (oldIndex !== -1 && newIndex !== -1) { // Flatten data const flattenedMenus = data.flatMap(group => group.menus); const updatedMenus = arrayMove(flattenedMenus, oldIndex, newIndex); // Reconstruct the data structure let currentIndex = 0; const updatedData = data.map(group => { const groupMenusCount = group.menus.length; const updatedGroupMenus = updatedMenus.slice(currentIndex, currentIndex + groupMenusCount); currentIndex += groupMenusCount; return { ...group, menus: updatedGroupMenus }; }); return updatedData; } return data; }); } } const sensors = useSensors( useSensor(MouseSensor, {}), useSensor(TouchSensor, {}), useSensor(KeyboardSensor, {}) ); return ( <>
); }