{"version":3,"file":"components/Layout/menus.mjs","sources":["../../../src/components/Layout/menus.tsx"],"sourcesContent":["import {\n  BoxPlotFilled,\n  MenuOutlined,\n  FundFilled,\n  ApiFilled,\n  NodeIndexOutlined,\n} from '@ant-design/icons';\nimport { Manifest, SDK } from '@rsdoctor/types';\nimport { Menu, MenuProps } from 'antd';\nimport React, { useEffect, useState } from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport { Size } from '../../constants';\nimport * as OverallConstants from '../../pages/Overall/constants';\nimport {\n  useI18n,\n  hasBundle,\n  hasCompile,\n  getEnableRoutesFromUrlQuery,\n  useTheme,\n} from '../../utils';\nimport { withServerAPI } from '../Manifest';\nimport OverallActive from 'src/common/svg/navbar/overall-active.svg';\nimport OverallInActive from 'src/common/svg/navbar/overall-inactive.svg';\nimport CompileAnalysisActive from 'src/common/svg/navbar/compile-analysis-active.svg';\nimport CompileAnalysisInActive from 'src/common/svg/navbar/compile-analysis-inactive.svg';\nimport BundleSizeActive from 'src/common/svg/navbar/bundle-size-active.svg';\nimport BundleSizeInActive from 'src/common/svg/navbar/bundle-size-inactive.svg';\nimport {\n  BundleSize,\n  LoaderFiles,\n  PluginsAnalyze,\n  ModuleResolve,\n  LoaderTimeline,\n} from 'src/pages';\nimport { CompileName } from './constants';\nimport styles from './header.module.scss';\n\nconst BuilderSwitchName = 'builder-switcher';\n\nconst defaultInActive = {\n  overall: <OverallInActive />,\n  webpack: <CompileAnalysisInActive />,\n  bundle: <BundleSizeInActive />,\n};\nconst MenusBase: React.FC<{\n  style?: React.CSSProperties;\n  routes: Manifest.RsdoctorManifestClientRoutes[];\n}> = (props) => {\n  const { t } = useI18n();\n  const { pathname } = useLocation();\n  const navigate = useNavigate();\n  const [navIcon, setNavIcon] = useState(defaultInActive);\n  const { routes: apiRoutes } = props;\n\n  // Get enableRoutes from URL query as fallback\n  const urlEnableRoutes = getEnableRoutesFromUrlQuery();\n  const enableRoutes =\n    apiRoutes && apiRoutes.length > 0\n      ? apiRoutes\n      : (urlEnableRoutes as Manifest.RsdoctorManifestClientRoutes[]) || [];\n\n  useEffect(() => {\n    if (pathname.includes('webpack')) {\n      setNavIcon({\n        ...defaultInActive,\n        webpack: <CompileAnalysisActive />,\n      });\n    } else if (pathname.includes('overall') || pathname === '/') {\n      setNavIcon({\n        ...defaultInActive,\n        overall: <OverallActive />,\n      });\n    } else if (pathname.includes('bundle')) {\n      setNavIcon({\n        ...defaultInActive,\n        bundle: <BundleSizeActive />,\n      });\n    }\n  }, [pathname]);\n\n  const iconStyle: React.CSSProperties = {\n    color: 'rgba(96, 102, 114)',\n  };\n  const items: MenuProps['items'] = [];\n\n  if (enableRoutes.includes(Manifest.RsdoctorManifestClientRoutes.Overall)) {\n    items.push({\n      label: t(OverallConstants.name),\n      key: OverallConstants.route,\n      icon: navIcon.overall,\n      children: [],\n      onTitleClick(e) {\n        navigate(e.key);\n      },\n    });\n  }\n\n  if (hasCompile(enableRoutes)) {\n    items.push({\n      label: t(CompileName),\n      key: CompileName,\n      icon: navIcon.webpack,\n      children: [\n        enableRoutes.includes(\n          Manifest.RsdoctorManifestClientRoutes.WebpackLoaders,\n        ) && {\n          label: t(LoaderTimeline.name),\n          key: LoaderTimeline.route,\n          icon: <BoxPlotFilled style={iconStyle} />,\n        },\n        enableRoutes.includes(\n          Manifest.RsdoctorManifestClientRoutes.WebpackLoaders,\n        ) && {\n          label: t(LoaderFiles.name),\n          key: LoaderFiles.route,\n          icon: <FundFilled style={iconStyle} />,\n        },\n        enableRoutes.includes(\n          Manifest.RsdoctorManifestClientRoutes.ModuleResolve,\n        ) && {\n          label: t(ModuleResolve.name),\n          key: ModuleResolve.route,\n          icon: <NodeIndexOutlined style={iconStyle} />,\n        },\n        enableRoutes.includes(\n          Manifest.RsdoctorManifestClientRoutes.WebpackPlugins,\n        ) && {\n          label: t(PluginsAnalyze.name),\n          key: PluginsAnalyze.route,\n          icon: <ApiFilled style={iconStyle} />,\n        },\n      ].filter((e) => Boolean(e)) as MenuProps['items'],\n    });\n  }\n\n  if (hasBundle(enableRoutes)) {\n    items.push({\n      label: t(BundleSize.name),\n      key: BundleSize.name,\n      icon: navIcon.bundle,\n      children: [],\n      onTitleClick() {\n        navigate(BundleSize.route);\n      },\n    });\n  }\n\n  const { theme } = useTheme();\n  const MenuComponent = (\n    <Menu\n      items={items}\n      theme={theme}\n      mode=\"horizontal\"\n      key={enableRoutes.join('')}\n      onClick={(e) => {\n        if (!e.keyPath.includes(BuilderSwitchName)) {\n          navigate(e.key);\n        }\n      }}\n      disabledOverflow\n      overflowedIndicator={<MenuOutlined />}\n      className={styles.primaryMenu}\n      style={{\n        height: Size.NavBarHeight,\n        lineHeight: `${Size.NavBarHeight}px`,\n        minWidth: 0,\n        justifyContent: 'flex-start',\n        ...props.style,\n      }}\n      selectedKeys={[pathname === '/' ? OverallConstants.route : pathname]}\n    />\n  );\n\n  return (\n    <nav className={styles.menuContainer} aria-label=\"Primary navigation\">\n      {MenuComponent}\n    </nav>\n  );\n};\n\nexport const Menus = withServerAPI({\n  api: SDK.ServerAPI.API.GetClientRoutes,\n  responsePropName: 'routes',\n  Component: MenusBase,\n  fallbackComponent: () => null,\n  showSkeleton: false,\n});\n"],"names":["BuilderSwitchName","defaultInActive","OverallInActive","CompileAnalysisInActive","BundleSizeInActive","MenusBase","props","t","useI18n","pathname","useLocation","navigate","useNavigate","navIcon","setNavIcon","useState","apiRoutes","urlEnableRoutes","getEnableRoutesFromUrlQuery","enableRoutes","useEffect","CompileAnalysisActive","OverallActive","BundleSizeActive","iconStyle","items","Manifest","OverallConstants","e","hasCompile","CompileName","LoaderTimeline","BoxPlotFilled","LoaderFiles","FundFilled","ModuleResolve","NodeIndexOutlined","PluginsAnalyze","ApiFilled","Boolean","hasBundle","BundleSize","theme","useTheme","MenuComponent","Menu","MenuOutlined","styles","Size","Menus","withServerAPI","SDK"],"mappings":"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"}