render x columns properly

This commit is contained in:
Guillaume Dorce 2023-06-02 22:17:04 +02:00
parent e4d7cb003b
commit d3ba83e9ed
2 changed files with 39 additions and 6 deletions

View File

@ -36,6 +36,27 @@ function Heading({ text, level }: { text: string, level: number }) {
}
}
function Column({ blocksData }: { blocksData: Block[][] }) {
if (blocksData.length === 0) return null;
return (
<div className="flex flex-row gap-6">
{blocksData.map((blocks, i) => {
return (<div className="flex flex-col gap-6 w-1/2" key={"col-" + i}>{blocks.map(block => {
switch (block.type) {
case 'paragraph':
return <Paragraph key={block.id} text={block.data.text} />
case 'header':
return <Heading key={block.id} text={block.data.text} level={block.data.level} />
default:
return null;
}
})}</div>)
})}
</div>
)
}
type ParagraphBlock = {
type: 'paragraph',
data: {
@ -53,7 +74,15 @@ type HeaderBlock = {
id: string,
}
type Block = ParagraphBlock | HeaderBlock;
type ColumnBlock = {
type: 'column',
data: {
blocksData: Block[][],
},
id: string,
}
type Block = ParagraphBlock | HeaderBlock | ColumnBlock;
type Content = {
blocks: Block[],
@ -73,6 +102,8 @@ export default function Page({ data }: { slug: string, data: PagesRecord<Content
return <Paragraph key={index} text={block.data.text} />
case 'header':
return <Heading key={index} text={block.data.text} level={block.data.level} />
case 'column':
return <Column key={index} blocksData={block.data.blocksData} />
default:
return <p key={index}>Unknown block type: <pre>{JSON.stringify(block, null, 2)}</pre></p>
}

View File

@ -9,7 +9,7 @@ const ReactEditorJS = dynamic(() => import('@/components/ReactEditor'), {
ssr: false
})
export default function Editor({data: pbData}: {data: OutputData}) {
export default function Editor({data: pbData, slug, title}: {data: OutputData, slug: string, title: string}) {
const [data, setData] = useState<OutputData>(pbData);
const {mutate, isLoading, data: data2, isError} = api.pages.updatePage.useMutation();
@ -18,14 +18,14 @@ export default function Editor({data: pbData}: {data: OutputData}) {
const handleSubmit = () => {
if (!data) return
mutate({
slug: 'test',
title: 'Test',
slug,
title,
content: data
})
}
return (
<Layout title='EditorJS'>
<Layout title={'Edition de ' + title}>
<button onClick={handleSubmit}>Save</button>
{isLoading && <p>Loading...</p>}
{data2 && !isError && <p>Saved!</p>}
@ -53,7 +53,9 @@ export async function getServerSideProps({query}: {query: {[key: string]: string
return {
props: {
data: data.data.content
data: data.data.content,
slug: query.page,
title: data.data.title
}
}
}