Explicação:
O componente NavBar é responsável por exibir a barra de navegação do site, com links para páginas como "Cursos" e "Admin", além de um ModeToggle para permitir a troca de tema (claro/escuro). O componente também impede a exibição da barra de navegação em páginas de lições (cursos específicos).
Detalhamento do código:
-
const pathname = usePathname()
:- A função
usePathname()
é importada denext/navigation
e utilizada para obter o caminho atual da URL. Isso é importante para determinar em qual página o usuário está. - 🔍 Obter o caminho da URL: Através desse caminho, a lógica pode verificar se o componente deve ser exibido ou não, como no caso de impedir a navegação na página de lições.
- A função
-
const parts = pathname.split('/')
:- O caminho é dividido em partes usando
split('/')
, resultando em um array de segmentos. Por exemplo, para a URL/cursos/123/lesson
, o array seria['', 'cursos', '123', 'lesson']
. - 🧩 Quebra da URL em partes: Permite analisar a URL de forma mais detalhada, facilitando a lógica de exibição condicional.
- O caminho é dividido em partes usando
-
const isLessonPage = parts[1] === 'cursos' && parts.length >= 5
:- A variável
isLessonPage
é um booleano que verifica se a URL corresponde a uma página de lição, ou seja, se a URL começa com/cursos
e possui 5 ou mais partes. - 🚫 Evitar exibição em páginas de lições: Se a página atual for uma lição, a navegação é escondida, retornando
null
.
- A variável
-
return null
:- Caso a página seja uma lição, o componente retorna
null
, ou seja, nada será exibido. - ⚠️ Sem barra de navegação nas lições: Isso garante que a barra de navegação não apareça nas páginas de lições.
- Caso a página seja uma lição, o componente retorna
-
<div className="relative z-20 p-1 flex justify-between border-b bg-card bg-opacity-80">
:- Um
div
envolvente que serve como contêiner para a barra de navegação. Ele tem:relative
: Posicionamento relativo para sobrepor outros elementos, se necessário.z-20
: Ele é renderizado acima de outros elementos comz-index
menor.p-1
: Espaçamento interno pequeno.flex justify-between
: Usa flexbox para organizar os itens dentro do contêiner, garantindo que os itens fiquem afastados (com espaço entre eles).border-b
: Adiciona uma borda inferior à barra de navegação.bg-card bg-opacity-80
: Define o fundo com uma leve transparência, usando classes Tailwind CSS.
- 📦 Contêiner flexível: Organiza os itens da navegação com espaçamento e estilo visual.
- Um
-
<Link href="/" className="flex items-center">
:- O
Link
é utilizado para redirecionar para a página inicial do site (/
). LogoPetAcademy
é o componente de logo, que é envolto dentro doLink
para ser clicável.- 🏠 Link para a página inicial: Faz o logo ser um link que leva à página inicial.
- O
-
<div className="flex items-center space-x-4">
:- Um
div
que contém os links para as páginas de "Cursos" e "Admin", com espaçamento entre eles. - 📱 Disposição dos itens: Organiza os itens horizontalmente com o uso de flexbox e aplica um espaçamento
space-x-4
.
- Um
-
<ModeToggle context="navbar" />
:- O
ModeToggle
é um componente que alterna entre os modos de tema claro e escuro. - 🌙 Troca de tema: O componente
ModeToggle
adiciona funcionalidade para alternar entre temas dentro da barra de navegação.
- O
Código Completo:
'use client'
import React from 'react'
import { usePathname } from 'next/navigation'
import { ModeToggle } from '@/components/ThemeSwitcher'
import LogoPetAcademy from '@/components/LogoPetAcademy'
import Link from 'next/link'
export default function NavBar() {
const pathname = usePathname()
const parts = pathname.split('/')
const isLessonPage = parts[1] === 'cursos' && parts.length >= 5
if (isLessonPage) return null
return (
<div className="relative z-20 p-1 flex justify-between border-b bg-card bg-opacity-80">
<Link href="/" className="flex items-center">
<LogoPetAcademy />
</Link>
<div className="flex items-center space-x-4">
<Link href="/cursos" className="hover:text-primary">
Cursos
</Link>
<Link href="/admin" className="hover:text-primary">
Admin
</Link>
<ModeToggle context="navbar" />
</div>
</div>
)
}
Este é o código completo do componente NavBar, que exibe uma barra de navegação com links para as páginas "Cursos" e "Admin", além de um controle para alternar entre os modos de tema claro e escuro. Ele também verifica se a página atual é uma página de lição e, em caso afirmativo, esconde a barra de navegação.