Skip to content

Commit 1afc0a4

Browse files
committedDec 29, 2021
feat(bump): fix Bump linting errors & warnings
1 parent 235d85e commit 1afc0a4

File tree

8 files changed

+78
-51
lines changed

8 files changed

+78
-51
lines changed
 

‎packages/bump/src/bump/Bump.tsx

+11-5
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ import { createElement, useMemo, Fragment, ReactNode } from 'react'
22
import { Container, useDimensions, SvgWrapper } from '@nivo/core'
33
import { Grid, Axes } from '@nivo/axes'
44
import {
5+
BumpCustomLayerProps,
56
BumpDatum,
7+
BumpLayer,
68
BumpLayerId,
9+
BumpLineTooltip,
710
BumpSerieExtraProps,
811
BumpSvgProps,
912
DefaultBumpDatum,
@@ -26,7 +29,7 @@ const InnerBump = <Datum extends BumpDatum, ExtraProps extends BumpSerieExtraPro
2629
height,
2730
margin: partialMargin,
2831

29-
layers = bumpSvgDefaultProps.layers,
32+
layers = bumpSvgDefaultProps.layers as BumpLayer<Datum, ExtraProps>[],
3033

3134
interpolation = bumpSvgDefaultProps.interpolation,
3235
xPadding = bumpSvgDefaultProps.xPadding,
@@ -48,7 +51,10 @@ const InnerBump = <Datum extends BumpDatum, ExtraProps extends BumpSerieExtraPro
4851
endLabelPadding = bumpSvgDefaultProps.endLabelPadding,
4952
endLabelTextColor = bumpSvgDefaultProps.endLabelTextColor,
5053

51-
pointComponent = bumpSvgDefaultProps.pointComponent,
54+
pointComponent = bumpSvgDefaultProps.pointComponent as Exclude<
55+
BumpSvgProps<Datum, ExtraProps>['pointComponent'],
56+
undefined
57+
>,
5258
pointSize = bumpSvgDefaultProps.pointSize,
5359
activePointSize = bumpSvgDefaultProps.activePointSize,
5460
inactivePointSize = bumpSvgDefaultProps.inactivePointSize,
@@ -71,7 +77,7 @@ const InnerBump = <Datum extends BumpDatum, ExtraProps extends BumpSerieExtraPro
7177
onMouseMove,
7278
onMouseLeave,
7379
onClick,
74-
tooltip = bumpSvgDefaultProps.tooltip,
80+
tooltip = bumpSvgDefaultProps.tooltip as BumpLineTooltip<Datum, ExtraProps>,
7581
role = bumpSvgDefaultProps.role,
7682
}: InnerBumpProps<Datum, ExtraProps>) => {
7783
const { margin, innerWidth, innerHeight, outerWidth, outerHeight } = useDimensions(
@@ -201,7 +207,7 @@ const InnerBump = <Datum extends BumpDatum, ExtraProps extends BumpSerieExtraPro
201207
)
202208
}
203209

204-
const customLayerProps = useMemo(
210+
const customLayerProps: BumpCustomLayerProps<Datum, ExtraProps> = useMemo(
205211
() => ({
206212
innerHeight,
207213
innerWidth,
@@ -241,7 +247,7 @@ const InnerBump = <Datum extends BumpDatum, ExtraProps extends BumpSerieExtraPro
241247

242248
export const Bump = <
243249
Datum extends BumpDatum = DefaultBumpDatum,
244-
ExtraProps extends BumpSerieExtraProps = {}
250+
ExtraProps extends BumpSerieExtraProps = Record<string, never>
245251
>({
246252
isInteractive = bumpSvgDefaultProps.isInteractive,
247253
animate = bumpSvgDefaultProps.animate,

‎packages/bump/src/bump/Line.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export const Line = <Datum extends BumpDatum, ExtraProps extends BumpSerieExtraP
4242

4343
const { animate, config: springConfig } = useMotionConfig()
4444

45-
const linePath = lineGenerator(serie.linePoints)!
45+
const linePath = lineGenerator(serie.linePoints) || ''
4646

4747
const animatedPath = useAnimatedPath(linePath)
4848
const animatedProps = useSpring<{

‎packages/bump/src/bump/ResponsiveBump.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Bump } from './Bump'
44

55
export const ResponsiveBump = <
66
Datum extends BumpDatum = DefaultBumpDatum,
7-
ExtraProps extends BumpSerieExtraProps = {}
7+
ExtraProps extends BumpSerieExtraProps = Record<string, never>
88
>(
99
props: Omit<BumpSvgProps<Datum, ExtraProps>, 'width' | 'height'>
1010
) => (

‎packages/bump/src/bump/defaults.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { ModernMotionProps } from '@nivo/core'
22
import { LineTooltip } from './LineTooltip'
33
import { Point } from './Point'
4-
import { BumpCommonProps, BumpPointComponent } from './types'
4+
import { BumpCommonProps, BumpPointComponent, BumpDatum } from './types'
55

66
const commonDefaultProps: Omit<
7-
BumpCommonProps<any, any>,
7+
BumpCommonProps<BumpDatum, Record<string, unknown>>,
88
| 'onMouseEnter'
99
| 'onMouseMove'
1010
| 'onMouseLeave'
@@ -59,7 +59,7 @@ const commonDefaultProps: Omit<
5959
}
6060

6161
export const bumpSvgDefaultProps: typeof commonDefaultProps & {
62-
pointComponent: BumpPointComponent<any, any>
62+
pointComponent: BumpPointComponent<BumpDatum, Record<string, unknown>>
6363
animate: boolean
6464
motionConfig: ModernMotionProps['motionConfig']
6565
} = {

‎packages/bump/src/bump/hooks.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ const usePointStyle = <Datum extends BumpDatum, ExtraProps extends BumpSerieExtr
159159

160160
export const useBump = <
161161
Datum extends BumpDatum = DefaultBumpDatum,
162-
ExtraProps extends BumpSerieExtraProps = {}
162+
ExtraProps extends BumpSerieExtraProps = Record<string, never>
163163
>({
164164
width,
165165
height,
@@ -332,15 +332,15 @@ export const useBumpSerieHandlers = <
332332
setActiveSerieIds([serie.id])
333333
onMouseEnter && onMouseEnter(serie, event)
334334
},
335-
[serie, onMouseEnter, showTooltipFromEvent, setActiveSerieIds]
335+
[serie, onMouseEnter, showTooltipFromEvent, setActiveSerieIds, tooltip]
336336
)
337337

338338
const handleMouseMove = useCallback(
339339
event => {
340340
showTooltipFromEvent(createElement(tooltip, { serie }), event)
341341
onMouseMove && onMouseMove(serie, event)
342342
},
343-
[serie, onMouseMove, showTooltipFromEvent]
343+
[serie, onMouseMove, showTooltipFromEvent, tooltip]
344344
)
345345

346346
const handleMouseLeave = useCallback(
@@ -430,5 +430,5 @@ export const useBumpSeriesLabels = <
430430
})
431431

432432
return labels
433-
}, [series, position, padding, getColor])
433+
}, [series, position, padding, getColor, getLabel])
434434
}

‎packages/bump/src/bump/types.ts

+34-6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import { FunctionComponent, MouseEvent } from 'react'
2+
import { Line as D3Line } from 'd3-shape'
23
import { Theme, Box, Dimensions, ModernMotionProps } from '@nivo/core'
34
import { OrdinalColorScaleConfig, InheritedColorConfig } from '@nivo/colors'
45
import { AxisProps } from '@nivo/axes'
6+
import { ScalePoint } from '@nivo/scales'
57

68
export interface BumpDatum {
79
x: number | string
@@ -14,7 +16,7 @@ export interface DefaultBumpDatum {
1416
}
1517

1618
export type BumpSerieExtraProps = {
17-
[key: string]: any
19+
[key: string]: unknown
1820
}
1921

2022
export type BumpSerie<
@@ -92,8 +94,34 @@ export type BumpMouseHandler<Datum extends BumpDatum, ExtraProps extends BumpSer
9294
) => void
9395

9496
export type BumpLayerId = 'grid' | 'axes' | 'labels' | 'lines' | 'points'
95-
export interface BumpCustomLayerProps {}
96-
export type BumpCustomLayer = FunctionComponent<BumpCustomLayerProps>
97+
export interface BumpCustomLayerProps<
98+
Datum extends BumpDatum,
99+
ExtraProps extends BumpSerieExtraProps
100+
> {
101+
innerHeight: number
102+
innerWidth: number
103+
lineGenerator: D3Line<[number, number | null]>
104+
points: BumpPoint<Datum, ExtraProps>[]
105+
series: BumpComputedSerie<Datum, ExtraProps>[]
106+
xScale: ScalePoint<Datum['x']>
107+
yScale: ScalePoint<number>
108+
activeSerieIds: string[]
109+
setActiveSerieIds: (serieIds: string[]) => void
110+
}
111+
export type BumpCustomLayer<
112+
Datum extends BumpDatum,
113+
ExtraProps extends BumpSerieExtraProps
114+
> = FunctionComponent<BumpCustomLayerProps<Datum, ExtraProps>>
115+
export type BumpLayer<Datum extends BumpDatum, ExtraProps extends BumpSerieExtraProps> =
116+
| BumpLayerId
117+
| BumpCustomLayer<Datum, ExtraProps>
118+
119+
export type BumpLineTooltip<
120+
Datum extends BumpDatum,
121+
ExtraProps extends BumpSerieExtraProps
122+
> = FunctionComponent<{
123+
serie: BumpComputedSerie<Datum, ExtraProps>
124+
}>
97125

98126
export type BumpCommonProps<Datum extends BumpDatum, ExtraProps extends BumpSerieExtraProps> = {
99127
margin: Box
@@ -136,15 +164,15 @@ export type BumpCommonProps<Datum extends BumpDatum, ExtraProps extends BumpSeri
136164
axisTop: AxisProps | null
137165

138166
isInteractive: boolean
139-
defaultActiveSerieIds: BumpSerie<Datum, ExtraProps>['id'][]
167+
defaultActiveSerieIds: string[]
140168
onMouseEnter: BumpMouseHandler<Datum, ExtraProps>
141169
onMouseMove: BumpMouseHandler<Datum, ExtraProps>
142170
onMouseLeave: BumpMouseHandler<Datum, ExtraProps>
143171
onClick: BumpMouseHandler<Datum, ExtraProps>
144-
tooltip: FunctionComponent<{ serie: BumpComputedSerie<Datum, ExtraProps> }>
172+
tooltip: BumpLineTooltip<Datum, ExtraProps>
145173
role: string
146174

147-
layers: (BumpLayerId | BumpCustomLayer)[]
175+
layers: BumpLayer<Datum, ExtraProps>[]
148176

149177
renderWrapper: boolean
150178
}

‎website/src/components/components/ComponentTemplate.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ export const ComponentTemplate = <
7979

8080
const [actions, logAction] = useActionsLogger()
8181

82-
let mappedProperties = settings
82+
let mappedProperties = settings as unknown as Props
8383
if (propertiesMapper !== undefined) {
8484
mappedProperties = propertiesMapper(settings, data)
8585
}
@@ -92,7 +92,7 @@ export const ComponentTemplate = <
9292
const code = generateChartCode(`Responsive${name}`, codeProperties, {
9393
pkg: meta.package,
9494
defaults: defaultProperties,
95-
dataKey: hasData ? dataKey : null,
95+
dataKey: hasData ? dataKey : undefined,
9696
})
9797

9898
const hasStories = meta.stories !== undefined && meta.stories.length > 0

‎website/src/pages/bump/index.tsx

+22-29
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,25 @@ import range from 'lodash/range'
33
import shuffle from 'lodash/shuffle'
44
import { graphql, useStaticQuery } from 'gatsby'
55
import { ResponsiveBump, bumpSvgDefaultProps as defaults, BumpCommonProps } from '@nivo/bump'
6+
import { ModernMotionProps } from '@nivo/core'
7+
import { AxisProps } from '@nivo/axes'
68
import { ComponentTemplate } from '../../components/components/ComponentTemplate'
79
import meta from '../../data/components/bump/meta.yml'
810
import { groups } from '../../data/components/bump/props'
911
import mapper from '../../data/components/bump/mapper'
1012

13+
interface Datum {
14+
x: number
15+
y: number
16+
}
17+
1118
const generateData = () => {
1219
const years = range(2000, 2005)
1320
const ranks = range(1, 13)
1421

1522
const series: {
1623
id: string
17-
data: {
18-
x: number
19-
y: number
20-
}[]
24+
data: Datum[]
2125
}[] = ranks.map(rank => {
2226
return {
2327
id: `Serie ${rank}`,
@@ -37,38 +41,34 @@ const generateData = () => {
3741
return series
3842
}
3943

40-
type UnmappedProps = Omit<BumpCommonProps<{ x: number; y: number }, {}>, 'whatever'>
41-
42-
type Props = UnmappedProps
44+
type Props = Omit<
45+
BumpCommonProps<Datum, {}>,
46+
'theme' | 'onMouseEnter' | 'onMouseMove' | 'onMouseLeave' | 'onClick' | 'renderWrapper'
47+
> &
48+
ModernMotionProps
49+
50+
type UnmappedProps = Omit<Props, 'axisTop' | 'axisRight' | 'axisBottom' | 'axisLeft'> & {
51+
axisTop: AxisProps & { enable: boolean }
52+
axisRight: AxisProps & { enable: boolean }
53+
axisBottom: AxisProps & { enable: boolean }
54+
axisLeft: AxisProps & { enable: boolean }
55+
}
4356

4457
const initialProperties: UnmappedProps = {
58+
...defaults,
4559
margin: {
4660
top: 40,
4761
right: 100,
4862
bottom: 40,
4963
left: 60,
5064
},
5165

52-
interpolation: defaults.interpolation,
53-
xPadding: defaults.xPadding,
54-
xOuterPadding: defaults.xOuterPadding,
55-
yOuterPadding: defaults.yOuterPadding,
56-
5766
colors: { scheme: 'spectral' },
5867
lineWidth: 3,
5968
activeLineWidth: 6,
6069
inactiveLineWidth: 3,
61-
opacity: defaults.opacity,
62-
activeOpacity: defaults.activeOpacity,
6370
inactiveOpacity: 0.15,
6471

65-
startLabel: false,
66-
startLabelPadding: defaults.startLabelPadding,
67-
startLabelTextColor: defaults.startLabelTextColor,
68-
endLabel: true,
69-
endLabelPadding: defaults.endLabelPadding,
70-
endLabelTextColor: defaults.endLabelTextColor,
71-
7272
pointSize: 10,
7373
activePointSize: 16,
7474
inactivePointSize: 0,
@@ -78,8 +78,6 @@ const initialProperties: UnmappedProps = {
7878
inactivePointBorderWidth: 0,
7979
pointBorderColor: { from: 'serie.color' },
8080

81-
enableGridX: true,
82-
enableGridY: true,
8381
axisTop: {
8482
enable: true,
8583
tickSize: 5,
@@ -118,11 +116,6 @@ const initialProperties: UnmappedProps = {
118116
legendPosition: 'middle',
119117
legendOffset: -40,
120118
},
121-
122-
isInteractive: true,
123-
124-
animate: defaults.animate,
125-
motionConfig: defaults.motionConfig,
126119
}
127120

128121
const Bump = () => {
@@ -156,7 +149,7 @@ const Bump = () => {
156149
>
157150
{(properties, data, theme, logAction) => {
158151
return (
159-
<ResponsiveBump<{ x: number; y: number }>
152+
<ResponsiveBump<Datum>
160153
data={data}
161154
{...properties}
162155
theme={theme}

0 commit comments

Comments
 (0)
Please sign in to comment.