/
chord.stories.tsx
109 lines (94 loc) · 2.98 KB
/
chord.stories.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import { storiesOf } from '@storybook/react'
import { generateChordData } from '@nivo/generators'
import { TableTooltip, BasicTooltip, Chip } from '@nivo/tooltip'
// @ts-ignore
import { Chord, ArcDatum, ArcTooltipComponentProps, RibbonTooltipComponentProps } from '../src'
const generateData = (size: number) => {
const { matrix, keys } = generateChordData({ size })
return { data: matrix, keys }
}
const commonProperties = {
width: 900,
height: 500,
margin: { top: 60, right: 80, bottom: 60, left: 80 },
...generateData(7),
xPadding: 0.2,
}
const stories = storiesOf('Chord', module)
stories.add('default', () => <Chord {...commonProperties} />)
stories.add('radial labels', () => <Chord {...commonProperties} labelRotation={-90} />)
const customLabel = (arc: Omit<ArcDatum, 'label' | 'color'>) => `${arc.id} [${arc.value}]`
stories.add('custom labels text', () => (
<Chord {...commonProperties} {...generateData(5)} label={customLabel} />
))
stories.add('angle padding', () => (
<Chord {...commonProperties} labelRotation={-90} padAngle={0.06} />
))
stories.add('ribbons offset', () => (
<Chord {...commonProperties} labelRotation={-90} padAngle={0.02} innerRadiusOffset={0.02} />
))
stories.add('alternative colors', () => (
<Chord
{...commonProperties}
labelRotation={-90}
padAngle={0.02}
innerRadiusOffset={0.02}
colors={{ scheme: 'category10' }}
/>
))
stories.add('putting labels inside arcs', () => (
<Chord
{...commonProperties}
{...generateData(5)}
padAngle={0.02}
innerRadiusRatio={0.8}
innerRadiusOffset={0.02}
labelOffset={-30}
labelTextColor={{ from: 'color', modifiers: [['darker', 1.6]] }}
/>
))
stories.add('with formatted values', () => (
<Chord
{...commonProperties}
{...generateData(5)}
valueFormat={value =>
`${Number(value).toLocaleString('ru-RU', {
minimumFractionDigits: 2,
})} ₽`
}
/>
))
const ArcTooltip = ({ arc }: ArcTooltipComponentProps) => (
<BasicTooltip
id={`Custom arc tooltip, ${arc.label}`}
value={arc.formattedValue}
color={arc.color}
enableChip={true}
/>
)
const RibbonTooltip = ({ ribbon }: RibbonTooltipComponentProps) => (
<TableTooltip
rows={[
[
<Chip key="chip" color={ribbon.source.color} />,
'Source (custom)',
<strong key="id">{ribbon.source.id}</strong>,
ribbon.source.value,
],
[
<Chip key="chip" color={ribbon.target.color} />,
'Target (custom)',
<strong key="id">{ribbon.target.id}</strong>,
ribbon.target.value,
],
]}
/>
)
stories.add('custom tooltips', () => (
<Chord
{...commonProperties}
{...generateData(5)}
arcTooltip={ArcTooltip}
ribbonTooltip={RibbonTooltip}
/>
))