@@ -69,123 +69,146 @@ function PrimaryVoronoi<TDatum>({
69
69
} = useChartContext < TDatum > ( )
70
70
71
71
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
109
76
} )
77
+ . map ( ( datum , i , all ) => {
78
+ const prev = all [ i - 1 ]
79
+ const next = all [ i + 1 ]
110
80
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 )
125
83
126
- let stackData = [ datum . stackData ?. [ 0 ] , datum . stackData ?. [ 1 ] ]
84
+ let range = primaryAxis ?. scale . range ( ) ?? [ 0 , 0 ]
127
85
128
- if ( secondaryAxis ?. isVertical ) {
129
- range . reverse ( )
130
- stackData . reverse ( )
131
- }
86
+ let [ primaryStart , primaryEnd ] = range
132
87
133
- let [ secondaryStart , secondaryEnd ] = range
88
+ if ( prev ) {
89
+ const prevPx = getPrimary ( prev , primaryAxis )
90
+ primaryStart = primaryPx - ( primaryPx - prevPx ) / 2
91
+ }
134
92
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
+ }
138
97
139
- if ( next ) {
140
- secondaryEnd = secondaryAxis ?. scale ( stackData [ 1 ] ?? NaN ) ?? NaN
141
- }
98
+ const datums = groupedDatums . get ( `${ primaryValue } ` ) ?? [ ]
142
99
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 )
149
103
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 )
153
115
) ?? NaN
154
116
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
+ } )
189
212
190
213
return (
191
214
< g
0 commit comments