1
1
import GetEntities from '@js-entity-repos/core/dist/signatures/GetEntities' ;
2
+ import { end } from '@js-entity-repos/core/dist/types/Cursor' ;
2
3
import Entity from '@js-entity-repos/core/dist/types/Entity' ;
3
4
import Pagination from '@js-entity-repos/core/dist/types/Pagination' ;
4
5
import { forward } from '@js-entity-repos/core/dist/types/PaginationDirection' ;
5
6
import Sort from '@js-entity-repos/core/dist/types/Sort' ;
6
7
import { asc } from '@js-entity-repos/core/dist/types/SortOrder' ;
7
- import createCursorFromEntity from '@js-entity-repos/core/dist/utils/createCursorFromEntity' ;
8
+ import createEndCursorResult from '@js-entity-repos/core/dist/utils/createEndCursorResult' ;
9
+ import createGetEntitiesResult from '@js-entity-repos/core/dist/utils/createGetEntitiesResult' ;
8
10
import createPaginationFilter from '@js-entity-repos/core/dist/utils/createPaginationFilter' ;
9
- import { first , last } from 'lodash' ;
10
11
import FacadeConfig from '../FacadeConfig' ;
11
12
import filterEntities from '../utils/filterEntities' ;
12
13
import sortEntities from '../utils/sortEntities' ;
@@ -19,16 +20,19 @@ export default <E extends Entity>(config: FacadeConfig<E>): GetEntities<E> => {
19
20
} ;
20
21
const defaultSort = { id : asc } as Sort < E > ;
21
22
return async ( { filter = { } , sort = defaultSort , pagination = defaultPagination } ) => {
23
+ if ( pagination . cursor === end ) {
24
+ return createEndCursorResult ( pagination ) ;
25
+ }
26
+
22
27
const paginationFilter = createPaginationFilter ( pagination , sort ) ;
23
28
const fullFilter = { $and : [ filter , paginationFilter ] } ;
24
29
const storedEntities = config . getEntities ( ) ;
25
30
const matchedEntities = filterEntities ( { entities : storedEntities , filter : fullFilter } ) ;
26
31
const sortedEntities = sortEntities ( { entities : matchedEntities , sort } ) ;
27
- const start = pagination . direction === forward ? 0 : 0 - pagination . limit ;
28
- const end = pagination . direction === forward ? pagination . limit : undefined ;
29
- const entities = sortedEntities . slice ( start , end ) ;
30
- const nextCursor = createCursorFromEntity ( last ( entities ) , sort ) ;
31
- const previousCursor = createCursorFromEntity ( first ( entities ) , sort ) ;
32
- return { entities, nextCursor, previousCursor } ;
32
+ const sliceStart = pagination . direction === forward ? 0 : 0 - pagination . limit ;
33
+ const sliceEnd = pagination . direction === forward ? pagination . limit : undefined ;
34
+ const entities = sortedEntities . slice ( sliceStart , sliceEnd ) ;
35
+ const isEnd = sortedEntities . length <= pagination . limit ;
36
+ return createGetEntitiesResult ( { entities, isEnd, pagination, sort } ) ;
33
37
} ;
34
38
} ;
0 commit comments