diff --git a/packages/network/stories/network.stories.tsx b/packages/network/stories/network.stories.tsx index 6ef136156f..4f3a472510 100644 --- a/packages/network/stories/network.stories.tsx +++ b/packages/network/stories/network.stories.tsx @@ -4,7 +4,7 @@ import { withKnobs } from '@storybook/addon-knobs' import { generateNetworkData } from '@nivo/generators' import { Network, - NetworkInputNode, + NetworkNodeProps, NetworkNodeTooltipProps, NetworkSvgProps, svgDefaultProps, @@ -19,7 +19,9 @@ export default { const data = generateNetworkData() -const commonProperties: NetworkSvgProps = { +type NodeType = typeof data['nodes'][0] + +const commonProperties: NetworkSvgProps = { ...svgDefaultProps, data, width: 900, @@ -29,9 +31,20 @@ const commonProperties: NetworkSvgProps = { iterations: 60, } -export const Default = () => +export const Default = () => {...commonProperties} /> + +const CustomNodeComponent = ({ node }: NetworkNodeProps) => ( + + + + +) + +export const CustomNode = () => ( + {...commonProperties} nodeComponent={CustomNodeComponent} /> +) -const CustomNodeTooltipComponent = ({ node }: NetworkNodeTooltipProps) => ( +const CustomNodeTooltipComponent = ({ node }: NetworkNodeTooltipProps) => (
ID: {node.id} @@ -44,7 +57,9 @@ const CustomNodeTooltipComponent = ({ node }: NetworkNodeTooltipProps ( - + {...commonProperties} nodeTooltip={CustomNodeTooltipComponent} /> ) -export const OnClickHandler = () => +export const OnClickHandler = () => ( + {...commonProperties} onClick={action('onClick')} /> +) diff --git a/packages/network/stories/networkCanvas.stories.tsx b/packages/network/stories/networkCanvas.stories.tsx index 81d095f73b..d54fd4b9e1 100644 --- a/packages/network/stories/networkCanvas.stories.tsx +++ b/packages/network/stories/networkCanvas.stories.tsx @@ -6,7 +6,7 @@ import { NetworkCanvas, canvasDefaultProps, NetworkCanvasProps, - NetworkInputNode, + NetworkComputedNode, NetworkNodeTooltipProps, // @ts-ignore } from '../src' @@ -19,7 +19,9 @@ export default { const data = generateNetworkData() -const commonProperties: NetworkCanvasProps = { +type NodeType = typeof data['nodes'][0] + +const commonProperties: NetworkCanvasProps = { ...canvasDefaultProps, data, width: 900, @@ -29,9 +31,23 @@ const commonProperties: NetworkCanvasProps = { iterations: 60, } -export const Default = () => +export const Default = () => {...commonProperties} /> + +const customNodeRenderer = (ctx: CanvasRenderingContext2D, node: NetworkComputedNode) => { + ctx.fillStyle = node.color + + ctx.beginPath() + ctx.moveTo(node.x, node.y - node.radius) + ctx.lineTo(node.x + node.radius, node.y + node.radius) + ctx.lineTo(node.x - node.radius, node.y + node.radius) + ctx.fill() +} + +export const CustomNodeRenderer = () => ( + {...commonProperties} renderNode={customNodeRenderer} /> +) -const CustomNodeTooltipComponent = ({ node }: NetworkNodeTooltipProps) => ( +const CustomNodeTooltipComponent = ({ node }: NetworkNodeTooltipProps) => (
ID: {node.id} @@ -44,9 +60,9 @@ const CustomNodeTooltipComponent = ({ node }: NetworkNodeTooltipProps ( - + {...commonProperties} nodeTooltip={CustomNodeTooltipComponent} /> ) export const OnClickHandler = () => ( - + {...commonProperties} onClick={action('onClick')} /> ) diff --git a/website/src/data/components/network/meta.yml b/website/src/data/components/network/meta.yml index e6904eb066..39d2a86297 100644 --- a/website/src/data/components/network/meta.yml +++ b/website/src/data/components/network/meta.yml @@ -10,7 +10,9 @@ Network: - svg - isomorphic - experimental - stories: [] + stories: + - label: Custom node component + link: network--custom-node description: | A network component connecting nodes with links. @@ -25,7 +27,9 @@ NetworkCanvas: tags: - canvas - experimental - stories: [] + stories: + - label: Custom node renderer + link: network--custom-node-renderer description: | A variation around the [Network](self:/network/) component. Well suited for large data sets as it does not impact DOM tree depth,