import * as React from 'react' import { useMediaQuery } from '../../../hooks/responsiveHooks' import { type MobileTabsOptionsProps } from '../MobileTabs/MobileTabsOptions' import MobileRouterTabs from './Mobile/MobileRouterTabs' import DesktopRouterTabsNew from './Desktop/DesktopRouterTabsNew' type BaseRouteConfig = { /** The label that will display for the link label */ label: string /** The route link */ link: string } export type RouteConfig = BaseRouteConfig & { /** Array of the BaseRouteConfig objects. Object includes label and link. */ subrows?: BaseRouteConfig[] } type RouterTabsBaseProps = { /** Multiple children. Typically in the form of NavLink components */ children: React.ReactNode[] /** Determines the style of the tabs. If true, the subtabs style will be applied. */ subtabs?: boolean /** Current path from the router */ currentPath: string /** Refresh router tab animation */ refreshRouterTabs?: boolean /** Optional prop to add a test id to the RouterTabs for QA testing */ qaTestId?: string } type RouterTabsWithMobile = RouterTabsBaseProps & { /** Array of the RouteConfig object. Needed to render the tab options for mobile. */ mobileConfig: RouteConfig[] /** Pass in a navigate function (useHistory, useNavigate, or other functions) depending on the router the app is using. */ navigate: MobileTabsOptionsProps['navigate'] } type RouterTabsWithoutMobile = RouterTabsBaseProps & { mobileConfig?: never navigate?: never } export type RouterTabsProps = RouterTabsWithMobile | RouterTabsWithoutMobile export default function RouterTabs({ children, subtabs = false, mobileConfig, navigate, currentPath, refreshRouterTabs = false, qaTestId = 'router-tabs', }: RouterTabsProps): React.JSX.Element { const isMobile = useMediaQuery({ type: 'max', breakpoint: 'md' }) if (isMobile && mobileConfig) { return ( ) } if (isMobile && subtabs) { return <> } return ( {children} ) }