feat: add training list page, training page and markdown content
This commit is contained in:
parent
3dd584fcf4
commit
e19dbb71cd
16 changed files with 586 additions and 15 deletions
92
pages/skoleni/[slug].tsx
Normal file
92
pages/skoleni/[slug].tsx
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
import Head from "next/head"
|
||||
import { useRouter } from "next/router"
|
||||
import ErrorPage from "next/error"
|
||||
|
||||
import TrainingType from "@/types/training"
|
||||
import { getAllTraining, getTrainingBySlug } from "@/lib/cms/training"
|
||||
import markdownToHTML from "@/lib/markdownToHTML"
|
||||
import { Header } from "@/components/Header"
|
||||
import { Footer } from "@/components/Footer"
|
||||
import { Training } from "@/components/Training"
|
||||
|
||||
type Props = {
|
||||
training: TrainingType
|
||||
featuredTrainingList: TrainingType[]
|
||||
}
|
||||
|
||||
const TrainingPage = ({ training, featuredTrainingList}: Props) => {
|
||||
const router = useRouter()
|
||||
console.log(!router.isFallback)
|
||||
console.log(!training?.slug)
|
||||
console.log(typeof training.draft === 'undefined')
|
||||
// if ((!router.isFallback && !training?.slug) || typeof training.draft === 'undefined') {
|
||||
// return <ErrorPage statusCode={404} />
|
||||
// }
|
||||
|
||||
return (
|
||||
<>
|
||||
<Head>
|
||||
<title>Školení {training.name} | Vojtěch Mareš - DevOps konzultant, lektor, engineer</title>
|
||||
|
||||
<meta
|
||||
name="description"
|
||||
content={`Školení ${training.name} | Vojtěch Mareš - DevOps konzultant, lektor, engineer`}
|
||||
/>
|
||||
</Head>
|
||||
<main>
|
||||
<Header />
|
||||
<Training training={training} />
|
||||
</main>
|
||||
<Footer />
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default TrainingPage
|
||||
|
||||
type Params = {
|
||||
params: {
|
||||
slug: string
|
||||
}
|
||||
}
|
||||
|
||||
export const getStaticProps = async ({ params }: Params) => {
|
||||
const training = getTrainingBySlug(params.slug, [
|
||||
'name',
|
||||
'content',
|
||||
'priceOpen',
|
||||
'priceCompany',
|
||||
'days',
|
||||
'logo',
|
||||
'content',
|
||||
'draft',
|
||||
'new',
|
||||
'featured',
|
||||
])
|
||||
|
||||
const content = await markdownToHTML(training.content || '')
|
||||
|
||||
return {
|
||||
props: {
|
||||
training: {
|
||||
...training,
|
||||
content,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const getStaticPaths = async () => {
|
||||
const trainingList = getAllTraining(['slug'])
|
||||
|
||||
return {
|
||||
paths: trainingList.map((training) => {
|
||||
return {
|
||||
params: {
|
||||
slug: training.slug,
|
||||
}
|
||||
}
|
||||
}),
|
||||
fallback: false,
|
||||
}
|
||||
}
|
||||
Reference in a new issue