Full Radar grid with chart
This commit is contained in:
@@ -2,45 +2,34 @@ import React from 'react';
|
||||
import * as d3 from 'd3';
|
||||
import { chartConfig } from '../../config';
|
||||
|
||||
const size = chartConfig.canvasSize / 2;
|
||||
const arcPath = (quadrantPosition, ringPosition, xScale) => {
|
||||
const startAngle = (quadrantPosition - 1) * Math.PI / 2,
|
||||
endAngle = quadrantPosition * Math.PI / 2,
|
||||
arcAttrs = chartConfig.ringsAttributes[ringPosition - 1],
|
||||
ringRadiusPx = xScale(arcAttrs.radius) - xScale(0),
|
||||
arc = d3.arc();
|
||||
|
||||
const arcPath = (quadrantPosition, ringPosition) => {
|
||||
// order from the centre outwards
|
||||
const arcAttributes = [
|
||||
{radius: size / 4, width: 6},
|
||||
{radius: size / 2, width: 4},
|
||||
{radius: (size / 4 * 3), width: 2},
|
||||
{radius: size, width: 2}
|
||||
]
|
||||
const startAngle = quadrantPosition == 1 ?
|
||||
3 * Math.PI / 2
|
||||
: (quadrantPosition - 2) * Math.PI / 2
|
||||
const endAngle = quadrantPosition == 1 ?
|
||||
4 * Math.PI / 2
|
||||
: (quadrantPosition -1) * Math.PI / 2
|
||||
const arcAttrs = arcAttributes[ringPosition - 1];
|
||||
|
||||
const arc = d3.arc();
|
||||
return arc({
|
||||
innerRadius: arcAttrs.radius + (arcAttrs.width / 2),
|
||||
outerRadius: arcAttrs.radius - (arcAttrs.width / 2),
|
||||
innerRadius: ringRadiusPx - arcAttrs.arcWidth,
|
||||
outerRadius: ringRadiusPx,
|
||||
startAngle,
|
||||
endAngle
|
||||
});
|
||||
}
|
||||
|
||||
export default function QuadrantRings ({ quadrant }) {
|
||||
// order from top left clockwise
|
||||
export default function QuadrantRings ({ quadrant, xScale}) {
|
||||
// order from top-right clockwise
|
||||
const gradientAttributes = [
|
||||
{x: 0, y: 0, cx: 1, cy: 1, r: 1},
|
||||
{x: size, y: 0, cx: 0, cy: 1, r: 1},
|
||||
{x: size, y: size, cx: 0, cy: 0, r: 1},
|
||||
{x: 0, y: size, cx: 1, cy: 0, r: 1}
|
||||
{x: xScale(0), y: 0, cx: 0, cy: 1, r: 1},
|
||||
{x: xScale(0), y: xScale(0), cx: 0, cy: 0, r: 1},
|
||||
{x: 0, y: xScale(0), cx: 1, cy: 0, r: 1},
|
||||
{x: 0, y: 0, cx: 1, cy: 1, r: 1}
|
||||
];
|
||||
const gradientId = `${quadrant.position}-radial-gradient`;
|
||||
const gradientId = `${quadrant.position}-radial-gradient`,
|
||||
quadrantSize = chartConfig.size / 2;
|
||||
|
||||
return (
|
||||
<g>
|
||||
<g className="quadrant-ring">
|
||||
{/* Definition of the quadrant gradient */}
|
||||
<defs>
|
||||
<radialGradient id={gradientId} {...gradientAttributes[quadrant.position - 1]}>
|
||||
@@ -51,8 +40,8 @@ export default function QuadrantRings ({ quadrant }) {
|
||||
|
||||
{/* Gradient background area */}
|
||||
<rect
|
||||
width={size}
|
||||
height={size}
|
||||
width={quadrantSize}
|
||||
height={quadrantSize}
|
||||
x={gradientAttributes[quadrant.position - 1].x}
|
||||
y={gradientAttributes[quadrant.position - 1].y}
|
||||
fill={`url(#${gradientId})`}
|
||||
@@ -64,8 +53,8 @@ export default function QuadrantRings ({ quadrant }) {
|
||||
<path
|
||||
key={index}
|
||||
fill={quadrant.colour}
|
||||
d={arcPath(quadrant.position, ringPosition)}
|
||||
style={{transform: `translate(${size}px, ${size}px)`}}
|
||||
d={arcPath(quadrant.position, ringPosition, xScale)}
|
||||
style={{transform: `translate(${quadrantSize}px, ${quadrantSize}px)`}}
|
||||
/>
|
||||
))}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user