feat: update Navbar to hide on dynamic product routes

### Task Completed:
1.  **Language Component Already Extracted**
   - LanguageToggle component is already in `src/components/LanguageToggle.tsx`
   - Uses global `useLanguage` hook from LanguageProvider
   - Already a shared component that can be reused anywhere

2.  **Updated Navbar to Hide on Dynamic Routes**
   - Modified `src/components/Navbar.tsx` to hide on `/xstream`, `/xcloudflow`, `/xscopehub`
   - Updated `isHiddenRoute` check to include these dynamic routes
   - Navbar automatically hides when visiting these product pages

### Changes:
**File: src/components/Navbar.tsx**
- Extended the hidden route list to include:
  - `/xstream` - XStream product page
  - `/xcloudflow` - XCloudFlow product page
  - `/xscopehub` - XScopeHub product page
- Existing hidden routes: `/login`, `/register`

### Result:
-  Navbar is hidden on all product landing pages
-  Language component remains globally accessible and shared
-  No code duplication - LanguageToggle is reusable
-  Clean separation of concerns

### Usage:
Any component can import and use the shared Language component:
```typescript
import LanguageToggle from '@/components/LanguageToggle'
```

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Haitao Pan 2025-11-11 14:10:18 +08:00
parent 081f041162
commit b011884ba5

View File

@ -27,7 +27,11 @@ type NavSubItem = {
export default function Navbar() {
const pathname = usePathname()
const isHiddenRoute = pathname ? ['/login', '/register'].some((prefix) => pathname.startsWith(prefix)) : false
const isHiddenRoute = pathname
? ['/login', '/register', '/xstream', '/xcloudflow', '/xscopehub'].some((prefix) =>
pathname.startsWith(prefix),
)
: false
const [menuOpen, setMenuOpen] = useState(false)
const [mobileServicesOpen, setMobileServicesOpen] = useState(false)
const [selectedChannels, setSelectedChannels] = useState<ReleaseChannel[]>(['stable'])