| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| 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; |
|
|