diff --git a/src/components/PatternCanvas/PatternCanvas.tsx b/src/components/PatternCanvas/PatternCanvas.tsx index f791876..fae8a58 100644 --- a/src/components/PatternCanvas/PatternCanvas.tsx +++ b/src/components/PatternCanvas/PatternCanvas.tsx @@ -1,4 +1,4 @@ -import { useRef } from "react"; +import { useRef, useMemo } from "react"; import { useShallow } from "zustand/react/shallow"; import { useMachineStore, @@ -109,6 +109,26 @@ export function PatternCanvas() { ? "text-tertiary-600 dark:text-tertiary-400" : "text-gray-600 dark:text-gray-400"; + // Memoize the display pattern to avoid recalculation + const displayPattern = useMemo( + () => uploadedPesData || pesData, + [uploadedPesData, pesData], + ); + + // Memoize pattern dimensions calculation + const patternDimensions = useMemo(() => { + if (!displayPattern) return null; + const width = ( + (displayPattern.bounds.maxX - displayPattern.bounds.minX) / + 10 + ).toFixed(1); + const height = ( + (displayPattern.bounds.maxY - displayPattern.bounds.minY) / + 10 + ).toFixed(1); + return `${width} × ${height} mm`; + }, [displayPattern]); + return ( Pattern Preview {hasPattern ? ( - {(() => { - const displayPattern = uploadedPesData || pesData; - return displayPattern ? ( - <> - {( - (displayPattern.bounds.maxX - - displayPattern.bounds.minX) / - 10 - ).toFixed(1)}{" "} - ×{" "} - {( - (displayPattern.bounds.maxY - - displayPattern.bounds.minY) / - 10 - ).toFixed(1)}{" "} - mm - - ) : null; - })()} + {patternDimensions} ) : ( @@ -182,11 +184,11 @@ export function PatternCanvas() { > {/* Background layer: grid, origin, hoop */} - {hasPattern && ( + {displayPattern && ( <> @@ -241,42 +243,36 @@ export function PatternCanvas() { )} {/* Pattern info overlays */} - {hasPattern && - (() => { - const displayPattern = uploadedPesData || pesData; - return ( - displayPattern && ( - <> - + {displayPattern && ( + <> + - + - - - ) - ); - })()} + + + )}