From 6ee354b749aa3556d64ac3730839d1801b3bb149 Mon Sep 17 00:00:00 2001 From: Pascal Delange Date: Mon, 22 Jan 2024 12:39:51 +0100 Subject: [PATCH] refacto : pagination dto fix --- .../src/components/PaginationButtons.tsx | 14 ++++------ packages/app-builder/src/models/pagination.ts | 26 +++++++++++++++++++ .../src/repositories/CaseRepository.ts | 14 +++++++--- .../src/repositories/DecisionRepository.ts | 14 +++++++--- .../_builder+/settings+/inboxes.$inboxId.tsx | 8 +++--- packages/marble-api/scripts/openapi.yaml | 8 +++--- packages/marble-api/src/fixtures/decisions.ts | 4 +-- .../marble-api/src/generated/marble-api.ts | 4 +-- 8 files changed, 65 insertions(+), 27 deletions(-) diff --git a/packages/app-builder/src/components/PaginationButtons.tsx b/packages/app-builder/src/components/PaginationButtons.tsx index 88c747f5c..b1d751213 100644 --- a/packages/app-builder/src/components/PaginationButtons.tsx +++ b/packages/app-builder/src/components/PaginationButtons.tsx @@ -1,4 +1,7 @@ -import { type PaginationParams } from '@app-builder/models/pagination'; +import { + type PaginatedResponse, + type PaginationParams, +} from '@app-builder/models/pagination'; import { Trans, useTranslation } from 'react-i18next'; import { Button } from 'ui-design-system'; import { Icon } from 'ui-icons'; @@ -13,13 +16,6 @@ export const paginationSchema = z.object({ sorting: z.enum(['created_at']).optional(), }); -export type PaginatedResponse = { - items: T[]; - total_count: { value: number; is_max_count: boolean }; - startIndex: number; - endIndex: number; -}; - type ItemWithId = { id: string; }; @@ -30,7 +26,7 @@ type PaginationsButtonsProps = PaginatedResponse & { export const PaginationButtons = ({ items, - total_count: { value: total, is_max_count: isMaxCount }, + totalCount: { value: total, isMaxCount }, startIndex, endIndex, onPaginationChange, diff --git a/packages/app-builder/src/models/pagination.ts b/packages/app-builder/src/models/pagination.ts index 69c799eb2..155a9078a 100644 --- a/packages/app-builder/src/models/pagination.ts +++ b/packages/app-builder/src/models/pagination.ts @@ -1,3 +1,29 @@ +import { type Pagination as PaginationDto } from 'marble-api'; + +export type Pagination = { + totalCount: { value: number; isMaxCount: boolean }; + startIndex: number; + endIndex: number; +}; + +export type PaginatedResponse = { + items: T[]; + totalCount: { value: number; isMaxCount: boolean }; + startIndex: number; + endIndex: number; +}; + +export function fromPaginationDto(pagination: PaginationDto): Pagination { + return { + totalCount: { + value: pagination.total_count.value, + isMaxCount: pagination.total_count.is_max_count, + }, + startIndex: pagination.start_index, + endIndex: pagination.end_index, + }; +} + export type PaginationParams = { next?: true | false; previous?: true | false; diff --git a/packages/app-builder/src/repositories/CaseRepository.ts b/packages/app-builder/src/repositories/CaseRepository.ts index 67e16fa92..13e0c84a3 100644 --- a/packages/app-builder/src/repositories/CaseRepository.ts +++ b/packages/app-builder/src/repositories/CaseRepository.ts @@ -1,7 +1,10 @@ -import { type PaginatedResponse } from '@app-builder/components/PaginationButtons'; import { type MarbleApi } from '@app-builder/infra/marble-api'; import { adaptCaseDetailDto, type CaseDetail } from '@app-builder/models/cases'; -import { type FiltersWithPagination } from '@app-builder/models/pagination'; +import { + type FiltersWithPagination, + fromPaginationDto, + type PaginatedResponse, +} from '@app-builder/models/pagination'; import { add } from 'date-fns/add'; import { type Case, type CaseStatus, type UpdateCaseBody } from 'marble-api'; import { Temporal } from 'temporal-polyfill'; @@ -53,11 +56,16 @@ export function getCaseRepository() { startDate = add(new Date(), fromNowDuration).toISOString(); } - return marbleApiClient.listCases({ + const { items, ...pagination } = await marbleApiClient.listCases({ ...rest, startDate, endDate, }); + + return { + items, + ...fromPaginationDto(pagination), + }; }, getCase: async ({ caseId }) => { const result = await marbleApiClient.getCase(caseId); diff --git a/packages/app-builder/src/repositories/DecisionRepository.ts b/packages/app-builder/src/repositories/DecisionRepository.ts index 355443311..0ba92e99e 100644 --- a/packages/app-builder/src/repositories/DecisionRepository.ts +++ b/packages/app-builder/src/repositories/DecisionRepository.ts @@ -1,6 +1,9 @@ -import { type PaginatedResponse } from '@app-builder/components'; import { type MarbleApi } from '@app-builder/infra/marble-api'; -import { type FiltersWithPagination } from '@app-builder/models/pagination'; +import { + type FiltersWithPagination, + fromPaginationDto, + type PaginatedResponse, +} from '@app-builder/models/pagination'; import { add } from 'date-fns/add'; import { type Decision, type Outcome } from 'marble-api'; import { Temporal } from 'temporal-polyfill'; @@ -44,11 +47,16 @@ export function getDecisionRepository() { startDate = add(new Date(), fromNowDuration).toISOString(); } - return marbleApiClient.listDecisions({ + const { items, ...pagination } = await marbleApiClient.listDecisions({ ...rest, startDate, endDate, }); + + return { + items, + ...fromPaginationDto(pagination), + }; }, }); } diff --git a/packages/app-builder/src/routes/_builder+/settings+/inboxes.$inboxId.tsx b/packages/app-builder/src/routes/_builder+/settings+/inboxes.$inboxId.tsx index 11aff7bc2..406c5a6a5 100644 --- a/packages/app-builder/src/routes/_builder+/settings+/inboxes.$inboxId.tsx +++ b/packages/app-builder/src/routes/_builder+/settings+/inboxes.$inboxId.tsx @@ -107,9 +107,9 @@ export default function Inbox() { {t('settings:inboxes.inbox_details.case_count')} - {!caseList.total_count.is_max_count - ? caseList.total_count.value + '+' - : caseList.total_count.value} + {!caseList.totalCount.isMaxCount + ? caseList.totalCount.value + '+' + : caseList.totalCount.value} @@ -140,7 +140,7 @@ export default function Inbox() { - {caseList.total_count.value === 0 ? ( + {caseList.totalCount.value === 0 ? ( ) : ( diff --git a/packages/marble-api/src/generated/marble-api.ts b/packages/marble-api/src/generated/marble-api.ts index b65b5fe4a..bc85f24bc 100644 --- a/packages/marble-api/src/generated/marble-api.ts +++ b/packages/marble-api/src/generated/marble-api.ts @@ -38,8 +38,8 @@ export type PaginationCount = { is_max_count: boolean; }; export type Pagination = { - startIndex: number; - endIndex: number; + start_index: number; + end_index: number; total_count: PaginationCount; }; export type Error = {