From 2bd9ec864a53a445ffe3ec1c0c29f159447036ec Mon Sep 17 00:00:00 2001 From: florimondmanca Date: Thu, 30 May 2024 13:54:42 +0200 Subject: [PATCH] Remet en place les paginations --- .../Common/DTO/PaginationDTO.ts | 2 + .../Controller/ListCustomersController.ts | 10 +-- .../Controller/ListLeaveRequestsController.ts | 10 +-- .../Leave/Controller/ListLeavesController.ts | 19 +++-- .../Controller/ListProjectsController.ts | 10 +-- .../Task/Controller/ListTasksController.ts | 10 +-- src/assets/styles/components/button.css | 8 +++ src/assets/styles/utilities/sizing.css | 4 ++ src/templates/includes/pagination.njk | 69 +++++++++++++++++++ src/templates/macros/icons.njk | 8 +++ src/templates/pages/customers/list.njk | 3 + src/templates/pages/leave_requests/list.njk | 3 + src/templates/pages/leaves/list.njk | 3 + src/templates/pages/projects/list.njk | 3 + src/templates/pages/tasks/list.njk | 3 + src/translations/fr-FR.ftl | 5 ++ 16 files changed, 145 insertions(+), 25 deletions(-) create mode 100644 src/templates/includes/pagination.njk diff --git a/src/Infrastructure/Common/DTO/PaginationDTO.ts b/src/Infrastructure/Common/DTO/PaginationDTO.ts index fa78a05e..45b6afae 100644 --- a/src/Infrastructure/Common/DTO/PaginationDTO.ts +++ b/src/Infrastructure/Common/DTO/PaginationDTO.ts @@ -1,3 +1,4 @@ +import { Transform } from 'class-transformer'; import { IsNumber, IsOptional, Max, Min } from 'class-validator'; export class PaginationDTO { @@ -5,5 +6,6 @@ export class PaginationDTO { @Min(1) @Max(10000) @IsNumber() + @Transform((_, { page }) => +page) public page = 1; } diff --git a/src/Infrastructure/Customer/Controller/ListCustomersController.ts b/src/Infrastructure/Customer/Controller/ListCustomersController.ts index 2c3ba740..37ec0351 100644 --- a/src/Infrastructure/Customer/Controller/ListCustomersController.ts +++ b/src/Infrastructure/Customer/Controller/ListCustomersController.ts @@ -27,13 +27,13 @@ export class ListCustomersController { @Get() @WithName('crm_customers_list') @Render('pages/customers/list.njk') - public async get(@Query() pagination: PaginationDTO) { - const customers: Pagination = await this.queryBus.execute( - new GetCustomersQuery(pagination.page) + public async get(@Query() paginationDto: PaginationDTO) { + const pagination: Pagination = await this.queryBus.execute( + new GetCustomersQuery(paginationDto.page) ); - const table = this.tableFactory.create(customers.items); + const table = this.tableFactory.create(pagination.items); - return { table }; + return { table, pagination, currentPage: paginationDto.page }; } } diff --git a/src/Infrastructure/HumanResource/Leave/Controller/ListLeaveRequestsController.ts b/src/Infrastructure/HumanResource/Leave/Controller/ListLeaveRequestsController.ts index 7b2cc28d..f851f615 100644 --- a/src/Infrastructure/HumanResource/Leave/Controller/ListLeaveRequestsController.ts +++ b/src/Infrastructure/HumanResource/Leave/Controller/ListLeaveRequestsController.ts @@ -30,15 +30,15 @@ export class ListLeaveRequestsController { @WithName('people_leave_requests_list') @Render('pages/leave_requests/list.njk') public async get( - @Query() pagination: PaginationDTO, + @Query() paginationDto: PaginationDTO, @LoggedUser() user: User ) { - const leaves: Pagination = await this.queryBus.execute( - new GetLeaveRequestsQuery(user.getId(), pagination.page) + const pagination: Pagination = await this.queryBus.execute( + new GetLeaveRequestsQuery(user.getId(), paginationDto.page) ); - const table = this.tableFactory.create(leaves.items, user.getId()); + const table = this.tableFactory.create(pagination.items, user.getId()); - return { table }; + return { table, pagination, currentPage: paginationDto.page }; } } diff --git a/src/Infrastructure/HumanResource/Leave/Controller/ListLeavesController.ts b/src/Infrastructure/HumanResource/Leave/Controller/ListLeavesController.ts index 57a8195b..90b2af36 100644 --- a/src/Infrastructure/HumanResource/Leave/Controller/ListLeavesController.ts +++ b/src/Infrastructure/HumanResource/Leave/Controller/ListLeavesController.ts @@ -31,17 +31,26 @@ export class ListLeavesController { @WithName('people_leaves_list') @Render('pages/leaves/list.njk') public async get( - @Query() pagination: PaginationDTO, + @Query() paginationDto: PaginationDTO, @LoggedUser() user: User ) { - const leaves: Pagination = await this.queryBus.execute( - new GetLeaveRequestsQuery(user.getId(), pagination.page, Status.ACCEPTED) + const pagination: Pagination = await this.queryBus.execute( + new GetLeaveRequestsQuery( + user.getId(), + paginationDto.page, + Status.ACCEPTED + ) ); - const table = this.tableFactory.create(leaves.items); + const table = this.tableFactory.create(pagination.items); const calendarToken = process.env.CALENDAR_TOKEN; - return { table, calendarToken }; + return { + table, + calendarToken, + pagination, + currentPage: paginationDto.page + }; } } diff --git a/src/Infrastructure/Project/Controller/ListProjectsController.ts b/src/Infrastructure/Project/Controller/ListProjectsController.ts index 41bd1d73..bd017390 100644 --- a/src/Infrastructure/Project/Controller/ListProjectsController.ts +++ b/src/Infrastructure/Project/Controller/ListProjectsController.ts @@ -27,13 +27,13 @@ export class ListProjectsController { @Get() @WithName('crm_projects_list') @Render('pages/projects/list.njk') - public async get(@Query() pagination: PaginationDTO) { - const projects: Pagination = await this.queryBus.execute( - new GetProjectsQuery(pagination.page, false) + public async get(@Query() paginationDto: PaginationDTO) { + const pagination: Pagination = await this.queryBus.execute( + new GetProjectsQuery(paginationDto.page, false) ); - const table = this.tableFactory.create(projects.items); + const table = this.tableFactory.create(pagination.items); - return { table }; + return { table, pagination, currentPage: paginationDto.page }; } } diff --git a/src/Infrastructure/Task/Controller/ListTasksController.ts b/src/Infrastructure/Task/Controller/ListTasksController.ts index 028acfb7..0dea3d11 100644 --- a/src/Infrastructure/Task/Controller/ListTasksController.ts +++ b/src/Infrastructure/Task/Controller/ListTasksController.ts @@ -27,13 +27,13 @@ export class ListTasksController { @Get() @WithName('crm_tasks_list') @Render('pages/tasks/list.njk') - public async get(@Query() pagination: PaginationDTO) { - const tasks: Pagination = await this.queryBus.execute( - new GetTasksQuery(pagination.page) + public async get(@Query() paginationDto: PaginationDTO) { + const pagination: Pagination = await this.queryBus.execute( + new GetTasksQuery(paginationDto.page) ); - const table = this.tableFactory.create(tasks.items); + const table = this.tableFactory.create(pagination.items); - return { table }; + return { table, pagination, currentPage: paginationDto.page }; } } diff --git a/src/assets/styles/components/button.css b/src/assets/styles/components/button.css index 79a3e059..c714374d 100644 --- a/src/assets/styles/components/button.css +++ b/src/assets/styles/components/button.css @@ -38,3 +38,11 @@ display: grid; place-items: center; } + +button.pc-btn:disabled { + cursor: default; +} + +a.pc-btn[aria-current='page'] { + background-color: var(--hover-tint); +} diff --git a/src/assets/styles/utilities/sizing.css b/src/assets/styles/utilities/sizing.css index aca18c75..dcbf01e5 100644 --- a/src/assets/styles/utilities/sizing.css +++ b/src/assets/styles/utilities/sizing.css @@ -1,3 +1,7 @@ .pc-max-w { max-width: var(--max-w); } + +.pc-h-full { + height: 100%; +} diff --git a/src/templates/includes/pagination.njk b/src/templates/includes/pagination.njk new file mode 100644 index 00000000..c2bfc4e1 --- /dev/null +++ b/src/templates/includes/pagination.njk @@ -0,0 +1,69 @@ +{% import 'macros/icons.njk' as icons %} + +{% set start = (currentPage - 1) * pagination.itemsPerPage + 1 %} +{% set previousPage = start + pagination.itemsPerPage - 1 %} +{% if previousPage > pagination.totalItems %} + {% set previousPage = pagination.totalItems %} +{% endif %} + + diff --git a/src/templates/macros/icons.njk b/src/templates/macros/icons.njk index 503bfdbc..5d23b525 100644 --- a/src/templates/macros/icons.njk +++ b/src/templates/macros/icons.njk @@ -88,3 +88,11 @@ {% endmacro %} + +{% macro previous(attr=null) %} + {{ _icon(attr, paths=["M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z"]) }} +{% endmacro %} + +{% macro next(attr=null) %} + {{ _icon(attr, paths=["M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"]) }} +{% endmacro %} diff --git a/src/templates/pages/customers/list.njk b/src/templates/pages/customers/list.njk index 7e83017d..a2283ee4 100644 --- a/src/templates/pages/customers/list.njk +++ b/src/templates/pages/customers/list.njk @@ -16,5 +16,8 @@ {% table table, {caption: 'crm-customers-table-caption'|trans} %} + + {% set paginationUrl = path('crm_customers_list') %} + {% include 'includes/pagination.njk' %} {% endblock main %} diff --git a/src/templates/pages/leave_requests/list.njk b/src/templates/pages/leave_requests/list.njk index 1f3adca5..508a501e 100644 --- a/src/templates/pages/leave_requests/list.njk +++ b/src/templates/pages/leave_requests/list.njk @@ -16,5 +16,8 @@ {% table table %} + + {% set paginationUrl = path('people_leave_requests_list') %} + {% include 'includes/pagination.njk' %} {% endblock main %} diff --git a/src/templates/pages/leaves/list.njk b/src/templates/pages/leaves/list.njk index 9ab286f7..6657df94 100644 --- a/src/templates/pages/leaves/list.njk +++ b/src/templates/pages/leaves/list.njk @@ -30,6 +30,9 @@ {% table table %} + + {% set paginationUrl = path('people_leaves_list') %} + {% include 'includes/pagination.njk' %} diff --git a/src/templates/pages/projects/list.njk b/src/templates/pages/projects/list.njk index 39acf293..a855a81d 100644 --- a/src/templates/pages/projects/list.njk +++ b/src/templates/pages/projects/list.njk @@ -14,5 +14,8 @@ {% table table %} + + {% set paginationUrl = path('crm_projects_list') %} + {% include 'includes/pagination.njk' %} {% endblock main %} diff --git a/src/templates/pages/tasks/list.njk b/src/templates/pages/tasks/list.njk index ce383a46..92adceec 100644 --- a/src/templates/pages/tasks/list.njk +++ b/src/templates/pages/tasks/list.njk @@ -14,5 +14,8 @@ {% table table %} + + {% set paginationUrl = path('crm_tasks_list') %} + {% include 'includes/pagination.njk' %} {% endblock main %} diff --git a/src/translations/fr-FR.ftl b/src/translations/fr-FR.ftl index 6dc5d766..25727ab2 100644 --- a/src/translations/fr-FR.ftl +++ b/src/translations/fr-FR.ftl @@ -28,6 +28,11 @@ header-profile = Mon compte header-dropdown = Voir plus d'actions header-logout = Se déconnecter +pagination = Pagination +pagination-previous = Page précédente +pagination-page = Page {$page} +pagination-next = Page suivante + login-title = Connexion login-email = Adresse email login-password = Mot de passe