diff --git a/packages/twenty-website/src/app/_components/releases/Release.tsx b/packages/twenty-website/src/app/_components/releases/Release.tsx index ac3d952a0..f64d54dad 100644 --- a/packages/twenty-website/src/app/_components/releases/Release.tsx +++ b/packages/twenty-website/src/app/_components/releases/Release.tsx @@ -1,10 +1,8 @@ 'use client'; +import { JSXElementConstructor, ReactElement } from 'react'; import styled from '@emotion/styled'; import { Gabarito } from 'next/font/google'; -import { compileMDX } from 'next-mdx-remote/rsc'; -import remarkBehead from 'remark-behead'; -import gfm from 'remark-gfm'; import { Theme } from '@/app/_components/ui/theme/theme'; import { ReleaseNote } from '@/app/releases/api/route'; @@ -91,24 +89,13 @@ const gabarito = Gabarito({ variable: '--font-gabarito', }); -export const Release = async ({ release }: { release: ReleaseNote }) => { - let mdxSource; - try { - mdxSource = await compileMDX({ - source: release.content, - options: { - mdxOptions: { - development: process.env.NODE_ENV === 'development', - remarkPlugins: [gfm, [remarkBehead, { depth: 2 }]], - }, - }, - }); - mdxSource = mdxSource.content; - } catch (error) { - console.error('An error occurred during MDX rendering:', error); - mdxSource = `

Oops! Something went wrong.

${error}`; - } - +export const Release = ({ + release, + mdxReleaseContent, +}: { + release: ReleaseNote; + mdxReleaseContent: ReactElement>; +}) => { return ( @@ -119,8 +106,7 @@ export const Release = async ({ release }: { release: ReleaseNote }) => { : release.date} - - {mdxSource} + {mdxReleaseContent} ); }; diff --git a/packages/twenty-website/src/app/releases/get-releases.tsx b/packages/twenty-website/src/app/releases/get-releases.tsx index 5b215b043..584977bcb 100644 --- a/packages/twenty-website/src/app/releases/get-releases.tsx +++ b/packages/twenty-website/src/app/releases/get-releases.tsx @@ -1,5 +1,9 @@ +import { JSXElementConstructor, ReactElement } from 'react'; import fs from 'fs'; import matter from 'gray-matter'; +import { compileMDX } from 'next-mdx-remote/rsc'; +import remarkBehead from 'remark-behead'; +import gfm from 'remark-gfm'; import { ReleaseNote } from '@/app/releases/api/route'; import { compareSemanticVersions } from '@/shared-utils/compareSemanticVersions'; @@ -45,3 +49,23 @@ export async function getReleases(baseUrl?: string): Promise { return releasenotes; } + +export async function getMdxReleasesContent( + releases: ReleaseNote[], +): Promise>[]> { + const mdxSourcesPromises = releases.map(async (release) => { + const mdxSource = await compileMDX<{ title: string; position?: number }>({ + source: release.content, + options: { + parseFrontmatter: true, + mdxOptions: { + development: process.env.NODE_ENV === 'development', + remarkPlugins: [gfm, [remarkBehead, { depth: 2 }]], + }, + }, + }); + return mdxSource.content; + }); + + return await Promise.all(mdxSourcesPromises); +} diff --git a/packages/twenty-website/src/app/releases/page.tsx b/packages/twenty-website/src/app/releases/page.tsx index b6e5dfdcc..51eb7709a 100644 --- a/packages/twenty-website/src/app/releases/page.tsx +++ b/packages/twenty-website/src/app/releases/page.tsx @@ -5,7 +5,10 @@ import { Line } from '@/app/_components/releases/Line'; import { Release } from '@/app/_components/releases/Release'; import { Title } from '@/app/_components/releases/StyledTitle'; import { ContentContainer } from '@/app/_components/ui/layout/ContentContainer'; -import { getReleases } from '@/app/releases/get-releases'; +import { + getMdxReleasesContent, + getReleases, +} from '@/app/releases/get-releases'; export const metadata: Metadata = { title: 'Twenty - Releases', @@ -14,6 +17,7 @@ export const metadata: Metadata = { const Home = async () => { const releases = await getReleases(); + const mdxReleasesContent = await getMdxReleasesContent(releases); return ( @@ -21,7 +25,10 @@ const Home = async () => { {releases.map((note, index) => ( - + {index != releases.length - 1 && } ))}