From 91b8ccc4e65a2515dd2ccff07d6f500d847ee5c2 Mon Sep 17 00:00:00 2001 From: Ryan Smith <0ryansmith1994@gmail.com> Date: Wed, 28 Mar 2018 09:02:50 +0100 Subject: [PATCH] fix: Fixes cursors. --- package-lock.json | 14 +++++++------- package.json | 2 +- src/functions/getEntities.ts | 20 ++++++++++++-------- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 27d0d839..b6506310 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,11 +33,11 @@ } }, "@js-entity-repos/core": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@js-entity-repos/core/-/core-7.1.0.tgz", - "integrity": "sha512-rp2f1R8k5vGfoY5Bb4HzgtaRodV7EbrkqyhzcDzFikJOxyjX8++5D1exck1JZe++Ch3nJ8t8gwXK3ss+xtjSMg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@js-entity-repos/core/-/core-8.0.0.tgz", + "integrity": "sha512-Sp/GAWp0i51kcACoo/uoBKbSdccrT/JYmONN8kHL2R+gsJIzGoRVYiVN5u/OM4/RcLQYCrtFICmrXUT0UqK5zQ==", "requires": { - "btoa": "1.1.2", + "btoa": "1.2.1", "lodash": "4.17.5", "make-error": "1.3.4" } @@ -1166,9 +1166,9 @@ } }, "btoa": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.1.2.tgz", - "integrity": "sha1-PkC4FmP4HS3WWWpMtxSo3BbPq+A=" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" }, "builtin-modules": { "version": "1.1.1", diff --git a/package.json b/package.json index 0cd76859..30c99e38 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "check-coverage": true }, "dependencies": { - "@js-entity-repos/core": "^7.1.0", + "@js-entity-repos/core": "^8.0.0", "lodash": "^4.17.4", "sift": "^5.0.0" }, diff --git a/src/functions/getEntities.ts b/src/functions/getEntities.ts index a74f6182..828d109c 100644 --- a/src/functions/getEntities.ts +++ b/src/functions/getEntities.ts @@ -1,12 +1,13 @@ import GetEntities from '@js-entity-repos/core/dist/signatures/GetEntities'; +import { end } from '@js-entity-repos/core/dist/types/Cursor'; import Entity from '@js-entity-repos/core/dist/types/Entity'; import Pagination from '@js-entity-repos/core/dist/types/Pagination'; import { forward } from '@js-entity-repos/core/dist/types/PaginationDirection'; import Sort from '@js-entity-repos/core/dist/types/Sort'; import { asc } from '@js-entity-repos/core/dist/types/SortOrder'; -import createCursorFromEntity from '@js-entity-repos/core/dist/utils/createCursorFromEntity'; +import createEndCursorResult from '@js-entity-repos/core/dist/utils/createEndCursorResult'; +import createGetEntitiesResult from '@js-entity-repos/core/dist/utils/createGetEntitiesResult'; import createPaginationFilter from '@js-entity-repos/core/dist/utils/createPaginationFilter'; -import { first, last } from 'lodash'; import FacadeConfig from '../FacadeConfig'; import filterEntities from '../utils/filterEntities'; import sortEntities from '../utils/sortEntities'; @@ -19,16 +20,19 @@ export default (config: FacadeConfig): GetEntities => { }; const defaultSort = { id: asc } as Sort; return async ({ filter = {}, sort = defaultSort, pagination = defaultPagination }) => { + if (pagination.cursor === end) { + return createEndCursorResult(pagination); + } + const paginationFilter = createPaginationFilter(pagination, sort); const fullFilter = { $and: [filter, paginationFilter] }; const storedEntities = config.getEntities(); const matchedEntities = filterEntities({ entities: storedEntities, filter: fullFilter }); const sortedEntities = sortEntities({ entities: matchedEntities, sort }); - const start = pagination.direction === forward ? 0 : 0 - pagination.limit; - const end = pagination.direction === forward ? pagination.limit : undefined; - const entities = sortedEntities.slice(start, end); - const nextCursor = createCursorFromEntity(last(entities), sort); - const previousCursor = createCursorFromEntity(first(entities), sort); - return { entities, nextCursor, previousCursor }; + const sliceStart = pagination.direction === forward ? 0 : 0 - pagination.limit; + const sliceEnd = pagination.direction === forward ? pagination.limit : undefined; + const entities = sortedEntities.slice(sliceStart, sliceEnd); + const isEnd = sortedEntities.length <= pagination.limit; + return createGetEntitiesResult({ entities, isEnd, pagination, sort }); }; };