diff --git a/sites/shared/components/workbench/pan-zoom-pattern.mjs b/sites/shared/components/workbench/pan-zoom-pattern.mjs
index 437f4edaaab..9c92d81960b 100644
--- a/sites/shared/components/workbench/pan-zoom-pattern.mjs
+++ b/sites/shared/components/workbench/pan-zoom-pattern.mjs
@@ -3,10 +3,7 @@ import { forwardRef, useContext } from 'react'
// Hooks
import { useTranslation } from 'next-i18next'
// Context
-import {
- PanZoomContext,
- PanZoomCapture,
-} from 'shared/components/workbench/pattern/pan-zoom-context.mjs'
+import { PanZoomContext } from 'shared/components/workbench/pattern/pan-zoom-context.mjs'
// Components
import { SizeMe } from 'react-sizeme'
import { TransformWrapper, TransformComponent } from 'react-zoom-pan-pinch'
@@ -40,8 +37,6 @@ export const PanZoomPattern = forwardRef((props, ref) => {
const { renderProps = false, components = {} } = props
const { onTransformed, setZoomFunctions } = useContext(PanZoomContext)
- if (!renderProps) return null
-
return (
{({ size }) => (
@@ -51,17 +46,13 @@ export const PanZoomPattern = forwardRef((props, ref) => {
wheel={{ activationKeys: ['Control'] }}
doubleClick={{ mode: 'reset' }}
onTransformed={onTransformed}
+ onInit={setZoomFunctions}
>
- {({ resetTransform, zoomIn, zoomOut }) => (
- <>
-
-
-
-
- >
- )}
+
+
+
)}
diff --git a/sites/shared/components/workbench/pattern/pan-zoom-context.mjs b/sites/shared/components/workbench/pattern/pan-zoom-context.mjs
index bd35e250f42..aa68ae8d24a 100644
--- a/sites/shared/components/workbench/pattern/pan-zoom-context.mjs
+++ b/sites/shared/components/workbench/pattern/pan-zoom-context.mjs
@@ -1,4 +1,4 @@
-import React, { useState, useMemo, useEffect } from 'react'
+import React, { useState, useMemo, useCallback } from 'react'
/**
* A context for managing zoom state of a {@see PanZoomPattern}
@@ -9,40 +9,38 @@ export const PanZoomContext = React.createContext({})
/** Provider for the {@see PanZoomContext} */
export const PanZoomContextProvider = ({ children }) => {
const [zoomed, setZoomed] = useState(false)
- const [_zoomFunctions, setZoomFunctions] = useState(false)
+ const [zoomFunctions, _setZoomFunctions] = useState(false)
+
+ const setZoomFunctions = useCallback(
+ (zoomInstance) => {
+ const reset = () => {
+ setZoomed(false)
+ zoomInstance.resetTransform()
+ }
+
+ if (zoomInstance) {
+ const { zoomIn, zoomOut, resetTransform } = zoomInstance
+ _setZoomFunctions({ zoomIn, zoomOut, resetTransform, reset })
+ }
+ },
+ [_setZoomFunctions, setZoomed]
+ )
+
+ const onTransformed = useCallback(
+ (_ref, state) => {
+ setZoomed(state.scale !== 1)
+ },
+ [setZoomed]
+ )
const value = useMemo(() => {
- const onTransformed = (_ref, state) => {
- setZoomed(state.scale !== 1)
- }
-
- const reset = () => {
- setZoomed(false)
- _zoomFunctions.resetTransform()
- }
-
return {
zoomed,
- zoomFunctions: _zoomFunctions ? { ..._zoomFunctions, reset } : false,
+ zoomFunctions,
setZoomFunctions,
onTransformed,
}
- }, [zoomed, setZoomed, _zoomFunctions, setZoomFunctions])
+ }, [zoomed, zoomFunctions, setZoomFunctions, onTransformed])
return {children}
}
-
-/**
- * A component to capture the zoom functions and set them on the zoom context
- * Place this inside of a TransformWrapper child function.
- * See {@see PanZoomPattern} for an example
- * */
-export const PanZoomCapture = ({ resetTransform, zoomIn, zoomOut, setZoomFunctions }) => {
- useEffect(() => {
- if (typeof setZoomFunctions === 'function') {
- setZoomFunctions({ resetTransform, zoomIn, zoomOut })
- }
- })
-
- return <>>
-}