Skip to content

Commit fa5d6e6

Browse files
committedAug 17, 2021
feat(stream): add support for custom layer
1 parent e202437 commit fa5d6e6

File tree

4 files changed

+22
-2
lines changed

4 files changed

+22
-2
lines changed
 

‎packages/stream/src/Stream.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ const InnerStream = <RawDatum extends StreamDatum>({
8484
getDotColor,
8585
getDotBorderWidth,
8686
getDotBorderColor,
87+
layerContext,
8788
} = useStream<RawDatum>({
8889
width: innerWidth,
8990
height: innerHeight,
@@ -219,7 +220,7 @@ const InnerStream = <RawDatum extends StreamDatum>({
219220
>
220221
{chartLayers.map((layer, i) => {
221222
if (typeof layer === 'function') {
222-
return <Fragment key={i}>{createElement(layer, {})}</Fragment>
223+
return <Fragment key={i}>{createElement(layer, layerContext)}</Fragment>
223224
}
224225

225226
return layerById?.[layer] ?? null

‎packages/stream/src/hooks.ts

+12
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
import { useInheritedColor, useOrdinalColorScale } from '@nivo/colors'
1616
import {
1717
StreamCommonProps,
18+
StreamCustomLayerProps,
1819
StreamDataProps,
1920
StreamDatum,
2021
StreamLayerData,
@@ -181,6 +182,16 @@ export const useStream = <RawDatum extends StreamDatum>({
181182
[data.length, enhancedLayers]
182183
)
183184

185+
const layerContext: StreamCustomLayerProps = useMemo(
186+
() => ({
187+
xScale,
188+
yScale,
189+
layers: enhancedLayers,
190+
slices,
191+
}),
192+
[xScale, yScale, enhancedLayers, slices]
193+
)
194+
184195
return {
185196
xScale,
186197
yScale,
@@ -191,5 +202,6 @@ export const useStream = <RawDatum extends StreamDatum>({
191202
getDotColor,
192203
getDotBorderWidth,
193204
getDotBorderColor,
205+
layerContext,
194206
}
195207
}

‎packages/stream/src/types.ts

+7
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,13 @@ import { LegendProps } from '@nivo/legends'
1717

1818
export type StreamLayerId = 'grid' | 'axes' | 'layers' | 'dots' | 'slices' | 'legends'
1919

20+
export interface StreamCustomLayerProps {
21+
xScale: any
22+
yScale: any
23+
layers: StreamLayerData[]
24+
slices: StreamSliceData[]
25+
}
26+
2027
export interface StreamDatum {
2128
[key: string]: string | number
2229
}

‎packages/stream/tests/Stream.test.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,4 @@ describe('accessibility', () => {
5252
expect(svg.prop('aria-labelledby')).toBe('AriaLabelledBy')
5353
expect(svg.prop('aria-describedby')).toBe('AriaDescribedBy')
5454
})
55-
})
55+
})

0 commit comments

Comments
 (0)
Please sign in to comment.