Commit 5d6c743c authored by Wellton Quirino's avatar Wellton Quirino

feat: active links in categories page and adjustments forms in admin pages

parent 69fc9fbd
...@@ -9,7 +9,9 @@ import { Differences } from '@/components/differences' ...@@ -9,7 +9,9 @@ import { Differences } from '@/components/differences'
import { InputMui } from '@/components/mui/inputs' import { InputMui } from '@/components/mui/inputs'
import { NavLinkCategory } from '@/components/nav-link-category' import { NavLinkCategory } from '@/components/nav-link-category'
import { SignUp } from '@/components/sign-up' import { SignUp } from '@/components/sign-up'
import { SkeletonSerachParams } from '@/components/skeleton-serach-params'
import { Button } from '@/components/ui/button' import { Button } from '@/components/ui/button'
import { Suspense } from 'react'
export default function Home() { export default function Home() {
return ( return (
...@@ -19,7 +21,9 @@ export default function Home() { ...@@ -19,7 +21,9 @@ export default function Home() {
<Banner /> <Banner />
<div className="container flex flex-col"> <div className="container flex flex-col">
<NavLinkCategory /> <Suspense fallback={<SkeletonSerachParams />}>
<NavLinkCategory />
</Suspense>
<div className="flex justify-center items-center w-full md:w-1/2 mx-auto mb-8"> <div className="flex justify-center items-center w-full md:w-1/2 mx-auto mb-8">
<InputMui <InputMui
label="O que você quer aprender hoje?" label="O que você quer aprender hoje?"
......
'use client' 'use client'
import { StyledInputs } from '@/components/mui/styled-inputs' import { InputMui } from '@/components/mui/inputs'
import { Button } from '@/components/ui/button' import { Button } from '@/components/ui/button'
import { Calendar } from '@/components/ui/calendar' import { Calendar } from '@/components/ui/calendar'
import { Checkbox } from '@/components/ui/checkbox' import { Checkbox } from '@/components/ui/checkbox'
...@@ -12,14 +12,14 @@ import { ...@@ -12,14 +12,14 @@ import {
} from '@/components/ui/popover' } from '@/components/ui/popover'
import { Separator } from '@/components/ui/separator' import { Separator } from '@/components/ui/separator'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'
import { Autocomplete, TextField } from '@mui/material' import { MenuItem } from '@mui/material'
import { format } from 'date-fns' import { format } from 'date-fns'
import { CalendarIcon, PlusIcon, Trash } from 'lucide-react' import { CalendarIcon, PlusIcon, Trash } from 'lucide-react'
import { useState } from 'react' import { useState } from 'react'
const options = [ const options = [
{ label: 'The Godfather', id: 1 }, { label: 'The Godfather', value: 1 },
{ label: 'Pulp Fiction', id: 2 }, { label: 'Pulp Fiction', value: 2 },
] ]
export default function EditCourse() { export default function EditCourse() {
...@@ -50,35 +50,28 @@ export default function EditCourse() { ...@@ -50,35 +50,28 @@ export default function EditCourse() {
Informações sobre o curso Informações sobre o curso
</h6> </h6>
<TextField <InputMui label="Nome do curso" variant="standard" type="text" />
label="Nome do curso"
variant="standard"
type="text"
sx={StyledInputs({ color: '#26AAA7' })}
/>
<Autocomplete <InputMui type="text" variant="standard" label="Área" select>
options={options} {options.map((option) => (
sx={StyledInputs({ color: '#26AAA7' })} <MenuItem key={option.value} value={option.value}>
renderInput={(params) => ( {option.label}
<TextField {...params} label="Área" variant="standard" /> </MenuItem>
)} ))}
/> </InputMui>
<TextField <InputMui
label="Descrição do Curso" label="Descrição do Curso"
variant="standard" variant="standard"
type="text" type="text"
multiline multiline
rows={4} rows={4}
sx={StyledInputs({ color: '#26AAA7' })}
/> />
<TextField <InputMui
label="Nome dos(as) Professores(as):" label="Nome dos(as) Professores(as):"
variant="standard" variant="standard"
type="text" type="text"
sx={StyledInputs({ color: '#26AAA7' })}
/> />
<div className="flex justify-between flex-wrap gap-6"> <div className="flex justify-between flex-wrap gap-6">
...@@ -195,21 +188,15 @@ export default function EditCourse() { ...@@ -195,21 +188,15 @@ export default function EditCourse() {
<h6 className="text-xl text-purple-100 mb-4">Módulos</h6> <h6 className="text-xl text-purple-100 mb-4">Módulos</h6>
<div className="flex flex-col p-4 gap-6 border border-green-900"> <div className="flex flex-col p-4 gap-6 border border-gray-100">
<TextField <InputMui label="Título" variant="standard" type="text" />
label="Título"
variant="standard"
type="text"
sx={StyledInputs({ color: '#26AAA7' })}
/>
<TextField <InputMui
label="Descrição" label="Descrição"
variant="standard" variant="standard"
type="text" type="text"
multiline multiline
rows={4} rows={4}
sx={StyledInputs({ color: '#26AAA7' })}
/> />
</div> </div>
......
'use client' 'use client'
import { StyledInputs } from '@/components/mui/styled-inputs' import { InputMui } from '@/components/mui/inputs'
import { Button } from '@/components/ui/button' import { Button } from '@/components/ui/button'
import { Calendar } from '@/components/ui/calendar' import { Calendar } from '@/components/ui/calendar'
import { Checkbox } from '@/components/ui/checkbox' import { Checkbox } from '@/components/ui/checkbox'
...@@ -12,14 +12,14 @@ import { ...@@ -12,14 +12,14 @@ import {
} from '@/components/ui/popover' } from '@/components/ui/popover'
import { Separator } from '@/components/ui/separator' import { Separator } from '@/components/ui/separator'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'
import { Autocomplete, TextField } from '@mui/material' import { MenuItem } from '@mui/material'
import { format } from 'date-fns' import { format } from 'date-fns'
import { CalendarIcon, PlusIcon, Trash } from 'lucide-react' import { CalendarIcon, PlusIcon, Trash } from 'lucide-react'
import { useState } from 'react' import { useState } from 'react'
const options = [ const options = [
{ label: 'The Godfather', id: 1 }, { label: 'The Godfather', value: 1 },
{ label: 'Pulp Fiction', id: 2 }, { label: 'Pulp Fiction', value: 2 },
] ]
export default function Curso() { export default function Curso() {
...@@ -50,35 +50,28 @@ export default function Curso() { ...@@ -50,35 +50,28 @@ export default function Curso() {
Informações sobre o curso Informações sobre o curso
</h6> </h6>
<TextField <InputMui label="Nome do curso" variant="standard" type="text" />
label="Nome do curso"
variant="standard"
type="text"
sx={StyledInputs({ color: '#26AAA7' })}
/>
<Autocomplete <InputMui type="text" variant="standard" label="Área" select>
options={options} {options.map((option) => (
sx={StyledInputs({ color: '#26AAA7' })} <MenuItem key={option.value} value={option.value}>
renderInput={(params) => ( {option.label}
<TextField {...params} label="Área" variant="standard" /> </MenuItem>
)} ))}
/> </InputMui>
<TextField <InputMui
label="Descrição do Curso" label="Descrição do Curso"
variant="standard" variant="standard"
type="text" type="text"
multiline multiline
rows={4} rows={4}
sx={StyledInputs({ color: '#26AAA7' })}
/> />
<TextField <InputMui
label="Nome dos(as) Professores(as):" label="Nome dos(as) Professores(as):"
variant="standard" variant="standard"
type="text" type="text"
sx={StyledInputs({ color: '#26AAA7' })}
/> />
<div className="flex justify-between flex-wrap gap-6"> <div className="flex justify-between flex-wrap gap-6">
...@@ -98,7 +91,6 @@ export default function Curso() { ...@@ -98,7 +91,6 @@ export default function Curso() {
<span className="mt-4">Dimensões recomendadas: </span> <span className="mt-4">Dimensões recomendadas: </span>
<span>Formatos aceitos: .png, .jpg</span> <span>Formatos aceitos: .png, .jpg</span>
<Button <Button
asChild
variant="third" variant="third"
className="border border-dotted border-green-400 rounded-sm mt-6 mx-auto md:w-[436px]" className="border border-dotted border-green-400 rounded-sm mt-6 mx-auto md:w-[436px]"
> >
...@@ -196,21 +188,15 @@ export default function Curso() { ...@@ -196,21 +188,15 @@ export default function Curso() {
<h6 className="text-xl text-purple-100 mb-4">Módulos</h6> <h6 className="text-xl text-purple-100 mb-4">Módulos</h6>
<div className="flex flex-col p-4 gap-6 border border-green-900"> <div className="flex flex-col p-4 gap-6 border border-gray-100">
<TextField <InputMui label="Título" variant="standard" type="text" />
label="Título"
variant="standard"
type="text"
sx={StyledInputs({ color: '#26AAA7' })}
/>
<TextField <InputMui
label="Descrição" label="Descrição"
variant="standard" variant="standard"
type="text" type="text"
multiline multiline
rows={4} rows={4}
sx={StyledInputs({ color: '#26AAA7' })}
/> />
</div> </div>
......
...@@ -103,10 +103,10 @@ export default function Admin() { ...@@ -103,10 +103,10 @@ export default function Admin() {
{CoursesCard.map((course) => ( {CoursesCard.map((course) => (
<Link <Link
key={course.id} key={course.id}
className="lowercase" className="lowercase scale-100 hover:scale-105 duration-300"
href={`admin/curso/${course.id}`} href={`admin/curso/${course.id}`}
> >
<div className={`bg-gray-100 pb-4 rounded-lg max-w-[163px]`}> <div className="border border-gray-100 pb-4 rounded-lg overflow-hidden">
<Card.Image image={course.image.src} width={240} height={320}> <Card.Image image={course.image.src} width={240} height={320}>
<Card.Title title={course.title} /> <Card.Title title={course.title} />
</Card.Image> </Card.Image>
......
...@@ -6,14 +6,18 @@ import { NavLinkCategory } from '@/components/nav-link-category' ...@@ -6,14 +6,18 @@ import { NavLinkCategory } from '@/components/nav-link-category'
import { PaginationComponent } from '@/components/pagination-component' import { PaginationComponent } from '@/components/pagination-component'
import SearchFilter from '@/components/search-filter' import SearchFilter from '@/components/search-filter'
import { SignUp } from '@/components/sign-up' import { SignUp } from '@/components/sign-up'
import { SkeletonSerachParams } from '@/components/skeleton-serach-params'
import { CoursesCard } from '@/utils/courses-array' import { CoursesCard } from '@/utils/courses-array'
import { Calendar, Clock4, User } from 'lucide-react' import { Calendar, Clock4, User } from 'lucide-react'
import { Suspense } from 'react'
export default function Companies() { export default function Companies() {
return ( return (
<main> <main>
<BannerCategory title="Empresas" /> <BannerCategory title="Empresas" />
<NavLinkCategory /> <Suspense fallback={<SkeletonSerachParams />}>
<NavLinkCategory />
</Suspense>
<SearchFilter /> <SearchFilter />
<div className="grid grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5 grid-rows-3 lg:grid-rows-2 gap-4 md:gap-6 p-6"> <div className="grid grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5 grid-rows-3 lg:grid-rows-2 gap-4 md:gap-6 p-6">
{CoursesCard.map((course) => ( {CoursesCard.map((course) => (
......
...@@ -6,14 +6,18 @@ import { NavLinkCategory } from '@/components/nav-link-category' ...@@ -6,14 +6,18 @@ import { NavLinkCategory } from '@/components/nav-link-category'
import { PaginationComponent } from '@/components/pagination-component' import { PaginationComponent } from '@/components/pagination-component'
import SearchFilter from '@/components/search-filter' import SearchFilter from '@/components/search-filter'
import { SignUp } from '@/components/sign-up' import { SignUp } from '@/components/sign-up'
import { SkeletonSerachParams } from '@/components/skeleton-serach-params'
import { CoursesCard } from '@/utils/courses-array' import { CoursesCard } from '@/utils/courses-array'
import { Calendar, Clock4, User } from 'lucide-react' import { Calendar, Clock4, User } from 'lucide-react'
import { Suspense } from 'react'
export default function Students() { export default function Students() {
return ( return (
<main> <main>
<BannerCategory title="Estudantes" /> <BannerCategory title="Estudantes" />
<NavLinkCategory /> <Suspense fallback={<SkeletonSerachParams />}>
<NavLinkCategory />
</Suspense>
<SearchFilter /> <SearchFilter />
<div className="grid rounded-none grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5 grid-rows-3 lg:grid-rows-2 gap-4 md:gap-6 p-6"> <div className="grid rounded-none grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5 grid-rows-3 lg:grid-rows-2 gap-4 md:gap-6 p-6">
{CoursesCard.map((course) => ( {CoursesCard.map((course) => (
......
...@@ -6,14 +6,18 @@ import { NavLinkCategory } from '@/components/nav-link-category' ...@@ -6,14 +6,18 @@ import { NavLinkCategory } from '@/components/nav-link-category'
import { PaginationComponent } from '@/components/pagination-component' import { PaginationComponent } from '@/components/pagination-component'
import SearchFilter from '@/components/search-filter' import SearchFilter from '@/components/search-filter'
import { SignUp } from '@/components/sign-up' import { SignUp } from '@/components/sign-up'
import { SkeletonSerachParams } from '@/components/skeleton-serach-params'
import { CoursesCard } from '@/utils/courses-array' import { CoursesCard } from '@/utils/courses-array'
import { Calendar, Clock4, User } from 'lucide-react' import { Calendar, Clock4, User } from 'lucide-react'
import { Suspense } from 'react'
export default function Professionals() { export default function Professionals() {
return ( return (
<main> <main>
<BannerCategory title="Profissionais" /> <BannerCategory title="Profissionais" />
<NavLinkCategory /> <Suspense fallback={<SkeletonSerachParams />}>
<NavLinkCategory />
</Suspense>
<SearchFilter /> <SearchFilter />
<div className="grid grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5 grid-rows-3 lg:grid-rows-2 gap-4 md:gap-6 p-6"> <div className="grid grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5 grid-rows-3 lg:grid-rows-2 gap-4 md:gap-6 p-6">
{CoursesCard.map((course) => ( {CoursesCard.map((course) => (
......
type CardTitleProps = { type CardTitleProps = {
title: string title: string
className?: React.HTMLProps<HTMLElement>['className']
} }
export function CardTitle({ title }: CardTitleProps) { export function CardTitle({ title, className }: CardTitleProps) {
return ( return (
<span className="text-center text-lg text-gray-50 lg:text-2xl px-1 pb-6"> <span
className={`text-center text-lg text-gray-50 lg:text-2xl px-1 pb-6 ${className}`}
>
{title} {title}
</span> </span>
) )
......
...@@ -10,7 +10,7 @@ export function CourseCategory() { ...@@ -10,7 +10,7 @@ export function CourseCategory() {
<section className="hidden md:block"> <section className="hidden md:block">
<div className="h-auto flex justify-center items-center my-20 px-6"> <div className="h-auto flex justify-center items-center my-20 px-6">
<ul className="flex justify-center items-center gap-4 text-gray-50"> <ul className="flex justify-center items-center gap-4 text-gray-50">
<li className="max-w-[472px] bg-gradient-to-r from-green-700 to-green-900 rounded-lg pb-4 transform scale-95 hover:scale-100 transition-transform duration-300 drop-shadow-xl hover:drop-shadow-2xl"> <li className="max-w-[472px] bg-gradient-to-r from-green-700 to-green-900 rounded-lg pb-4 scale-95 hover:scale-100 duration-300 drop-shadow-xl hover:drop-shadow-2xl">
<Link href="#" className="flex flex-col gap-4 p-2"> <Link href="#" className="flex flex-col gap-4 p-2">
<Image <Image
src={ImageFast} src={ImageFast}
...@@ -25,7 +25,7 @@ export function CourseCategory() { ...@@ -25,7 +25,7 @@ export function CourseCategory() {
</p> </p>
</Link> </Link>
</li> </li>
<li className="max-w-[472px] bg-gradient-to-r from-green-700 to-green-900 rounded-lg pb-4 transform scale-95 hover:scale-100 transition-transform duration-300 drop-shadow-xl hover:drop-shadow-2xl"> <li className="max-w-[472px] bg-gradient-to-r from-green-700 to-green-900 rounded-lg pb-4 scale-95 hover:scale-100 duration-300 drop-shadow-xl hover:drop-shadow-2xl">
<Link href="#" className="flex flex-col gap-4 p-2"> <Link href="#" className="flex flex-col gap-4 p-2">
<Image <Image
src={ImageDeepen} src={ImageDeepen}
...@@ -40,7 +40,7 @@ export function CourseCategory() { ...@@ -40,7 +40,7 @@ export function CourseCategory() {
</p> </p>
</Link> </Link>
</li> </li>
<li className="max-w-[472px] bg-gradient-to-r from-green-700 to-green-900 rounded-lg pb-4 transform scale-95 hover:scale-100 transition-transform duration-300 drop-shadow-xl hover:drop-shadow-2xl"> <li className="max-w-[472px] bg-gradient-to-r from-green-700 to-green-900 rounded-lg pb-4 scale-95 hover:scale-100 duration-300 drop-shadow-xl hover:drop-shadow-2xl">
<Link href="#" className="flex flex-col gap-4 p-2"> <Link href="#" className="flex flex-col gap-4 p-2">
<Image <Image
src={ImageCorporate} src={ImageCorporate}
......
import { ComponentProps } from 'react' import { ComponentProps } from 'react'
function LogoComponent(props: ComponentProps<'svg'>) { function LogoComponent(props: ComponentProps<'svg'>) {
console.log('props', props)
return ( return (
<svg <svg
width={115} width={115}
......
import Link from 'next/link' import { NavLinkSearchParams } from './nav-link-search-params'
import { Button } from './ui/button'
export function NavLinkCategory() { export function NavLinkCategory() {
return ( return (
<div className="container my-10"> <nav className="container my-10">
<ul className="flex flex-wrap justify-center items-center gap-8"> <ul className="flex flex-wrap justify-center items-center gap-8">
<li> <li>
<Button asChild className="uppercase"> <NavLinkSearchParams
<Link href="#">Tecnologia</Link> variant="default"
</Button> href="tecnologia"
className="uppercase"
>
Tecnologia
</NavLinkSearchParams>
</li> </li>
<li> <li>
<Button asChild className="uppercase"> <NavLinkSearchParams
<Link href="#">Negócios</Link> variant="default"
</Button> href="negocios"
className="uppercase"
>
Negócios
</NavLinkSearchParams>
</li> </li>
<li> <li>
<Button asChild className="uppercase"> <NavLinkSearchParams
<Link href="#">Saúde</Link> variant="default"
</Button> href="saude"
className="uppercase"
>
Saúde
</NavLinkSearchParams>
</li> </li>
<li> <li>
<Button asChild className="uppercase"> <NavLinkSearchParams
<Link href="#">Educação</Link> variant="default"
</Button> href="educacao"
className="uppercase"
>
Educação
</NavLinkSearchParams>
</li> </li>
<li> <li>
<Button asChild className="uppercase"> <NavLinkSearchParams
<Link href="#">Comunicação</Link> variant="default"
</Button> href="comunicacao"
className="uppercase"
>
Comunicação
</NavLinkSearchParams>
</li> </li>
<li> <li>
<Button asChild className="uppercase"> <NavLinkSearchParams
<Link href="#">Teologia</Link> variant="default"
</Button> href="teologia"
className="uppercase"
>
Teologia
</NavLinkSearchParams>
</li> </li>
</ul> </ul>
</div> </nav>
) )
} }
'use client'
import Link, { LinkProps } from 'next/link'
import { useSearchParams } from 'next/navigation'
import { Button } from './ui/button'
interface NavLinkProps extends LinkProps {
variant:
| 'default'
| 'secondary'
| 'third'
| 'destructive'
| 'outline'
| 'ghost'
| 'link'
| null
| undefined
children: React.ReactNode
className?: React.HTMLProps<HTMLElement>['className']
}
export function NavLinkSearchParams(props: NavLinkProps) {
const searchParams = useSearchParams()
const category = searchParams.get('categoria')
return (
<Button
data-current={category === props.href}
className={`data-[current=true]:font-semibold rounded-2xl ${props.className}`}
variant={category === props.href ? 'third' : props.variant}
asChild
>
<Link href={{ query: { categoria: props.href as string } }}>
{props.children}
</Link>
</Button>
)
}
export function SkeletonSerachParams() {
return <div>CARREGANDO...</div>
}
...@@ -61,7 +61,7 @@ export const CoursesCard: CoursesCardTypes[] = [ ...@@ -61,7 +61,7 @@ export const CoursesCard: CoursesCardTypes[] = [
image: banner, image: banner,
title: 'Gestão em Saúde', title: 'Gestão em Saúde',
hours: '30 h / Curso rápido', hours: '30 h / Curso rápido',
category: 'estudante', category: 'saúde',
calender: 'Início imediato', calender: 'Início imediato',
}, },
{ {
...@@ -77,7 +77,7 @@ export const CoursesCard: CoursesCardTypes[] = [ ...@@ -77,7 +77,7 @@ export const CoursesCard: CoursesCardTypes[] = [
image: ImageCoverCourse, image: ImageCoverCourse,
title: 'Gestão em Saúde', title: 'Gestão em Saúde',
hours: '30 h / Curso rápido', hours: '30 h / Curso rápido',
category: 'estudante', category: 'saúde',
calender: 'Início imediato', calender: 'Início imediato',
}, },
{ {
...@@ -85,7 +85,7 @@ export const CoursesCard: CoursesCardTypes[] = [ ...@@ -85,7 +85,7 @@ export const CoursesCard: CoursesCardTypes[] = [
image: banner, image: banner,
title: 'Gestão em Projetos', title: 'Gestão em Projetos',
hours: '30 h / Curso rápido', hours: '30 h / Curso rápido',
category: 'estudante', category: 'negócios',
calender: 'Início imediato', calender: 'Início imediato',
}, },
{ {
...@@ -93,7 +93,7 @@ export const CoursesCard: CoursesCardTypes[] = [ ...@@ -93,7 +93,7 @@ export const CoursesCard: CoursesCardTypes[] = [
image: ImageCoverCourse, image: ImageCoverCourse,
title: 'Gestão em Saúde', title: 'Gestão em Saúde',
hours: '30 h / Curso rápido', hours: '30 h / Curso rápido',
category: 'estudante', category: 'saúde',
calender: 'Início imediato', calender: 'Início imediato',
}, },
] ]
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment