/
index.js
114 lines (109 loc) · 4.02 KB
/
index.js
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
110
111
112
113
114
import React from 'react'
import shuffle from 'lodash/shuffle'
import { ResponsiveBullet, defaultProps } from '@nivo/bullet'
import { generateBulletData } from '@nivo/generators'
import { ComponentTemplate } from '../../components/components/ComponentTemplate'
import meta from '../../data/components/bullet/meta.yml'
import { groups } from '../../data/components/bullet/props'
import { graphql, useStaticQuery } from 'gatsby'
const generateData = () => [
generateBulletData('temp.', shuffle([100, 120, 140])[0]),
generateBulletData('power', 2, { float: true, measureCount: 2 }),
generateBulletData('volume', shuffle([40, 60, 80])[0], { rangeCount: 8 }),
generateBulletData('cost', 500000, { measureCount: 2 }),
generateBulletData('revenue', shuffle([9, 11, 13])[0], { markerCount: 2 }),
]
const initialProperties = {
minValue: defaultProps.minValue,
maxValue: defaultProps.maxValue,
margin: {
top: 50,
right: 90,
bottom: 50,
left: 90,
},
layout: defaultProps.layout,
reverse: defaultProps.reverse,
spacing: 46,
titlePosition: defaultProps.titlePosition,
titleAlign: 'start',
titleOffsetX: -70,
titleOffsetY: defaultProps.titleOffsetY,
titleRotation: defaultProps.titleRotation,
rangeBorderColor: defaultProps.rangeBorderColor,
rangeBorderWidth: defaultProps.rangeBorderWidth,
measureBorderColor: defaultProps.measureBorderColor,
measureBorderWidth: defaultProps.measureBorderWidth,
measureSize: 0.2,
markerSize: 0.6,
axisPosition: defaultProps.axisPosition,
rangeColors: defaultProps.rangeColors,
measureColors: defaultProps.measureColors,
markerColors: defaultProps.markerColors,
animate: defaultProps.animate,
motionConfig: defaultProps.motionConfig,
}
const Bullet = () => {
const {
image: {
childImageSharp: { gatsbyImageData: image },
},
} = useStaticQuery(graphql`
query {
image: file(absolutePath: { glob: "**/src/assets/captures/bullet.png" }) {
childImageSharp {
gatsbyImageData(layout: FIXED, width: 900, quality: 100)
}
}
}
`)
return (
<ComponentTemplate
name="Bullet"
meta={meta.Bullet}
icon="bullet"
flavors={meta.flavors}
currentFlavor="svg"
properties={groups}
initialProperties={initialProperties}
defaultProperties={defaultProps}
generateData={generateData}
image={image}
>
{(properties, data, theme, logAction) => {
return (
<ResponsiveBullet
data={data}
{...properties}
theme={theme}
onRangeClick={range => {
logAction({
type: 'click',
label: `[range] ${range.id}: [${range.v0}, ${range.v1}]`,
color: range.color,
data: range,
})
}}
onMeasureClick={measure => {
logAction({
type: 'click',
label: `[measure] ${measure.id}: [${measure.v0}, ${measure.v1}]`,
color: measure.color,
data: measure,
})
}}
onMarkerClick={marker => {
logAction({
type: 'click',
label: `[marker] ${marker.id}: ${marker.value}`,
color: marker.color,
data: marker,
})
}}
/>
)
}}
</ComponentTemplate>
)
}
export default Bullet