|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import React from 'react'; |
|
|
import { Link } from 'react-router-dom'; |
|
|
import SkeletonWrapper from '../components/SkeletonWrapper'; |
|
|
|
|
|
const Navigation = ({ |
|
|
mainNavLinks, |
|
|
isMobile, |
|
|
isLoading, |
|
|
userState, |
|
|
pricingRequireAuth, |
|
|
}) => { |
|
|
const renderNavLinks = () => { |
|
|
const baseClasses = |
|
|
'flex-shrink-0 flex items-center gap-1 font-semibold rounded-md transition-all duration-200 ease-in-out'; |
|
|
const hoverClasses = 'hover:text-semi-color-primary'; |
|
|
const spacingClasses = isMobile ? 'p-1' : 'p-2'; |
|
|
|
|
|
const commonLinkClasses = `${baseClasses} ${spacingClasses} ${hoverClasses}`; |
|
|
|
|
|
return mainNavLinks.map((link) => { |
|
|
const linkContent = <span>{link.text}</span>; |
|
|
|
|
|
if (link.isExternal) { |
|
|
return ( |
|
|
<a |
|
|
key={link.itemKey} |
|
|
href={link.externalLink} |
|
|
target='_blank' |
|
|
rel='noopener noreferrer' |
|
|
className={commonLinkClasses} |
|
|
> |
|
|
{linkContent} |
|
|
</a> |
|
|
); |
|
|
} |
|
|
|
|
|
let targetPath = link.to; |
|
|
if (link.itemKey === 'console' && !userState.user) { |
|
|
targetPath = '/login'; |
|
|
} |
|
|
if (link.itemKey === 'pricing' && pricingRequireAuth && !userState.user) { |
|
|
targetPath = '/login'; |
|
|
} |
|
|
|
|
|
return ( |
|
|
<Link key={link.itemKey} to={targetPath} className={commonLinkClasses}> |
|
|
{linkContent} |
|
|
</Link> |
|
|
); |
|
|
}); |
|
|
}; |
|
|
|
|
|
return ( |
|
|
<nav className='flex flex-1 items-center gap-1 lg:gap-2 mx-2 md:mx-4 overflow-x-auto whitespace-nowrap scrollbar-hide'> |
|
|
<SkeletonWrapper |
|
|
loading={isLoading} |
|
|
type='navigation' |
|
|
count={4} |
|
|
width={60} |
|
|
height={16} |
|
|
isMobile={isMobile} |
|
|
> |
|
|
{renderNavLinks()} |
|
|
</SkeletonWrapper> |
|
|
</nav> |
|
|
); |
|
|
}; |
|
|
|
|
|
export default Navigation; |
|
|
|