File tree 2 files changed +59
-5
lines changed
2 files changed +59
-5
lines changed Original file line number Diff line number Diff line change @@ -868,6 +868,53 @@ describe('connectionFromArraySlice()', () => {
868
868
}
869
869
} ) ;
870
870
} ) ;
871
+
872
+ it ( 'can populate edges and resolve nodes from the array' , ( ) => {
873
+ const letterEdgeData = [
874
+ {
875
+ letter : 'A' ,
876
+ isFirst : true ,
877
+ } ,
878
+ {
879
+ letter : 'B' ,
880
+ isFirst : false ,
881
+ }
882
+ ] ;
883
+
884
+ const c = connectionFromArraySlice (
885
+ letterEdgeData ,
886
+ {
887
+ first : 2 ,
888
+ } ,
889
+ {
890
+ sliceStart : 0 ,
891
+ arrayLength : 2 ,
892
+ resolveNode : ( { letter } ) => letter ,
893
+ }
894
+ ) ;
895
+ return expect ( c ) . to . deep . equal ( {
896
+ edges : [
897
+ {
898
+ isFirst : true ,
899
+ node : 'A' ,
900
+ letter : 'A' ,
901
+ cursor : 'YXJyYXljb25uZWN0aW9uOjA=' ,
902
+ } ,
903
+ {
904
+ isFirst : false ,
905
+ node : 'B' ,
906
+ letter : 'B' ,
907
+ cursor : 'YXJyYXljb25uZWN0aW9uOjE=' ,
908
+ } ,
909
+ ] ,
910
+ pageInfo : {
911
+ startCursor : 'YXJyYXljb25uZWN0aW9uOjA=' ,
912
+ endCursor : 'YXJyYXljb25uZWN0aW9uOjE=' ,
913
+ hasPreviousPage : false ,
914
+ hasNextPage : false ,
915
+ }
916
+ } ) ;
917
+ } ) ;
871
918
} ) ;
872
919
873
920
describe ( 'connectionFromPromisedArraySlice()' , ( ) => {
Original file line number Diff line number Diff line change @@ -68,7 +68,7 @@ export function connectionFromArraySlice<T>(
68
68
meta : ArraySliceMetaInfo
69
69
) : Connection < T > {
70
70
const { after, before, first, last } = args ;
71
- const { sliceStart, arrayLength } = meta ;
71
+ const { sliceStart, arrayLength, resolveNode } = meta ;
72
72
const sliceEnd = sliceStart + arraySlice . length ;
73
73
const beforeOffset = getOffsetWithDefault ( before , arrayLength ) ;
74
74
const afterOffset = getOffsetWithDefault ( after , - 1 ) ;
@@ -110,10 +110,17 @@ export function connectionFromArraySlice<T>(
110
110
arraySlice . length - ( sliceEnd - endOffset )
111
111
) ;
112
112
113
- const edges = slice . map ( ( value , index ) => ( {
114
- cursor : offsetToCursor ( startOffset + index ) ,
115
- node : value ,
116
- } ) ) ;
113
+ const edges = slice . map ( ( value , index ) => {
114
+ const newEdge = {
115
+ cursor : offsetToCursor ( startOffset + index ) ,
116
+ node : resolveNode ? resolveNode ( value ) : value ,
117
+ } ;
118
+
119
+ if ( resolveNode ) {
120
+ return { ...newEdge , ...value } ;
121
+ }
122
+ return newEdge ;
123
+ } ) ;
117
124
118
125
const firstEdge = edges [ 0 ] ;
119
126
const lastEdge = edges [ edges . length - 1 ] ;
You can’t perform that action at this time.
0 commit comments