'use client'; import React, { FC, useEffect, useState } from "react"; import { menuTranslation } from "@/languages/mutual/menu"; import FirstLayerDropdown from "./firstLayerComponent"; import SecondLayerDropdown from "./secondLayerComponent"; import ThirdLayerDropdown from "./thirdLayerComponent"; import { TranslationItem, ThirdLayerItem, SecondLayerItems, MenuStructure, MenuItemsSectionProps, } from "./types"; const menuStaticTranslation = { tr: { menu: "MenĂ¼" }, en: { menu: "Menu" } } const MenuItemsSection: FC = ({ availableApplications, activePageUrl, lang, prefix }) => { const [expandedFirstLayer, setExpandedFirstLayer] = useState(null); const [expandedSecondLayer, setExpandedSecondLayer] = useState(null); const [menuStructure, setMenuStructure] = useState({}); const [activeFirstLayer, setActiveFirstLayer] = useState(null); const [activeSecondLayer, setActiveSecondLayer] = useState(null); const [activeThirdLayer, setActiveThirdLayer] = useState(null); useEffect(() => { const newMenuStructure: MenuStructure = {}; const menuTranslationWLang = menuTranslation[lang as keyof typeof menuTranslation]; const activeParsedLayer = (menuTranslationWLang[activePageUrl as keyof typeof menuTranslationWLang] as unknown as TranslationItem[]) || []; availableApplications.forEach((appPath: string) => { const pathTranslation = menuTranslationWLang[appPath as keyof typeof menuTranslationWLang] as unknown as TranslationItem[] | undefined; if (pathTranslation && pathTranslation.length >= 3) { const firstLayer = pathTranslation[0]?.key || ''; const secondLayer = pathTranslation[1]?.key || ''; const thirdLayer = pathTranslation[2]?.key || ''; if (!newMenuStructure[firstLayer]) { newMenuStructure[firstLayer] = {} } if (!newMenuStructure[firstLayer][secondLayer]) { newMenuStructure[firstLayer][secondLayer] = {} } newMenuStructure[firstLayer][secondLayer][thirdLayer] = { path: appPath, translation: pathTranslation }; } }); setMenuStructure(newMenuStructure); setActiveFirstLayer(activeParsedLayer[0]?.key || null); setActiveSecondLayer(activeParsedLayer[1]?.key || null); setActiveThirdLayer(activeParsedLayer[2]?.key || null); }, [availableApplications, lang, activePageUrl]); useEffect(() => { if (activeFirstLayer) { setExpandedFirstLayer(activeFirstLayer); if (activeSecondLayer) { setExpandedSecondLayer(activeSecondLayer) } } }, [activeFirstLayer, activeSecondLayer]); const handleFirstLayerClick = (key: string) => { if (expandedFirstLayer === key) { setExpandedFirstLayer(null); setExpandedSecondLayer(null) } else { setExpandedFirstLayer(key); setExpandedSecondLayer(null) } }; const handleSecondLayerClick = (key: string) => { if (expandedSecondLayer === key) { setExpandedSecondLayer(null) } else { setExpandedSecondLayer(key) } }; const renderThirdLayerItems = (firstLayerKey: string, secondLayerKey: string, thirdLayerItems: ThirdLayerItem) => { return Object.entries(thirdLayerItems).map(([thirdLayerKey, itemData]) => { const isActive = activeFirstLayer === firstLayerKey && activeSecondLayer === secondLayerKey && activeThirdLayer === thirdLayerKey; const url = itemData?.path || ''; const translation = itemData?.translation || []; const displayText = translation[2]?.value || thirdLayerKey; return
; }); }; const renderSecondLayerItems = (firstLayerKey: string, secondLayerItems: SecondLayerItems) => { return Object.entries(secondLayerItems).map(([secondLayerKey, thirdLayerItems]) => { const isActive = activeFirstLayer === firstLayerKey && activeSecondLayer === secondLayerKey; const isExpanded = expandedSecondLayer === secondLayerKey; const anyThirdLayerItem = Object.values(thirdLayerItems)[0]; const translation = anyThirdLayerItem?.translation || []; const displayText = translation[1]?.value || secondLayerKey; return (
handleSecondLayerClick(secondLayerKey)} /> {isExpanded &&
{renderThirdLayerItems(firstLayerKey, secondLayerKey, thirdLayerItems)}
}
); }); }; const renderFirstLayerItems = () => { return Object.entries(menuStructure).map(([firstLayerKey, secondLayerItems]) => { const isActive = activeFirstLayer === firstLayerKey; const isExpanded = expandedFirstLayer === firstLayerKey; const anySecondLayer = Object.values(secondLayerItems)[0] || {}; const anyThirdLayerItem = Object.values(anySecondLayer)[0]; const translation = anyThirdLayerItem?.translation || []; const displayText = translation[0]?.value || firstLayerKey; return (
{ handleFirstLayerClick(firstLayerKey)} />} {isExpanded &&
{renderSecondLayerItems(firstLayerKey, secondLayerItems)}
}
); }); }; return ( <>

{menuStaticTranslation[lang as keyof typeof menuStaticTranslation].menu}


{ availableApplications.length !== 0 &&
{renderFirstLayerItems()}
} { availableApplications.length === 0 &&

No menu items available

Please check your permissions or contact an administrator

}
) }; export default MenuItemsSection;