1
1
import { createElement , Fragment , ReactNode } from 'react'
2
- import { Container , useDimensions , SvgWrapper } from '@nivo/core'
2
+ import { Container , useDimensions , SvgWrapper , clampArc } from '@nivo/core'
3
3
import { ArcLabelsLayer } from '@nivo/arcs'
4
+ import { BoxLegendSvg } from '@nivo/legends'
4
5
import { RadialBarLayerId , RadialBarSvgProps , ComputedBar } from './types'
5
6
import { svgDefaultProps } from './props'
6
7
import { useRadialBar } from './hooks'
7
8
import { RadialBarArcs } from './RadialBarArcs'
8
9
import { PolarGrid } from './polar_grid'
9
- import { BoxLegendSvg } from '@nivo/legends'
10
10
import { RadialBarTracks } from './RadialBarTracks'
11
+ import { RadialAxis } from './radial_axis'
11
12
12
13
type InnerRadialBarProps = Omit <
13
14
RadialBarSvgProps ,
@@ -17,8 +18,8 @@ type InnerRadialBarProps = Omit<
17
18
const InnerRadialBar = ( {
18
19
data,
19
20
valueFormat,
20
- startAngle = svgDefaultProps . startAngle ,
21
- endAngle = svgDefaultProps . endAngle ,
21
+ startAngle : originalStartAngle = svgDefaultProps . startAngle ,
22
+ endAngle : originalEndAngle = svgDefaultProps . endAngle ,
22
23
padding = svgDefaultProps . padding ,
23
24
padAngle = svgDefaultProps . padAngle ,
24
25
cornerRadius = svgDefaultProps . cornerRadius ,
@@ -28,8 +29,10 @@ const InnerRadialBar = ({
28
29
layers = svgDefaultProps . layers ,
29
30
enableTracks = svgDefaultProps . enableTracks ,
30
31
tracksColor = svgDefaultProps . tracksColor ,
31
- enableGridAngles = svgDefaultProps . enableGridAngles ,
32
- enableGridRadii = svgDefaultProps . enableGridRadii ,
32
+ enableRadialGrid = svgDefaultProps . enableRadialGrid ,
33
+ enableCircularGrid = svgDefaultProps . enableCircularGrid ,
34
+ radialAxisStart = svgDefaultProps . radialAxisStart ,
35
+ radialAxisEnd = svgDefaultProps . radialAxisEnd ,
33
36
colors = svgDefaultProps . colors ,
34
37
borderWidth = svgDefaultProps . borderWidth ,
35
38
borderColor = svgDefaultProps . borderColor ,
@@ -57,6 +60,8 @@ const InnerRadialBar = ({
57
60
partialMargin
58
61
)
59
62
63
+ const [ startAngle , endAngle ] = clampArc ( originalStartAngle , originalEndAngle )
64
+
60
65
const {
61
66
center,
62
67
bars,
@@ -90,14 +95,35 @@ const InnerRadialBar = ({
90
95
91
96
if ( layers . includes ( 'grid' ) ) {
92
97
layerById . grid = (
93
- < PolarGrid
94
- key = "grid"
95
- center = { center }
96
- enableAngles = { enableGridAngles }
97
- enableRadii = { enableGridRadii }
98
- angleScale = { valueScale }
99
- radiusScale = { radiusScale }
100
- />
98
+ < Fragment key = "grid" >
99
+ < PolarGrid
100
+ center = { center }
101
+ enableRadialGrid = { enableRadialGrid }
102
+ enableCircularGrid = { enableCircularGrid }
103
+ angleScale = { valueScale }
104
+ radiusScale = { radiusScale }
105
+ startAngle = { startAngle }
106
+ endAngle = { endAngle }
107
+ />
108
+ { radialAxisStart && (
109
+ < RadialAxis
110
+ type = "start"
111
+ center = { center }
112
+ angle = { Math . min ( startAngle , endAngle ) }
113
+ scale = { radiusScale }
114
+ { ...radialAxisStart }
115
+ />
116
+ ) }
117
+ { radialAxisEnd && (
118
+ < RadialAxis
119
+ type = "end"
120
+ center = { center }
121
+ angle = { Math . max ( startAngle , endAngle ) }
122
+ scale = { radiusScale }
123
+ { ...radialAxisEnd }
124
+ />
125
+ ) }
126
+ </ Fragment >
101
127
)
102
128
}
103
129
0 commit comments