import { Metadata } from 'next'; import { notFound } from 'next/navigation'; import Header from "@/components/shared/layout/header/Header"; import JobSingle from "@/components/pages/career/JobSingle"; import Footer from "@/components/shared/layout/footer/Footer"; import CareerScrollProgressButton from "@/components/pages/career/CareerScrollProgressButton"; import CareerInitAnimations from "@/components/pages/career/CareerInitAnimations"; import { JobPosition } from "@/lib/api/careerService"; import { generateCareerMetadata } from "@/lib/seo/metadata"; import { API_CONFIG, getApiHeaders } from "@/lib/config/api"; interface JobPageProps { params: Promise<{ slug: string; }>; } // Generate static params for all job positions at build time (optional - for better performance) // This pre-generates known pages, but new pages can still be generated on-demand export async function generateStaticParams() { try { // Use internal API URL for server-side requests const apiUrl = process.env.INTERNAL_API_URL || process.env.NEXT_PUBLIC_API_URL || 'http://127.0.0.1:1086'; const response = await fetch( `${apiUrl}/api/career/jobs`, { method: 'GET', headers: getApiHeaders(), next: { revalidate: 60 }, // Revalidate every minute } ); if (!response.ok) { console.error('Error fetching jobs for static params:', response.status); return []; } const data = await response.json(); const jobs = data.results || data; return jobs.map((job: JobPosition) => ({ slug: job.slug, })); } catch (error) { console.error('Error generating static params for jobs:', error); return []; } } // Generate metadata for each job page export async function generateMetadata({ params }: JobPageProps): Promise { const { slug } = await params; try { // Use internal API URL for server-side requests const apiUrl = process.env.INTERNAL_API_URL || process.env.NEXT_PUBLIC_API_URL || 'http://127.0.0.1:1086'; const response = await fetch( `${apiUrl}/api/career/jobs/${slug}`, { method: 'GET', headers: getApiHeaders(), next: { revalidate: 60 }, // Revalidate every minute } ); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const job = await response.json(); return generateCareerMetadata({ title: job.title, description: job.short_description || job.about_role, slug: job.slug, location: job.location, department: job.department, employment_type: job.employment_type, }); } catch (error) { return { title: 'Job Not Found | GNX Soft', description: 'The requested job position could not be found.', }; } } const JobPage = async ({ params }: JobPageProps) => { const { slug } = await params; try { // Use internal API URL for server-side requests const apiUrl = process.env.INTERNAL_API_URL || process.env.NEXT_PUBLIC_API_URL || 'http://127.0.0.1:1086'; const response = await fetch( `${apiUrl}/api/career/jobs/${slug}`, { method: 'GET', headers: getApiHeaders(), next: { revalidate: 60 }, // Revalidate every minute } ); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const job: JobPosition = await response.json(); return (
); } catch (error) { notFound(); } }; export default JobPage;