1
1
import { createElement , MouseEvent , useCallback } from 'react'
2
2
import { ArcsLayer , ArcGenerator } from '@nivo/arcs'
3
3
import { useTooltip } from '@nivo/tooltip'
4
- import { ComputedBar , RadialBarCommonProps } from './types'
4
+ import { ComputedBar , RadialBarCommonProps , RadialBarDatum } from './types'
5
5
6
- interface RadialBarArcsProps {
6
+ interface RadialBarArcsProps < D extends RadialBarDatum > {
7
7
center : [ number , number ]
8
- bars : ComputedBar [ ]
9
- borderWidth : RadialBarCommonProps [ 'borderWidth' ]
10
- borderColor : RadialBarCommonProps [ 'borderColor' ]
8
+ bars : ComputedBar < D > [ ]
9
+ borderWidth : RadialBarCommonProps < D > [ 'borderWidth' ]
10
+ borderColor : RadialBarCommonProps < D > [ 'borderColor' ]
11
11
arcGenerator : ArcGenerator
12
- isInteractive : RadialBarCommonProps [ 'isInteractive' ]
13
- tooltip : RadialBarCommonProps [ 'tooltip' ]
14
- onClick ?: RadialBarCommonProps [ 'onClick' ]
15
- onMouseEnter ?: RadialBarCommonProps [ 'onMouseEnter' ]
16
- onMouseMove ?: RadialBarCommonProps [ 'onMouseMove' ]
17
- onMouseLeave ?: RadialBarCommonProps [ 'onMouseLeave' ]
18
- transitionMode : RadialBarCommonProps [ 'transitionMode' ]
12
+ isInteractive : RadialBarCommonProps < D > [ 'isInteractive' ]
13
+ tooltip : RadialBarCommonProps < D > [ 'tooltip' ]
14
+ onClick ?: RadialBarCommonProps < D > [ 'onClick' ]
15
+ onMouseEnter ?: RadialBarCommonProps < D > [ 'onMouseEnter' ]
16
+ onMouseMove ?: RadialBarCommonProps < D > [ 'onMouseMove' ]
17
+ onMouseLeave ?: RadialBarCommonProps < D > [ 'onMouseLeave' ]
18
+ transitionMode : RadialBarCommonProps < D > [ 'transitionMode' ]
19
19
}
20
20
21
- export const RadialBarArcs = ( {
21
+ export const RadialBarArcs = < D extends RadialBarDatum > ( {
22
22
center,
23
23
bars,
24
24
borderWidth,
@@ -31,42 +31,42 @@ export const RadialBarArcs = ({
31
31
onMouseMove,
32
32
onMouseLeave,
33
33
transitionMode,
34
- } : RadialBarArcsProps ) => {
34
+ } : RadialBarArcsProps < D > ) => {
35
35
const { showTooltipFromEvent, hideTooltip } = useTooltip ( )
36
36
37
37
const handleClick = useCallback (
38
- ( bar : ComputedBar , event : MouseEvent ) => {
38
+ ( bar : ComputedBar < D > , event : MouseEvent ) => {
39
39
onClick ?.( bar , event )
40
40
} ,
41
41
[ onClick ]
42
42
)
43
43
44
44
const handleMouseEnter = useCallback (
45
- ( bar : ComputedBar , event : MouseEvent ) => {
45
+ ( bar : ComputedBar < D > , event : MouseEvent ) => {
46
46
showTooltipFromEvent ( createElement ( tooltip , { bar } ) , event )
47
47
onMouseEnter ?.( bar , event )
48
48
} ,
49
49
[ showTooltipFromEvent , tooltip , onMouseEnter ]
50
50
)
51
51
52
52
const handleMouseMove = useCallback (
53
- ( bar : ComputedBar , event : MouseEvent ) => {
53
+ ( bar : ComputedBar < D > , event : MouseEvent ) => {
54
54
showTooltipFromEvent ( createElement ( tooltip , { bar } ) , event )
55
55
onMouseMove ?.( bar , event )
56
56
} ,
57
57
[ showTooltipFromEvent , tooltip , onMouseMove ]
58
58
)
59
59
60
60
const handleMouseLeave = useCallback (
61
- ( bar : ComputedBar , event : MouseEvent ) => {
61
+ ( bar : ComputedBar < D > , event : MouseEvent ) => {
62
62
hideTooltip ( )
63
63
onMouseLeave ?.( bar , event )
64
64
} ,
65
65
[ hideTooltip , onMouseLeave ]
66
66
)
67
67
68
68
return (
69
- < ArcsLayer < ComputedBar >
69
+ < ArcsLayer < ComputedBar < D > >
70
70
center = { center }
71
71
data = { bars }
72
72
arcGenerator = { arcGenerator }
0 commit comments