@@ -6,12 +6,13 @@ import { EqualityCheck, Facet, NO_VALUE } from '../types'
66
77export type MapProps < T > = {
88 array : Facet < T [ ] >
9- children : ( item : Facet < T > , index : number ) => ReactElement | null
9+ children : ( item : Facet < T > , index : number , length : number ) => ReactElement | null
1010 equalityCheck ?: EqualityCheck < T >
1111}
1212
1313export const Map = < T , > ( { array, children, equalityCheck } : MapProps < T > ) => {
14- const countValue = useFacetUnwrap ( useFacetMap ( ( array ) => array . length , [ ] , [ array ] ) ) ?? 0
14+ const lengthValue = useFacetUnwrap ( useFacetMap ( ( array ) => array . length , [ ] , [ array ] ) )
15+ const lengthNumber = lengthValue !== NO_VALUE ? lengthValue : 0
1516
1617 return (
1718 < >
@@ -22,13 +23,14 @@ export const Map = <T,>({ array, children, equalityCheck }: MapProps<T>) => {
2223 key = { index }
2324 arrayFacet = { array }
2425 index = { index }
26+ length = { lengthNumber }
2527 equalityCheck = { equalityCheck }
2628 children = { children }
2729 />
2830 ) : (
29- < MapChild < T > key = { index } arrayFacet = { array } index = { index } children = { children } />
31+ < MapChild < T > key = { index } arrayFacet = { array } index = { index } length = { lengthNumber } children = { children } />
3032 ) ,
31- countValue !== NO_VALUE ? countValue : 0 ,
33+ lengthNumber ,
3234 ) }
3335 </ >
3436 )
@@ -37,11 +39,12 @@ export const Map = <T,>({ array, children, equalityCheck }: MapProps<T>) => {
3739type MapChildMemoProps < T > = {
3840 arrayFacet : Facet < T [ ] >
3941 index : number
40- children : ( item : Facet < T > , index : number ) => ReactElement | null
42+ length : number
43+ children : ( item : Facet < T > , index : number , length : number ) => ReactElement | null
4144 equalityCheck : EqualityCheck < T >
4245}
4346
44- const MapChildMemo = < T , > ( { arrayFacet, index, children, equalityCheck } : MapChildMemoProps < T > ) => {
47+ const MapChildMemo = < T , > ( { arrayFacet, index, length , children, equalityCheck } : MapChildMemoProps < T > ) => {
4548 const childFacet = useFacetMemo (
4649 ( array ) => {
4750 if ( index < array . length ) return array [ index ]
@@ -51,16 +54,17 @@ const MapChildMemo = <T,>({ arrayFacet, index, children, equalityCheck }: MapChi
5154 [ arrayFacet ] ,
5255 equalityCheck ,
5356 )
54- return children ( childFacet , index )
57+ return children ( childFacet , index , length )
5558}
5659
5760type MapChildProps < T > = {
5861 arrayFacet : Facet < T [ ] >
5962 index : number
60- children : ( item : Facet < T > , index : number ) => ReactElement | null
63+ length : number
64+ children : ( item : Facet < T > , index : number , length : number ) => ReactElement | null
6165}
6266
63- const MapChild = < T , > ( { arrayFacet, index, children } : MapChildProps < T > ) => {
67+ const MapChild = < T , > ( { arrayFacet, index, length , children } : MapChildProps < T > ) => {
6468 const childFacet = useFacetMap (
6569 ( array ) => {
6670 if ( index < array . length ) return array [ index ]
@@ -70,7 +74,7 @@ const MapChild = <T,>({ arrayFacet, index, children }: MapChildProps<T>) => {
7074 [ arrayFacet ] ,
7175 )
7276
73- return children ( childFacet , index )
77+ return children ( childFacet , index , length )
7478}
7579
7680interface TimesFn < T > {
0 commit comments