diff --git a/packages/core/src/pattern.mjs b/packages/core/src/pattern.mjs index 614bfb10cc6..a7f3a460c4e 100644 --- a/packages/core/src/pattern.mjs +++ b/packages/core/src/pattern.mjs @@ -241,6 +241,7 @@ Pattern.prototype.getRenderProps = function () { })), } + svg.__runHooks('postRender') return props } diff --git a/sites/shared/components/workbench/layout/draft/stack.js b/sites/shared/components/workbench/layout/draft/stack.js index 9f6604f9f65..ed2d189f9e4 100644 --- a/sites/shared/components/workbench/layout/draft/stack.js +++ b/sites/shared/components/workbench/layout/draft/stack.js @@ -55,6 +55,7 @@ const Stack = (props) => { const { layout, stack, stackName, gist } = props const stackLayout = layout.stacks?.[stackName] + const stackExists = typeof stackLayout?.move?.x !== 'undefined' // Use a ref for direct DOM manipulation const stackRef = useRef(null) @@ -75,12 +76,12 @@ const Stack = (props) => { // Initialize drag handler useEffect(() => { // don't drag the pages - if (props.isLayoutPart) return + if (props.isLayoutPart || !stackExists) return handleDrag(select(stackRef.current)) }, [rotate, stackRef, stackLayout]) // // Don't just assume this makes sense - if (typeof stackLayout?.move?.x === 'undefined') return null + if (!stackExists) return null // These are kept as vars because re-rendering on drag would kill performance // Managing the difference between re-render and direct DOM updates makes this diff --git a/sites/shared/components/workbench/layout/print/plugin.js b/sites/shared/components/workbench/layout/print/plugin.js index 7a0fdabf8ff..dff53fcbc10 100644 --- a/sites/shared/components/workbench/layout/print/plugin.js +++ b/sites/shared/components/workbench/layout/print/plugin.js @@ -165,6 +165,22 @@ const basePlugin = ({ pattern.height = sheetHeight * generatedPageData.rows } }, + preRender: function (svg) { + const pattern = svg.pattern + const only = pattern.settings[pattern.activeStack || 0].only + // add the layout part to the include list if there is one so that it gets rendered + if (Array.isArray(only) && !only.includes(partName)) { + pattern.settings[pattern.activeStack || 0].only.push(partName) + } + }, + postRender: function (svg) { + const pattern = svg.pattern + const only = pattern.settings[pattern.activeStack || 0].only + // remove the layout part from the include list if there is one so that we don't pollute the settings + if (Array.isArray(only) && only.includes(partName)) { + pattern.settings[pattern.activeStack || 0].only.splice(only.indexOf(partName), 1) + } + }, }, macros: { /** draft the pages */