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/navigatione 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/cursose 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
divenvolvente 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-indexmenor.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 doLinkpara 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
divque 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
ModeToggleadiciona 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.