diff --git a/cypress/integration/flow/basic.spec.js b/cypress/integration/flow/basic.spec.js index 121896d3..39209e42 100644 --- a/cypress/integration/flow/basic.spec.js +++ b/cypress/integration/flow/basic.spec.js @@ -13,9 +13,6 @@ describe('Basic Flow Rendering', () => { it('renders a grid', () => { cy.get('.react-flow__background'); - - const gridStroke = Cypress.$('.react-flow__background path').attr('stroke'); - expect(gridStroke).to.equal('#eee'); }); it('selects a node by click', () => { diff --git a/example/src/Overview/index.js b/example/src/Overview/index.js index d2247c38..c7e3c64f 100644 --- a/example/src/Overview/index.js +++ b/example/src/Overview/index.js @@ -136,7 +136,7 @@ const OverviewFlow = () => { }} /> - + ); }; diff --git a/src/additional-components/Background/index.tsx b/src/additional-components/Background/index.tsx index 86a24a09..c655b544 100644 --- a/src/additional-components/Background/index.tsx +++ b/src/additional-components/Background/index.tsx @@ -1,4 +1,4 @@ -import React, { memo, HTMLAttributes } from 'react'; +import React, { memo, useMemo, HTMLAttributes } from 'react'; import cc from 'classcat'; import { useStoreState } from '../../store/hooks'; @@ -21,26 +21,32 @@ const defaultColors = { const Background = memo( ({ variant = BackgroundVariant.Dots, gap = 24, size = 0.5, color, style, className }: BackgroundProps) => { - const width = useStoreState((s) => s.width); - const height = useStoreState((s) => s.height); const [x, y, scale] = useStoreState((s) => s.transform); const bgClasses = cc(['react-flow__background', className]); - const bgColor = color ? color : defaultColors[variant]; const scaledGap = gap * scale; const xOffset = x % scaledGap; const yOffset = y % scaledGap; - const isLines = variant === BackgroundVariant.Lines; - const path = isLines - ? createGridLinesPath(width, height, xOffset, yOffset, scaledGap) - : createGridDotsPath(width, height, xOffset, yOffset, scaledGap, size); - const fill = isLines ? 'none' : bgColor; - const stroke = isLines ? bgColor : 'none'; + + const bgSvgTile = useMemo(() => { + const isLines = variant === BackgroundVariant.Lines; + const bgColor = color ? color : defaultColors[variant]; + const path = isLines ? createGridLinesPath(scaledGap, size, bgColor) : createGridDotsPath(size, bgColor); + + return encodeURIComponent( + `${path}` + ); + }, [variant, scaledGap, size, color]); return ( - - - +
); } ); diff --git a/src/additional-components/Background/style.css b/src/additional-components/Background/style.css index b96234b9..9343180d 100644 --- a/src/additional-components/Background/style.css +++ b/src/additional-components/Background/style.css @@ -2,4 +2,6 @@ position: absolute; top: 0; left: 0; + width: 100%; + height: 100%; } \ No newline at end of file diff --git a/src/additional-components/Background/utils.ts b/src/additional-components/Background/utils.ts index cf938870..c0b6d315 100644 --- a/src/additional-components/Background/utils.ts +++ b/src/additional-components/Background/utils.ts @@ -1,37 +1,7 @@ -export const createGridLinesPath = ( - width: number, - height: number, - xOffset: number, - yOffset: number, - gap: number -): string => { - const lineCountX = Math.ceil(width / gap) + 1; - const lineCountY = Math.ceil(height / gap) + 1; - - const xValues = Array.from({ length: lineCountX }, (_, i) => `M${i * gap + xOffset} 0 V${height}`); - const yValues = Array.from({ length: lineCountY }, (_, i) => `M0 ${i * gap + yOffset} H${width}`); - - return [...xValues, ...yValues].join(' '); +export const createGridLinesPath = (scaledGap: number, strokeWidth: number, stroke: string): string => { + return ``; }; -export const createGridDotsPath = ( - width: number, - height: number, - xOffset: number, - yOffset: number, - gap: number, - size: number -): string => { - const lineCountX = Math.ceil(width / gap) + 1; - const lineCountY = Math.ceil(height / gap) + 1; - - const values = Array.from({ length: lineCountX }, (_, col) => { - const x = col * gap + xOffset; - return Array.from({ length: lineCountY }, (_, row) => { - const y = row * gap + yOffset; - return `M${x} ${y - size} l${size} ${size} l${-size} ${size} l${-size} ${-size}z`; - }).join(' '); - }); - - return values.join(' '); +export const createGridDotsPath = (size: number, fill: string): string => { + return ``; };