fix(richtext): blank lines survive into PDFs and read-only previews

Quill 2's semantic HTML saves a blank line as a truly empty <p></p> (no
<br> placeholder) — verified in the DB (invoice_sections hold <p></p>,
zero <p><br>) — which collapses to nothing outside the editor.
cleanQuillHtml (PDF path) and the new restoreQuillBlankLines (order/
invoice read-only previews) restore the placeholder at render time, so
existing stored content is covered retroactively.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
BOHA
2026-06-12 08:35:46 +02:00
parent 08af4cd0ae
commit 7e4469b29a
5 changed files with 42 additions and 4 deletions

View File

@@ -58,6 +58,7 @@ import {
formatCurrency,
formatDate,
numberOr,
restoreQuillBlankLines,
todayLocalStr,
} from "../utils/formatters";
import { normalizeDateStr } from "../utils/attendanceHelpers";
@@ -1670,7 +1671,9 @@ export default function InvoiceDetail() {
{(s.content || "").replace(/<[^>]*>/g, "").trim() && (
<RichTextView
dangerouslySetInnerHTML={{
__html: DOMPurify.sanitize(s.content || ""),
__html: DOMPurify.sanitize(
restoreQuillBlankLines(s.content),
),
}}
/>
)}
@@ -1690,7 +1693,9 @@ export default function InvoiceDetail() {
invoice.internal_notes !== "<p><br></p>" ? (
<RichTextView
dangerouslySetInnerHTML={{
__html: DOMPurify.sanitize(invoice.internal_notes),
__html: DOMPurify.sanitize(
restoreQuillBlankLines(invoice.internal_notes),
),
}}
/>
) : (