Skip to content

Commit ded4219

Browse files
committed
Add resolveNode param which allows data to be used for edges, not just nodes
1 parent a09e906 commit ded4219

File tree

2 files changed

+59
-5
lines changed

2 files changed

+59
-5
lines changed

src/connection/__tests__/arrayconnection.js

+47
Original file line numberDiff line numberDiff line change
@@ -868,6 +868,53 @@ describe('connectionFromArraySlice()', () => {
868868
}
869869
});
870870
});
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+
});
871918
});
872919

873920
describe('connectionFromPromisedArraySlice()', () => {

src/connection/arrayconnection.js

+12-5
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ export function connectionFromArraySlice<T>(
6868
meta: ArraySliceMetaInfo
6969
): Connection<T> {
7070
const { after, before, first, last } = args;
71-
const { sliceStart, arrayLength } = meta;
71+
const { sliceStart, arrayLength, resolveNode } = meta;
7272
const sliceEnd = sliceStart + arraySlice.length;
7373
const beforeOffset = getOffsetWithDefault(before, arrayLength);
7474
const afterOffset = getOffsetWithDefault(after, -1);
@@ -110,10 +110,17 @@ export function connectionFromArraySlice<T>(
110110
arraySlice.length - (sliceEnd - endOffset)
111111
);
112112

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+
});
117124

118125
const firstEdge = edges[0];
119126
const lastEdge = edges[edges.length - 1];

0 commit comments

Comments
 (0)