diff --git a/src/frontend/apps/e2e/__tests__/app-impress/pad-tools.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/pad-tools.spec.ts index 74e662b5..72554398 100644 --- a/src/frontend/apps/e2e/__tests__/app-impress/pad-tools.spec.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/pad-tools.spec.ts @@ -47,6 +47,45 @@ test.describe('Pad Tools', () => { expect(pdfText).toContain('Hello World'); // This is the pad text }); + test('it converts the blocknote json in correct html for the pdf', async ({ + page, + browserName, + }) => { + const [randomPad] = await createPad(page, 'pad-editor', browserName, 1); + let body = ''; + + await page.route('**/templates/*/generate-document/', async (route) => { + const request = route.request(); + body = request.postDataJSON().body; + + await route.continue(); + }); + + await expect(page.locator('h2').getByText(randomPad)).toBeVisible(); + + await page.locator('.bn-block-outer').last().fill('Hello World'); + await page.locator('.bn-block-outer').last().click(); + await page.keyboard.press('Enter'); + await page.keyboard.press('Enter'); + await page.locator('.bn-block-outer').last().fill('Break'); + + await page.getByLabel('Open the document options').click(); + await page + .getByRole('button', { + name: 'Generate PDF', + }) + .click(); + + await page + .getByRole('button', { + name: 'Download', + }) + .click(); + + // Empty paragraph should be replaced by a
+ expect(body).toContain('

'); + }); + test('it updates the pad', async ({ page, browserName }) => { const [randomPad] = await createPad( page, diff --git a/src/frontend/apps/impress/src/features/pads/pad-tools/components/ModalPDF.tsx b/src/frontend/apps/impress/src/features/pads/pad-tools/components/ModalPDF.tsx index 08ea4d3d..e455ed59 100644 --- a/src/frontend/apps/impress/src/features/pads/pad-tools/components/ModalPDF.tsx +++ b/src/frontend/apps/impress/src/features/pads/pad-tools/components/ModalPDF.tsx @@ -15,7 +15,7 @@ import { usePadStore } from '@/features/pads/pad-editor/'; import { Pad } from '@/features/pads/pad-management'; import { useCreatePdf } from '../api/useCreatePdf'; -import { downloadFile } from '../utils'; +import { adaptBlockNoteHTML, downloadFile } from '../utils'; interface ModalPDFProps { onClose: () => void; @@ -84,7 +84,8 @@ export const ModalPDF = ({ onClose, templateOptions, pad }: ModalPDFProps) => { return; } - const body = await editor.blocksToHTMLLossy(editor.document); + let body = await editor.blocksToHTMLLossy(editor.document); + body = adaptBlockNoteHTML(body); createPdf({ templateId: templateIdSelected, diff --git a/src/frontend/apps/impress/src/features/pads/pad-tools/utils.ts b/src/frontend/apps/impress/src/features/pads/pad-tools/utils.ts index 27ee2ba6..c07ebf9d 100644 --- a/src/frontend/apps/impress/src/features/pads/pad-tools/utils.ts +++ b/src/frontend/apps/impress/src/features/pads/pad-tools/utils.ts @@ -9,3 +9,7 @@ export function downloadFile(blob: Blob, filename: string) { document.body.removeChild(a); window.URL.revokeObjectURL(url); } + +export const adaptBlockNoteHTML = (html: string) => { + return html.replaceAll('

', '
'); +};