"use client";
import { use } from "react";
import { useRouter } from "next/navigation";
import { Navbar } from "@/components/navbar";
import { Footer } from "@/components/footer";
import { Button } from "@/components/ui/button";
import {
Card,
CardContent,
CardDescription,
CardHeader,
CardTitle,
} from "@/components/ui/card";
import { Badge } from "@/components/ui/badge";
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
import { Separator } from "@/components/ui/separator";
import { mockJobs } from "@/lib/mock-data";
import {
MapPin,
Briefcase,
DollarSign,
Calendar,
ArrowLeft,
CheckCircle2,
Building2,
Users,
Clock,
Heart,
Share2,
Bookmark,
Star,
Globe,
} from "lucide-react";
import Link from "next/link";
import { useState } from "react";
import { motion } from "framer-motion";
export const runtime = 'edge';
export default function JobDetailPage({
params,
}: {
params: Promise<{ id: string }>;
}) {
const { id } = use(params);
const router = useRouter();
const [isFavorited, setIsFavorited] = useState(false);
const [isBookmarked, setIsBookmarked] = useState(false);
const job = mockJobs.find((j) => j.id === id);
if (!job) {
return (
Vaga não encontrada
A vaga que você está procurando não existe ou foi removida.
Ver todas as vagas
);
}
const getCompanyInitials = (company: string) => {
return company
.split(" ")
.map((word) => word[0])
.join("")
.toUpperCase()
.slice(0, 2);
};
const formatTimeAgo = (dateString: string) => {
const date = new Date(dateString);
const now = new Date();
const diffInMs = now.getTime() - date.getTime();
const diffInDays = Math.floor(diffInMs / (1000 * 60 * 60 * 24));
if (diffInDays === 0) return "Hoje";
if (diffInDays === 1) return "Ontem";
if (diffInDays < 7) return `${diffInDays} dias atrás`;
if (diffInDays < 30) return `${Math.floor(diffInDays / 7)} semanas atrás`;
return `${Math.floor(diffInDays / 30)} meses atrás`;
};
const getTypeLabel = (type: string) => {
const typeLabels: { [key: string]: string } = {
"full-time": "Tempo integral",
"part-time": "Meio período",
contract: "Contrato",
Remoto: "Remoto",
};
return typeLabels[type] || type;
};
const mockCompanyInfo = {
size: "100-500 funcionários",
industry: "Tecnologia",
founded: "2015",
website: "www.empresa.com",
rating: 4.5,
};
return (
{/* Breadcrumb */}
Voltar para vagas
{/* Main Content */}
{/* Job Header */}
{getCompanyInitials(job.company)}
{job.title}
{job.company}
{mockCompanyInfo.rating}
setIsFavorited(!isFavorited)}
>
setIsBookmarked(!isBookmarked)}
>
{/* Action buttons mobile */}
setIsFavorited(!isFavorited)}
className="flex-1"
>
{isFavorited ? "Favoritado" : "Favoritar"}
setIsBookmarked(!isBookmarked)}
className="flex-1"
>
{isBookmarked ? "Salvo" : "Salvar"}
{/* Job Meta */}
{job.location}
{getTypeLabel(job.type)}
{job.salary && (
{job.salary}
)}
{formatTimeAgo(job.postedAt)}
{/* Apply Button - Mobile */}
Candidatar-se
{/* Job Description */}
Sobre a vaga
{job.description}
{/* Requirements */}
Requisitos
{job.requirements.map((req, index) => (
{req}
))}
{/* Company Info */}
Sobre a empresa
{job.company} é uma empresa líder no mercado,
comprometida em criar um ambiente de trabalho inclusivo
e inovador. Oferecemos benefícios competitivos e
oportunidades de crescimento profissional.
Tamanho
{mockCompanyInfo.size}
Setor
{mockCompanyInfo.industry}
Fundada
{mockCompanyInfo.founded}
{/* Sidebar */}
{/* Apply Card - Desktop */}
Interessado na vaga?
Candidate-se agora e faça parte da nossa equipe!
Candidatar-se
Tipo de vaga:
{getTypeLabel(job.type)}
Localização:
{job.location}
{job.salary && (
Salário:
{job.salary}
)}
Publicado:
{formatTimeAgo(job.postedAt)}
{/* Similar Jobs */}
Vagas similares
{mockJobs
.filter((j) => j.id !== job.id)
.slice(0, 3)
.map((similarJob) => (
{similarJob.title}
{similarJob.company}
{similarJob.location}
))}
Ver todas as vagas
);
}