render x columns properly
This commit is contained in:
parent
e4d7cb003b
commit
d3ba83e9ed
|
|
@ -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 ParagraphBlock = {
|
||||||
type: 'paragraph',
|
type: 'paragraph',
|
||||||
data: {
|
data: {
|
||||||
|
|
@ -53,7 +74,15 @@ type HeaderBlock = {
|
||||||
id: string,
|
id: string,
|
||||||
}
|
}
|
||||||
|
|
||||||
type Block = ParagraphBlock | HeaderBlock;
|
type ColumnBlock = {
|
||||||
|
type: 'column',
|
||||||
|
data: {
|
||||||
|
blocksData: Block[][],
|
||||||
|
},
|
||||||
|
id: string,
|
||||||
|
}
|
||||||
|
|
||||||
|
type Block = ParagraphBlock | HeaderBlock | ColumnBlock;
|
||||||
|
|
||||||
type Content = {
|
type Content = {
|
||||||
blocks: Block[],
|
blocks: Block[],
|
||||||
|
|
@ -73,6 +102,8 @@ export default function Page({ data }: { slug: string, data: PagesRecord<Content
|
||||||
return <Paragraph key={index} text={block.data.text} />
|
return <Paragraph key={index} text={block.data.text} />
|
||||||
case 'header':
|
case 'header':
|
||||||
return <Heading key={index} text={block.data.text} level={block.data.level} />
|
return <Heading key={index} text={block.data.text} level={block.data.level} />
|
||||||
|
case 'column':
|
||||||
|
return <Column key={index} blocksData={block.data.blocksData} />
|
||||||
default:
|
default:
|
||||||
return <p key={index}>Unknown block type: <pre>{JSON.stringify(block, null, 2)}</pre></p>
|
return <p key={index}>Unknown block type: <pre>{JSON.stringify(block, null, 2)}</pre></p>
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ const ReactEditorJS = dynamic(() => import('@/components/ReactEditor'), {
|
||||||
ssr: false
|
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 [data, setData] = useState<OutputData>(pbData);
|
||||||
const {mutate, isLoading, data: data2, isError} = api.pages.updatePage.useMutation();
|
const {mutate, isLoading, data: data2, isError} = api.pages.updatePage.useMutation();
|
||||||
|
|
||||||
|
|
@ -18,14 +18,14 @@ export default function Editor({data: pbData}: {data: OutputData}) {
|
||||||
const handleSubmit = () => {
|
const handleSubmit = () => {
|
||||||
if (!data) return
|
if (!data) return
|
||||||
mutate({
|
mutate({
|
||||||
slug: 'test',
|
slug,
|
||||||
title: 'Test',
|
title,
|
||||||
content: data
|
content: data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Layout title='EditorJS'>
|
<Layout title={'Edition de ' + title}>
|
||||||
<button onClick={handleSubmit}>Save</button>
|
<button onClick={handleSubmit}>Save</button>
|
||||||
{isLoading && <p>Loading...</p>}
|
{isLoading && <p>Loading...</p>}
|
||||||
{data2 && !isError && <p>Saved!</p>}
|
{data2 && !isError && <p>Saved!</p>}
|
||||||
|
|
@ -53,7 +53,9 @@ export async function getServerSideProps({query}: {query: {[key: string]: string
|
||||||
|
|
||||||
return {
|
return {
|
||||||
props: {
|
props: {
|
||||||
data: data.data.content
|
data: data.data.content,
|
||||||
|
slug: query.page,
|
||||||
|
title: data.data.title
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue