@@ -2,7 +2,7 @@ import { area, line } from 'd3-shape'
22import React from 'react'
33
44import { Axis , Series , Datum } from '../types'
5- import { translate } from '../utils/Utils'
5+ import { isDefined , translate } from '../utils/Utils'
66import useChartContext from '../utils/chartContext'
77//
88import { monotoneX } from '../utils/curveMonotone'
@@ -36,30 +36,35 @@ export default function Line<TDatum>({
3636 { allSeries . map ( ( series , i ) => {
3737 const style = getSeriesStatusStyle ( series , focusedDatum )
3838
39- const areaPath =
40- secondaryAxis . elementType === 'area'
41- ? area < Datum < TDatum > > (
42- datum => getPrimary ( datum , primaryAxis ) ?? NaN ,
43- datum =>
44- clampPxToAxis (
45- getSecondaryStart ( datum , secondaryAxis ) ?? NaN ,
46- secondaryAxis
47- ) ,
48- datum =>
49- clampPxToAxis (
50- getSecondary ( datum , secondaryAxis ) ?? NaN ,
51- secondaryAxis
52- )
53- ) . curve ( curve ) ( series . datums ) ?? undefined
54- : undefined
39+ let areaPath : null | string = null
40+
41+ if ( secondaryAxis . elementType === 'area' ) {
42+ const _x = ( datum : Datum < TDatum > ) => getPrimary ( datum , primaryAxis )
43+ const _y1 = ( datum : Datum < TDatum > ) =>
44+ clampPxToAxis (
45+ getSecondaryStart ( datum , secondaryAxis ) ,
46+ secondaryAxis
47+ )
48+ const _y2 = ( datum : Datum < TDatum > ) =>
49+ clampPxToAxis ( getSecondary ( datum , secondaryAxis ) , secondaryAxis )
50+ const areaFn = area < Datum < TDatum > > ( _x , _y1 , _y2 ) . curve ( curve )
51+
52+ areaFn . defined ( datum =>
53+ [ _x ( datum ) , _y1 ( datum ) , _y2 ( datum ) ] . every ( isDefined )
54+ )
55+
56+ areaPath = areaFn ( series . datums )
57+ }
58+
59+ const _x = ( datum : Datum < TDatum > ) => getPrimary ( datum , primaryAxis )
60+ const _y = ( datum : Datum < TDatum > ) => getSecondary ( datum , secondaryAxis )
61+ const lineFn = line < Datum < TDatum > > ( _x , _y ) . curve ( curve )
62+ lineFn . defined ( datum => [ _x ( datum ) , _y ( datum ) ] . every ( isDefined ) )
5563
5664 const linePath =
5765 secondaryAxis . elementType === 'area' ||
5866 secondaryAxis . elementType === 'line'
59- ? line < Datum < TDatum > > (
60- datum => getPrimary ( datum , primaryAxis ) ?? NaN ,
61- datum => getSecondary ( datum , secondaryAxis ) ?? NaN
62- ) . curve ( curve ) ( series . datums ) ?? undefined
67+ ? lineFn ( series . datums ) ?? undefined
6368 : undefined
6469
6570 const showDatumElements =
@@ -112,8 +117,8 @@ export default function Line<TDatum>({
112117 ref = { el => {
113118 datum . element = el
114119 } }
115- cx = { getX ( datum , primaryAxis , secondaryAxis ) }
116- cy = { getY ( datum , primaryAxis , secondaryAxis ) }
120+ cx = { getX ( datum , primaryAxis , secondaryAxis ) || 0 }
121+ cy = { getY ( datum , primaryAxis , secondaryAxis ) || 0 }
117122 style = { {
118123 // @ts -ignore
119124 r : radius ,
0 commit comments