Add PageBreak Support to Template Elements and Enhance TemplatePreview Resizing
All checks were successful
farmcontrol/farmcontrol-ui/pipeline/head This commit looks good

- Added 'PageBreak' to the list of template elements in schema.js, allowing for better document structuring.
- Updated TemplatePreview component to dynamically adjust the size of preview wrappers based on content dimensions, improving visual presentation and user experience.
This commit is contained in:
Tom Butcher 2026-08-22 00:17:48 +01:00
parent f55a09ff1f
commit c5b421533f
2 changed files with 19 additions and 8 deletions

View File

@ -77,6 +77,7 @@ const allTags = [
'Text', 'Text',
'Bold', 'Bold',
'Divider', 'Divider',
'PageBreak',
'ProgressBar', 'ProgressBar',
'Barcode', 'Barcode',
'DateTime', 'DateTime',
@ -93,7 +94,7 @@ export const fcTemplateElements = allTags.map((name) => {
el.attributes = ['format', 'barcodeWidth', ...styleAttrs] el.attributes = ['format', 'barcodeWidth', ...styleAttrs]
} else if (name === 'Row') { } else if (name === 'Row') {
el.attributes = ['type', ...styleAttrs] el.attributes = ['type', ...styleAttrs]
} else if (name === 'Divider') { } else if (name === 'Divider' || name === 'PageBreak') {
el.children = [] el.children = []
} }

View File

@ -56,22 +56,31 @@ const TemplatePreview = ({
return return
} }
const wrappers = doc.querySelectorAll('.previewWrapper')
wrappers.forEach((wrapper) => {
const page = wrapper.querySelector('.previewDocument')
if (!page) {
return
}
const pageVisual = page.getBoundingClientRect()
if (pageVisual.width <= 0 && pageVisual.height <= 0) {
return
}
wrapper.style.width = `${pageVisual.width}px`
wrapper.style.height = `${pageVisual.height}px`
})
const documentEl = const documentEl =
doc.querySelector('.previewPages') ||
doc.querySelector('.previewDocument') || doc.querySelector('.previewDocument') ||
doc.querySelector('.previewWrapper') || doc.querySelector('.previewWrapper') ||
doc.body doc.body
const container = doc.querySelector('.previewContainer') const container = doc.querySelector('.previewContainer')
const wrapper = doc.querySelector('.previewWrapper')
const visual = documentEl.getBoundingClientRect() const visual = documentEl.getBoundingClientRect()
if (visual.width <= 0 && visual.height <= 0) { if (visual.width <= 0 && visual.height <= 0) {
return return
} }
if (wrapper) {
wrapper.style.width = `${visual.width}px`
wrapper.style.height = `${visual.height}px`
}
let padX = 0 let padX = 0
let padY = 0 let padY = 0
if (container) { if (container) {
@ -125,8 +134,9 @@ const TemplatePreview = ({
const doc = iframeRef.current?.contentDocument const doc = iframeRef.current?.contentDocument
const observed = const observed =
doc?.querySelector('.previewDocument') || doc?.querySelector('.previewPages') ||
doc?.querySelector('.previewContainer') || doc?.querySelector('.previewContainer') ||
doc?.querySelector('.previewDocument') ||
doc?.body doc?.body
if (observed && typeof ResizeObserver === 'function') { if (observed && typeof ResizeObserver === 'function') {
const observer = new ResizeObserver(() => { const observer = new ResizeObserver(() => {