From 809a0c845619f68b85581eaa2a01210c177b784d Mon Sep 17 00:00:00 2001 From: Pierre Poupin Date: Sun, 6 Oct 2019 22:09:00 +0200 Subject: [PATCH] add dashed strokes feature --- README.md | 2 ++ ...xample page -- should draw arrows.snap.png | Bin 32173 -> 30738 bytes example/FirstExample.js | 1 + flow-typed/archer-types.js | 3 ++- src/ArcherContainer.js | 4 ++++ src/ArcherContainer.test.js | 2 ++ src/SvgArrow.js | 4 +++- types/react-archer.d.ts | 10 ++++++++++ 8 files changed, 24 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 33bede4..d239482 100644 --- a/README.md +++ b/README.md @@ -85,6 +85,7 @@ export default App; | - | - | - | | `strokeColor` | `string` | A color string `'#ff0000'` | `strokeWidth` | `number` | A size in `px` +| `strokeDasharray` | `string` | Adds dashes to the stroke. It has to be a string representing an array of sizes. See some [SVG strokes documentation](https://www.w3schools.com/graphics/svg_stroking.asp). | `arrowLength` | `number` | A size in `px` | `arrowThickness` | `number` | A size in `px` | `children` | `React.Node` | @@ -115,6 +116,7 @@ The `Style` type has the following shape: { strokeColor: string, strokeWidth: number, + strokeDasharray: number, arrowLength: number, arrowThickness: number } diff --git a/cypress/snapshots/All Specs/React Archer -- First example page -- should draw arrows.snap.png b/cypress/snapshots/All Specs/React Archer -- First example page -- should draw arrows.snap.png index 911d4294f8c167d90072548f8d22dc533f26c7a0..a0893e23e42dd11eb7c2572da6bf4a40135e4467 100644 GIT binary patch delta 18555 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 Pg#njWe^eyD;s=9wdF&e}9{NZTfn@ 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 e7v9Rnjj|glbKkU%VhjrS2Y;ygpj_T0_ { targetId: 'element2', targetAnchor: 'top', sourceAnchor: 'bottom', + style: { strokeDasharray: '5,5' }, }, ]} > diff --git a/flow-typed/archer-types.js b/flow-typed/archer-types.js index 175409d..02366a8 100644 --- a/flow-typed/archer-types.js +++ b/flow-typed/archer-types.js @@ -25,4 +25,5 @@ declare type ArrowStyleType = { arrowThickness: number, strokeColor: string, strokeWidth: number, -}; \ No newline at end of file + strokeDasharray?: string, +}; diff --git a/src/ArcherContainer.js b/src/ArcherContainer.js index bed84ce..ca16392 100644 --- a/src/ArcherContainer.js +++ b/src/ArcherContainer.js @@ -11,6 +11,7 @@ type Props = { arrowThickness: number, strokeColor: string, strokeWidth: number, + strokeDasharray?: string, children: React$Node, style?: Object, svgContainerStyle?: Object, @@ -222,6 +223,8 @@ export class ArcherContainer extends React.Component { const strokeWidth = (style && style.strokeWidth) || this.props.strokeWidth; + const strokeDasharray = (style && style.strokeDasharray) || this.props.strokeDasharray; + const arrowThickness = (style && style.arrowThickness) || this.props.arrowThickness; const startingAnchor = source.anchor; @@ -248,6 +251,7 @@ export class ArcherContainer extends React.Component { strokeColor={strokeColor} arrowLength={arrowLength} strokeWidth={strokeWidth} + strokeDasharray={strokeDasharray} arrowLabel={label} arrowThickness={arrowThickness} arrowMarkerId={this.getMarkerId(source, target)} diff --git a/src/ArcherContainer.test.js b/src/ArcherContainer.test.js index 65abadc..cc6fb6b 100644 --- a/src/ArcherContainer.test.js +++ b/src/ArcherContainer.test.js @@ -13,6 +13,7 @@ describe('ArcherContainer', () => { arrowLength: 10, arrowThickness: 30, strokeColor: 'rgb(123, 234, 123)', + strokeDasharray: '5,5', }; type WrapperState = { @@ -102,6 +103,7 @@ describe('ArcherContainer', () => { Object { "fill": "none", "stroke": "rgb(123, 234, 123)", + "strokeDasharray": "5,5", "strokeWidth": 2, } } diff --git a/src/SvgArrow.js b/src/SvgArrow.js index d350e29..1508677 100644 --- a/src/SvgArrow.js +++ b/src/SvgArrow.js @@ -11,6 +11,7 @@ type Props = { strokeColor: string, arrowLength: number, strokeWidth: number, + strokeDasharray?: string, arrowLabel?: ?React$Node, arrowMarkerId: string, }; @@ -121,6 +122,7 @@ const SvgArrow = ({ strokeColor, arrowLength, strokeWidth, + strokeDasharray, arrowLabel, arrowMarkerId, }: Props) => { @@ -152,7 +154,7 @@ const SvgArrow = ({ {arrowLabel && ( diff --git a/types/react-archer.d.ts b/types/react-archer.d.ts index f03d087..c81fbe9 100644 --- a/types/react-archer.d.ts +++ b/types/react-archer.d.ts @@ -5,21 +5,30 @@ export interface ArcherContainerProps { * A size in px */ arrowLength?: number; + /** * A size in px */ arrowThickness?: number; + /** * A color string * * @example '#ff0000' */ strokeColor?: string; + /** * A size in px */ strokeWidth?: number; + /** + * A string representing an array of sizes + * See https://www.w3schools.com/graphics/svg_stroking.asp + */ + strokeDasharray?: string; + style?: React.CSSProperties; svgContainerStyle?: React.CSSProperties; @@ -32,6 +41,7 @@ export const ArcherContainer: React.ComponentType; export interface ArrowStyle { strokeColor?: string; strokeWidth?: number; + strokeDasharray?: string; arrowLength?: number; arrowThickness?: number; }