@@ -69,123 +69,146 @@ function PrimaryVoronoi<TDatum>({
6969 } = useChartContext < TDatum > ( )
7070
7171 return React . useMemo ( ( ) => {
72- const columns = series [ 0 ] . datums . map ( ( datum , i ) => {
73- const prev = series [ 0 ] . datums [ i - 1 ]
74- const next = series [ 0 ] . datums [ i + 1 ]
75-
76- const primaryValue = primaryAxis . getValue ( datum . originalDatum )
77- const primaryPx = getPrimary ( datum , primaryAxis )
78-
79- let range = primaryAxis ?. scale . range ( ) ?? [ 0 , 0 ]
80-
81- let [ primaryStart , primaryEnd ] = range
82-
83- if ( prev ) {
84- const prevPx = getPrimary ( prev , primaryAxis )
85- primaryStart = primaryPx - ( primaryPx - prevPx ) / 2
86- }
87-
88- if ( next ) {
89- const nextPx = getPrimary ( next , primaryAxis )
90- primaryEnd = primaryPx + ( nextPx - primaryPx ) / 2
91- }
92-
93- const datums = groupedDatums . get ( `${ primaryValue } ` ) ?? [ ]
94-
95- datums . sort ( ( a , b ) => {
96- const aAxis = secondaryAxes . find ( d => d . id === a . secondaryAxisId )
97- const bAxis = secondaryAxes . find ( d => d . id === b . secondaryAxisId )
98-
99- const aPx =
100- aAxis ?. scale (
101- aAxis . stacked ? a . stackData ?. [ 1 ] : aAxis ?. getValue ( a . originalDatum )
102- ) ?? NaN
103- const bPx =
104- bAxis ?. scale (
105- bAxis . stacked ? b . stackData ?. [ 1 ] : bAxis ?. getValue ( b . originalDatum )
106- ) ?? NaN
107-
108- return aPx - bPx
72+ const columns = series [ 0 ] . datums
73+ . filter ( datum => {
74+ const primaryValue = primaryAxis . getValue ( datum . originalDatum )
75+ return primaryValue !== 'undefined' && primaryValue !== null
10976 } )
77+ . map ( ( datum , i , all ) => {
78+ const prev = all [ i - 1 ]
79+ const next = all [ i + 1 ]
11080
111- return {
112- primaryStart,
113- primaryEnd,
114- primaryPx,
115- datumBoundaries : datums . map ( ( datum , i ) => {
116- const prev = datums [ i - 1 ]
117- const next = datums [ i + 1 ]
118-
119- const secondaryAxis = secondaryAxes . find (
120- d => d . id === datum . secondaryAxisId
121- )
122-
123- if ( secondaryAxis ?. stacked ) {
124- let range = secondaryAxis ?. scale . range ( ) ?? [ 0 , 0 ]
81+ const primaryValue = primaryAxis . getValue ( datum . originalDatum )
82+ const primaryPx = getPrimary ( datum , primaryAxis )
12583
126- let stackData = [ datum . stackData ?. [ 0 ] , datum . stackData ?. [ 1 ] ]
84+ let range = primaryAxis ?. scale . range ( ) ?? [ 0 , 0 ]
12785
128- if ( secondaryAxis ?. isVertical ) {
129- range . reverse ( )
130- stackData . reverse ( )
131- }
86+ let [ primaryStart , primaryEnd ] = range
13287
133- let [ secondaryStart , secondaryEnd ] = range
88+ if ( prev ) {
89+ const prevPx = getPrimary ( prev , primaryAxis )
90+ primaryStart = primaryPx - ( primaryPx - prevPx ) / 2
91+ }
13492
135- if ( prev ) {
136- secondaryStart = secondaryAxis ?. scale ( stackData [ 0 ] ?? NaN ) ?? NaN
137- }
93+ if ( next ) {
94+ const nextPx = getPrimary ( next , primaryAxis )
95+ primaryEnd = primaryPx + ( nextPx - primaryPx ) / 2
96+ }
13897
139- if ( next ) {
140- secondaryEnd = secondaryAxis ?. scale ( stackData [ 1 ] ?? NaN ) ?? NaN
141- }
98+ const datums = groupedDatums . get ( `${ primaryValue } ` ) ?? [ ]
14299
143- return {
144- secondaryStart,
145- secondaryEnd,
146- datum,
147- }
148- }
100+ datums . sort ( ( a , b ) => {
101+ const aAxis = secondaryAxes . find ( d => d . id === a . secondaryAxisId )
102+ const bAxis = secondaryAxes . find ( d => d . id === b . secondaryAxisId )
149103
150- const value =
151- secondaryAxis ?. scale (
152- secondaryAxis ?. getValue ( datum . originalDatum )
104+ const aPx =
105+ aAxis ?. scale (
106+ aAxis . stacked
107+ ? a . stackData ?. [ 1 ]
108+ : aAxis ?. getValue ( a . originalDatum )
109+ ) ?? NaN
110+ const bPx =
111+ bAxis ?. scale (
112+ bAxis . stacked
113+ ? b . stackData ?. [ 1 ]
114+ : bAxis ?. getValue ( b . originalDatum )
153115 ) ?? NaN
154116
155- let range = secondaryAxis ?. scale . range ( ) ?? [ 0 , 0 ]
156-
157- if ( secondaryAxis ?. isVertical ) {
158- range . reverse ( )
159- }
160-
161- let [ secondaryStart , secondaryEnd ] = range
162-
163- if ( prev ) {
164- const prevAxis = secondaryAxes . find (
165- d => d . id === prev ?. secondaryAxisId
166- )
167- const prevValue =
168- prevAxis ?. scale ( prevAxis ?. getValue ( prev . originalDatum ) ) ?? NaN
169- secondaryStart = value - ( value - prevValue ) / 2
170- }
171-
172- if ( next ) {
173- const nextAxis = secondaryAxes . find (
174- d => d . id === next ?. secondaryAxisId
175- )
176- const nextValue =
177- nextAxis ?. scale ( nextAxis ?. getValue ( next . originalDatum ) ) ?? NaN
178- secondaryEnd = value + ( nextValue - value ) / 2
179- }
180-
181- return {
182- secondaryStart,
183- secondaryEnd,
184- datum,
185- }
186- } ) ,
187- }
188- } )
117+ return aPx - bPx
118+ } )
119+
120+ return {
121+ primaryStart,
122+ primaryEnd,
123+ primaryPx,
124+ datumBoundaries : datums
125+ . filter ( datum => {
126+ const secondaryAxis = secondaryAxes . find (
127+ d => d . id === datum . secondaryAxisId
128+ )
129+ const secondaryValue = secondaryAxis ?. getValue (
130+ datum . originalDatum
131+ )
132+ return (
133+ typeof secondaryValue !== 'undefined' && secondaryValue !== null
134+ )
135+ } )
136+ . map ( ( datum , i , all ) => {
137+ const prev = all [ i - 1 ]
138+ const next = all [ i + 1 ]
139+
140+ const secondaryAxis = secondaryAxes . find (
141+ d => d . id === datum . secondaryAxisId
142+ )
143+
144+ if ( secondaryAxis ?. stacked ) {
145+ let range = secondaryAxis ?. scale . range ( ) ?? [ 0 , 0 ]
146+
147+ let stackData = [ datum . stackData ?. [ 0 ] , datum . stackData ?. [ 1 ] ]
148+
149+ if ( secondaryAxis ?. isVertical ) {
150+ range . reverse ( )
151+ stackData . reverse ( )
152+ }
153+
154+ let [ secondaryStart , secondaryEnd ] = range
155+
156+ if ( prev ) {
157+ secondaryStart =
158+ secondaryAxis ?. scale ( stackData [ 0 ] ?? NaN ) ?? NaN
159+ }
160+
161+ if ( next ) {
162+ secondaryEnd =
163+ secondaryAxis ?. scale ( stackData [ 1 ] ?? NaN ) ?? NaN
164+ }
165+
166+ return {
167+ secondaryStart,
168+ secondaryEnd,
169+ datum,
170+ }
171+ }
172+
173+ const value =
174+ secondaryAxis ?. scale (
175+ secondaryAxis ?. getValue ( datum . originalDatum )
176+ ) ?? NaN
177+
178+ let range = secondaryAxis ?. scale . range ( ) ?? [ 0 , 0 ]
179+
180+ if ( secondaryAxis ?. isVertical ) {
181+ range . reverse ( )
182+ }
183+
184+ let [ secondaryStart , secondaryEnd ] = range
185+
186+ if ( prev ) {
187+ const prevAxis = secondaryAxes . find (
188+ d => d . id === prev ?. secondaryAxisId
189+ )
190+ const prevValue =
191+ prevAxis ?. scale ( prevAxis ?. getValue ( prev . originalDatum ) ) ?? NaN
192+ secondaryStart = value - ( value - prevValue ) / 2
193+ }
194+
195+ if ( next ) {
196+ const nextAxis = secondaryAxes . find (
197+ d => d . id === next ?. secondaryAxisId
198+ )
199+ const nextValue =
200+ nextAxis ?. scale ( nextAxis ?. getValue ( next . originalDatum ) ) ?? NaN
201+ secondaryEnd = value + ( nextValue - value ) / 2
202+ }
203+
204+ return {
205+ secondaryStart,
206+ secondaryEnd,
207+ datum,
208+ }
209+ } ) ,
210+ }
211+ } )
189212
190213 return (
191214 < g
0 commit comments