From 52a59d3865444d37a2c605d2799346172fec2904 Mon Sep 17 00:00:00 2001 From: Akshay Patel Date: Sun, 3 May 2020 14:36:07 +0530 Subject: [PATCH] feat(viewpatients): enables to navigation to previous page Add a field in PageRequest to store refrence that will enable getting previous page. feat #1969 --- .../patients/list/ViewPatients.test.tsx | 8 +++++++- src/clients/db/PageRequest.ts | 3 +++ src/clients/db/Repository.ts | 17 ++++++++++------- src/patients/list/ViewPatients.tsx | 5 ++++- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/__tests__/patients/list/ViewPatients.test.tsx b/src/__tests__/patients/list/ViewPatients.test.tsx index 298ad87cf7..ccf1d574fa 100644 --- a/src/__tests__/patients/list/ViewPatients.test.tsx +++ b/src/__tests__/patients/list/ViewPatients.test.tsx @@ -174,7 +174,13 @@ describe('Patients', () => { { sorts: [{ field: 'index', direction: 'asc' }], }, - { number: 1, size: 1, nextPageInfo: { index: null }, direction: 'next' }, + { + number: 1, + size: 1, + nextPageInfo: { index: null }, + direction: 'next', + previousPageInfo: { index: null }, + }, ) }) }) diff --git a/src/clients/db/PageRequest.ts b/src/clients/db/PageRequest.ts index 065f80f66b..2ad698b0a0 100644 --- a/src/clients/db/PageRequest.ts +++ b/src/clients/db/PageRequest.ts @@ -2,6 +2,8 @@ export default interface PageRequest { number: number | undefined size: number | undefined nextPageInfo: { [key: string]: string | null } | undefined + previousPageInfo: { [key: string]: string | null } | undefined + direction: 'previous' | 'next' | null } export const UnpagedRequest: PageRequest = { @@ -9,4 +11,5 @@ export const UnpagedRequest: PageRequest = { size: undefined, nextPageInfo: undefined, direction: null, + previousPageInfo: undefined, } diff --git a/src/clients/db/Repository.ts b/src/clients/db/Repository.ts index 3cdcf75191..db5924cbbc 100644 --- a/src/clients/db/Repository.ts +++ b/src/clients/db/Repository.ts @@ -61,8 +61,8 @@ export default class Repository { s.direction = s.direction === 'asc' ? 'desc' : 'asc' selector[s.field] = { $lte: - pageRequest.nextPageInfo && pageRequest.nextPageInfo[s.field] - ? pageRequest.nextPageInfo[s.field] + pageRequest.previousPageInfo && pageRequest.previousPageInfo[s.field] + ? pageRequest.previousPageInfo[s.field] : null, } }) @@ -72,33 +72,36 @@ export default class Repository { selector, sort: sort.sorts.length > 0 ? sort.sorts.map((s) => ({ [s.field]: s.direction })) : undefined, limit: pageRequest.size ? pageRequest.size + 1 : undefined, - skip: pageRequest.direction === 'previous' ? pageRequest.size : undefined, }) const mappedResult = result.docs.map(mapDocument) - if (pageRequest.direction === 'previous') { mappedResult.reverse() } - const nextPageInfo: { [key: string]: string } = {} + const nextPageInfo: { [key: string]: string } = {} if (mappedResult.length > 0) { sort.sorts.forEach((s) => { nextPageInfo[s.field] = mappedResult[mappedResult.length - 1][s.field] }) } + const previousPageInfo: { [key: string]: string } = {} + sort.sorts.forEach((s) => { + previousPageInfo[s.field] = mappedResult[0][s.field] + }) + const pagedResult: Page = { content: pageRequest.size !== undefined && mappedResult.length === pageRequest.size + 1 ? mappedResult.slice(0, mappedResult.length - 1) : mappedResult, hasNext: pageRequest.size !== undefined && mappedResult.length === pageRequest.size + 1, - // hasPrevious: pageRequest.number !== undefined && pageRequest.number > 1, - hasPrevious: false, + hasPrevious: pageRequest.number !== undefined && pageRequest.number > 1, pageRequest: { size: pageRequest.size, number: pageRequest.number, nextPageInfo, + previousPageInfo, direction: null, }, } diff --git a/src/patients/list/ViewPatients.tsx b/src/patients/list/ViewPatients.tsx index fdced50eb7..a9b6d519b6 100644 --- a/src/patients/list/ViewPatients.tsx +++ b/src/patients/list/ViewPatients.tsx @@ -29,6 +29,7 @@ const ViewPatients = () => { size: 1, number: 1, nextPageInfo: { index: null }, + previousPageInfo: { index: null }, direction: 'next', }) @@ -39,6 +40,7 @@ const ViewPatients = () => { number: p.number + 1, size: p.size, nextPageInfo: patients.pageRequest?.nextPageInfo, + previousPageInfo: undefined, direction: 'next', } return newPageRequest @@ -53,7 +55,8 @@ const ViewPatients = () => { return { number: p.number - 1, size: p.size, - nextPageInfo: patients.pageRequest?.nextPageInfo, + nextPageInfo: undefined, + previousPageInfo: patients.pageRequest?.previousPageInfo, direction: 'previous', } }