ng-firebase-table-kxp 1.2.5 → 1.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/README.md +602 -602
  2. package/esm2020/lib/components/table/table.component.mjs +1557 -1571
  3. package/esm2020/lib/components/table-tabs/table-tabs.component.mjs +129 -129
  4. package/esm2020/lib/components/table-tooltip/table-tooltip.component.mjs +49 -49
  5. package/esm2020/lib/ng-firebase-table-kxp.component.mjs +14 -14
  6. package/esm2020/lib/ng-firebase-table-kxp.module.mjs +102 -102
  7. package/esm2020/lib/ng-firebase-table-kxp.service.mjs +14 -14
  8. package/esm2020/lib/services/filter.service.mjs +416 -416
  9. package/esm2020/lib/services/pagination.service.mjs +115 -115
  10. package/esm2020/lib/services/table.service.mjs +1140 -1140
  11. package/esm2020/lib/services/tooltip.service.mjs +141 -141
  12. package/esm2020/lib/types/Table.mjs +9 -9
  13. package/esm2020/lib/utils/table.utils.mjs +75 -75
  14. package/esm2020/ng-firebase-table-kxp.mjs +4 -4
  15. package/esm2020/public-api.mjs +22 -22
  16. package/fesm2015/ng-firebase-table-kxp.mjs +3960 -3977
  17. package/fesm2015/ng-firebase-table-kxp.mjs.map +1 -1
  18. package/fesm2020/ng-firebase-table-kxp.mjs +3663 -3677
  19. package/fesm2020/ng-firebase-table-kxp.mjs.map +1 -1
  20. package/index.d.ts +5 -5
  21. package/lib/components/table/table.component.d.ts +135 -135
  22. package/lib/components/table-tabs/table-tabs.component.d.ts +34 -34
  23. package/lib/components/table-tooltip/table-tooltip.component.d.ts +18 -18
  24. package/lib/ng-firebase-table-kxp.component.d.ts +5 -5
  25. package/lib/ng-firebase-table-kxp.module.d.ts +24 -24
  26. package/lib/ng-firebase-table-kxp.service.d.ts +6 -6
  27. package/lib/services/filter.service.d.ts +88 -88
  28. package/lib/services/pagination.service.d.ts +34 -34
  29. package/lib/services/table.service.d.ts +80 -80
  30. package/lib/services/tooltip.service.d.ts +73 -73
  31. package/lib/types/Table.d.ts +162 -162
  32. package/lib/utils/table.utils.d.ts +25 -25
  33. package/package.json +1 -1
  34. package/public-api.d.ts +12 -12
@@ -1,115 +1,115 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class PaginationService {
4
- calculateNavigation(event, currentState) {
5
- const previousPageIndex = event.previousPageIndex ?? 0;
6
- const pageIndex = event.pageIndex;
7
- const eventPageSize = event.pageSize;
8
- const totalItems = currentState.totalItems;
9
- const currentComponentPageSize = currentState.pageSize;
10
- let navigationDirection = 'reload';
11
- let resetDocs = false;
12
- let originalPageSize = null;
13
- let shouldNavigate = true;
14
- let newClientPageIndex = pageIndex;
15
- let newPageNumber = currentState.currentPageNumber;
16
- const lastPageIndex = Math.max(0, Math.ceil(totalItems / eventPageSize) - 1);
17
- // Atualizar número da página
18
- if (previousPageIndex !== undefined && pageIndex > previousPageIndex) {
19
- newPageNumber++;
20
- }
21
- else if (previousPageIndex !== undefined &&
22
- pageIndex < previousPageIndex) {
23
- newPageNumber = Math.max(1, newPageNumber - 1);
24
- }
25
- // Mudança de tamanho de página
26
- if (eventPageSize !== currentComponentPageSize) {
27
- navigationDirection = 'forward';
28
- resetDocs = true;
29
- newClientPageIndex = 0;
30
- }
31
- // Indo para primeira página
32
- else if (pageIndex === 0 &&
33
- previousPageIndex !== undefined &&
34
- pageIndex < previousPageIndex) {
35
- navigationDirection = 'forward';
36
- newPageNumber = 1;
37
- newClientPageIndex = 0;
38
- resetDocs = true;
39
- }
40
- // Indo para última página (salto)
41
- else if (pageIndex === lastPageIndex &&
42
- previousPageIndex !== undefined &&
43
- pageIndex > previousPageIndex &&
44
- pageIndex - previousPageIndex > 1) {
45
- navigationDirection = 'backward';
46
- resetDocs = true;
47
- const itemsExpectedInLastPage = totalItems - lastPageIndex * eventPageSize;
48
- if (itemsExpectedInLastPage > 0 &&
49
- itemsExpectedInLastPage < eventPageSize) {
50
- originalPageSize = currentComponentPageSize;
51
- }
52
- }
53
- // Próxima página
54
- else if (previousPageIndex !== undefined && pageIndex > previousPageIndex) {
55
- navigationDirection = 'forward';
56
- resetDocs = false;
57
- }
58
- // Página anterior
59
- else if (previousPageIndex !== undefined && pageIndex < previousPageIndex) {
60
- navigationDirection = 'backward';
61
- resetDocs = false;
62
- }
63
- // Mesma página (reload)
64
- else if (previousPageIndex !== undefined &&
65
- pageIndex === previousPageIndex) {
66
- navigationDirection = 'reload';
67
- resetDocs = false;
68
- }
69
- // Caso inicial (primeira carga)
70
- else if (previousPageIndex === undefined && pageIndex === 0) {
71
- shouldNavigate = false;
72
- }
73
- // Caso não tratado
74
- else {
75
- console.warn('Condição de navegação não tratada:', event);
76
- shouldNavigate = false;
77
- }
78
- return {
79
- direction: navigationDirection,
80
- resetDocs,
81
- originalPageSize,
82
- shouldNavigate,
83
- newClientPageIndex,
84
- newPageNumber,
85
- };
86
- }
87
- /**
88
- * Calcula o número de itens esperados na última página
89
- */
90
- calculateLastPageItemCount(totalItems, pageSize) {
91
- const lastPageIndex = Math.max(0, Math.ceil(totalItems / pageSize) - 1);
92
- return totalItems - lastPageIndex * pageSize;
93
- }
94
- /**
95
- * Calcula o índice da última página
96
- */
97
- calculateLastPageIndex(totalItems, pageSize) {
98
- return Math.max(0, Math.ceil(totalItems / pageSize) - 1);
99
- }
100
- /**
101
- * Verifica se deve mostrar o botão de próxima página
102
- */
103
- shouldShowNextButton(hasNextPage, isPaginated) {
104
- return hasNextPage || !isPaginated;
105
- }
106
- }
107
- PaginationService.ɵfac = function PaginationService_Factory(t) { return new (t || PaginationService)(); };
108
- PaginationService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: PaginationService, factory: PaginationService.ɵfac, providedIn: 'root' });
109
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PaginationService, [{
110
- type: Injectable,
111
- args: [{
112
- providedIn: 'root',
113
- }]
114
- }], null, null); })();
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZmlyZWJhc2UtdGFibGUta3hwL3NyYy9saWIvc2VydmljZXMvcGFnaW5hdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBdUIzQyxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLG1CQUFtQixDQUNqQixLQUFnQixFQUNoQixZQUE2QjtRQUU3QixNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUM7UUFDdkQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNsQyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUM7UUFDM0MsTUFBTSx3QkFBd0IsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDO1FBRXZELElBQUksbUJBQW1CLEdBQXNDLFFBQVEsQ0FBQztRQUN0RSxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxnQkFBZ0IsR0FBa0IsSUFBSSxDQUFDO1FBQzNDLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztRQUNuQyxJQUFJLGFBQWEsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQUM7UUFFbkQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDNUIsQ0FBQyxFQUNELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FDMUMsQ0FBQztRQUVGLDZCQUE2QjtRQUM3QixJQUFJLGlCQUFpQixLQUFLLFNBQVMsSUFBSSxTQUFTLEdBQUcsaUJBQWlCLEVBQUU7WUFDcEUsYUFB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Q0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQixDQUFDLFdBQW9CLEVBQUUsV0FBb0I7UUFDN0QsT0FBTyxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDckMsQ0FBQzs7a0ZBaElVLGlCQUFpQjt1RUFBakIsaUJBQWlCLFdBQWpCLGlCQUFpQixtQkFGaEIsTUFBTTt1RkFFUCxpQkFBaUI7Y0FIN0IsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uU3RhdGUge1xyXG4gIGN1cnJlbnRQYWdlTnVtYmVyOiBudW1iZXI7XHJcbiAgY3VycmVudENsaWVudFBhZ2VJbmRleDogbnVtYmVyO1xyXG4gIHBhZ2VTaXplOiBudW1iZXI7XHJcbiAgdG90YWxJdGVtczogbnVtYmVyO1xyXG4gIGhhc05leHRQYWdlOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE5hdmlnYXRpb25SZXN1bHQge1xyXG4gIGRpcmVjdGlvbjogJ2ZvcndhcmQnIHwgJ2JhY2t3YXJkJyB8ICdyZWxvYWQnO1xyXG4gIHJlc2V0RG9jczogYm9vbGVhbjtcclxuICBvcmlnaW5hbFBhZ2VTaXplOiBudW1iZXIgfCBudWxsO1xyXG4gIHNob3VsZE5hdmlnYXRlOiBib29sZWFuO1xyXG4gIG5ld0NsaWVudFBhZ2VJbmRleDogbnVtYmVyO1xyXG4gIG5ld1BhZ2VOdW1iZXI6IG51bWJlcjtcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFBhZ2luYXRpb25TZXJ2aWNlIHtcclxuICBjYWxjdWxhdGVOYXZpZ2F0aW9uKFxyXG4gICAgZXZlbnQ6IFBhZ2VFdmVudCxcclxuICAgIGN1cnJlbnRTdGF0ZTogUGFnaW5hdGlvblN0YXRlXHJcbiAgKTogTmF2aWdhdGlvblJlc3VsdCB7XHJcbiAgICBjb25zdCBwcmV2aW91c1BhZ2VJbmRleCA9IGV2ZW50LnByZXZpb3VzUGFnZUluZGV4ID8/IDA7XHJcbiAgICBjb25zdCBwYWdlSW5kZXggPSBldmVudC5wYWdlSW5kZXg7XHJcbiAgICBjb25zdCBldmVudFBhZ2VTaXplID0gZXZlbnQucGFnZVNpemU7XHJcbiAgICBjb25zdCB0b3RhbEl0ZW1zID0gY3VycmVudFN0YXRlLnRvdGFsSXRlbXM7XHJcbiAgICBjb25zdCBjdXJyZW50Q29tcG9uZW50UGFnZVNpemUgPSBjdXJyZW50U3RhdGUucGFnZVNpemU7XHJcblxyXG4gICAgbGV0IG5hdmlnYXRpb25EaXJlY3Rpb246ICdmb3J3YXJkJyB8ICdiYWNrd2FyZCcgfCAncmVsb2FkJyA9ICdyZWxvYWQnO1xyXG4gICAgbGV0IHJlc2V0RG9jcyA9IGZhbHNlO1xyXG4gICAgbGV0IG9yaWdpbmFsUGFnZVNpemU6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gICAgbGV0IHNob3VsZE5hdmlnYXRlID0gdHJ1ZTtcclxuICAgIGxldCBuZXdDbGllbnRQYWdlSW5kZXggPSBwYWdlSW5kZXg7XHJcbiAgICBsZXQgbmV3UGFnZU51bWJlciA9IGN1cnJlbnRTdGF0ZS5jdXJyZW50UGFnZU51bWJlcjtcclxuXHJcbiAgICBjb25zdCBsYXN0UGFnZUluZGV4ID0gTWF0aC5tYXgoXHJcbiAgICAgIDAsXHJcbiAgICAgIE1hdGguY2VpbCh0b3RhbEl0ZW1zIC8gZXZlbnRQYWdlU2l6ZSkgLSAxXHJcbiAgICApO1xyXG5cclxuICAgIC8vIEF0dWFsaXphciBuw7ptZXJvIGRhIHDDoWdpbmFcclxuICAgIGlmIChwcmV2aW91c1BhZ2VJbmRleCAhPT0gdW5kZWZpbmVkICYmIHBhZ2VJbmRleCA+IHByZXZpb3VzUGFnZUluZGV4KSB7XHJcbiAgICAgIG5ld1BhZ2VOdW1iZXIrKztcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHByZXZpb3VzUGFnZUluZGV4ICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgcGFnZUluZGV4IDwgcHJldmlvdXNQYWdlSW5kZXhcclxuICAgICkge1xyXG4gICAgICBuZXdQYWdlTnVtYmVyID0gTWF0aC5tYXgoMSwgbmV3UGFnZU51bWJlciAtIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE11ZGFuw6dhIGRlIHRhbWFuaG8gZGUgcMOhZ2luYVxyXG4gICAgaWYgKGV2ZW50UGFnZVNpemUgIT09IGN1cnJlbnRDb21wb25lbnRQYWdlU2l6ZSkge1xyXG4gICAgICBuYXZpZ2F0aW9uRGlyZWN0aW9uID0gJ2ZvcndhcmQnO1xyXG4gICAgICByZXNldERvY3MgPSB0cnVlO1xyXG4gICAgICBuZXdDbGllbnRQYWdlSW5kZXggPSAwO1xyXG4gICAgfVxyXG4gICAgLy8gSW5kbyBwYXJhIHByaW1laXJhIHDDoWdpbmFcclxuICAgIGVsc2UgaWYgKFxyXG4gICAgICBwYWdlSW5kZXggPT09IDAgJiZcclxuICAgICAgcHJldmlvdXNQYWdlSW5kZXggIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICBwYWdlSW5kZXggPCBwcmV2aW91c1BhZ2VJbmRleFxyXG4gICAgKSB7XHJcbiAgICAgIG5hdmlnYXRpb25EaXJlY3Rpb24gPSAnZm9yd2FyZCc7XHJcbiAgICAgIG5ld1BhZ2VOdW1iZXIgPSAxO1xyXG4gICAgICBuZXdDbGllbnRQYWdlSW5kZXggPSAwO1xyXG4gICAgICByZXNldERvY3MgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgLy8gSW5kbyBwYXJhIMO6bHRpbWEgcMOhZ2luYSAoc2FsdG8pXHJcbiAgICBlbHNlIGlmIChcclxuICAgICAgcGFnZUluZGV4ID09PSBsYXN0UGFnZUluZGV4ICYmXHJcbiAgICAgIHByZXZpb3VzUGFnZUluZGV4ICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgcGFnZUluZGV4ID4gcHJldmlvdXNQYWdlSW5kZXggJiZcclxuICAgICAgcGFnZUluZGV4IC0gcHJldmlvdXNQYWdlSW5kZXggPiAxXHJcbiAgICApIHtcclxuICAgICAgbmF2aWdhdGlvbkRpcmVjdGlvbiA9ICdiYWNrd2FyZCc7XHJcbiAgICAgIHJlc2V0RG9jcyA9IHRydWU7XHJcblxyXG4gICAgICBjb25zdCBpdGVtc0V4cGVjdGVkSW5MYXN0UGFnZSA9XHJcbiAgICAgICAgdG90YWxJdGVtcyAtIGxhc3RQYWdlSW5kZXggKiBldmVudFBhZ2VTaXplO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIGl0ZW1zRXhwZWN0ZWRJbkxhc3RQYWdlID4gMCAmJlxyXG4gICAgICAgIGl0ZW1zRXhwZWN0ZWRJbkxhc3RQYWdlIDwgZXZlbnRQYWdlU2l6ZVxyXG4gICAgICApIHtcclxuICAgICAgICBvcmlnaW5hbFBhZ2VTaXplID0gY3VycmVudENvbXBvbmVudFBhZ2VTaXplO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBQcsOzeGltYSBww6FnaW5hXHJcbiAgICBlbHNlIGlmIChwcmV2aW91c1BhZ2VJbmRleCAhPT0gdW5kZWZpbmVkICYmIHBhZ2VJbmRleCA+IHByZXZpb3VzUGFnZUluZGV4KSB7XHJcbiAgICAgIG5hdmlnYXRpb25EaXJlY3Rpb24gPSAnZm9yd2FyZCc7XHJcbiAgICAgIHJlc2V0RG9jcyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gUMOhZ2luYSBhbnRlcmlvclxyXG4gICAgZWxzZSBpZiAocHJldmlvdXNQYWdlSW5kZXggIT09IHVuZGVmaW5lZCAmJiBwYWdlSW5kZXggPCBwcmV2aW91c1BhZ2VJbmRleCkge1xyXG4gICAgICBuYXZpZ2F0aW9uRGlyZWN0aW9uID0gJ2JhY2t3YXJkJztcclxuICAgICAgcmVzZXREb2NzID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBNZXNtYSBww6FnaW5hIChyZWxvYWQpXHJcbiAgICBlbHNlIGlmIChcclxuICAgICAgcHJldmlvdXNQYWdlSW5kZXggIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICBwYWdlSW5kZXggPT09IHByZXZpb3VzUGFnZUluZGV4XHJcbiAgICApIHtcclxuICAgICAgbmF2aWdhdGlvbkRpcmVjdGlvbiA9ICdyZWxvYWQnO1xyXG4gICAgICByZXNldERvY3MgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENhc28gaW5pY2lhbCAocHJpbWVpcmEgY2FyZ2EpXHJcbiAgICBlbHNlIGlmIChwcmV2aW91c1BhZ2VJbmRleCA9PT0gdW5kZWZpbmVkICYmIHBhZ2VJbmRleCA9PT0gMCkge1xyXG4gICAgICBzaG91bGROYXZpZ2F0ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2FzbyBuw6NvIHRyYXRhZG9cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0NvbmRpw6fDo28gZGUgbmF2ZWdhw6fDo28gbsOjbyB0cmF0YWRhOicsIGV2ZW50KTtcclxuICAgICAgc2hvdWxkTmF2aWdhdGUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBkaXJlY3Rpb246IG5hdmlnYXRpb25EaXJlY3Rpb24sXHJcbiAgICAgIHJlc2V0RG9jcyxcclxuICAgICAgb3JpZ2luYWxQYWdlU2l6ZSxcclxuICAgICAgc2hvdWxkTmF2aWdhdGUsXHJcbiAgICAgIG5ld0NsaWVudFBhZ2VJbmRleCxcclxuICAgICAgbmV3UGFnZU51bWJlcixcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxjdWxhIG8gbsO6bWVybyBkZSBpdGVucyBlc3BlcmFkb3MgbmEgw7psdGltYSBww6FnaW5hXHJcbiAgICovXHJcbiAgY2FsY3VsYXRlTGFzdFBhZ2VJdGVtQ291bnQodG90YWxJdGVtczogbnVtYmVyLCBwYWdlU2l6ZTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGxhc3RQYWdlSW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLmNlaWwodG90YWxJdGVtcyAvIHBhZ2VTaXplKSAtIDEpO1xyXG4gICAgcmV0dXJuIHRvdGFsSXRlbXMgLSBsYXN0UGFnZUluZGV4ICogcGFnZVNpemU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxjdWxhIG8gw61uZGljZSBkYSDDumx0aW1hIHDDoWdpbmFcclxuICAgKi9cclxuICBjYWxjdWxhdGVMYXN0UGFnZUluZGV4KHRvdGFsSXRlbXM6IG51bWJlciwgcGFnZVNpemU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKHRvdGFsSXRlbXMgLyBwYWdlU2l6ZSkgLSAxKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZlcmlmaWNhIHNlIGRldmUgbW9zdHJhciBvIGJvdMOjbyBkZSBwcsOzeGltYSBww6FnaW5hXHJcbiAgICovXHJcbiAgc2hvdWxkU2hvd05leHRCdXR0b24oaGFzTmV4dFBhZ2U6IGJvb2xlYW4sIGlzUGFnaW5hdGVkOiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gaGFzTmV4dFBhZ2UgfHwgIWlzUGFnaW5hdGVkO1xyXG4gIH1cclxufVxyXG4iXX0=
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class PaginationService {
4
+ calculateNavigation(event, currentState) {
5
+ const previousPageIndex = event.previousPageIndex ?? 0;
6
+ const pageIndex = event.pageIndex;
7
+ const eventPageSize = event.pageSize;
8
+ const totalItems = currentState.totalItems;
9
+ const currentComponentPageSize = currentState.pageSize;
10
+ let navigationDirection = 'reload';
11
+ let resetDocs = false;
12
+ let originalPageSize = null;
13
+ let shouldNavigate = true;
14
+ let newClientPageIndex = pageIndex;
15
+ let newPageNumber = currentState.currentPageNumber;
16
+ const lastPageIndex = Math.max(0, Math.ceil(totalItems / eventPageSize) - 1);
17
+ // Atualizar número da página
18
+ if (previousPageIndex !== undefined && pageIndex > previousPageIndex) {
19
+ newPageNumber++;
20
+ }
21
+ else if (previousPageIndex !== undefined &&
22
+ pageIndex < previousPageIndex) {
23
+ newPageNumber = Math.max(1, newPageNumber - 1);
24
+ }
25
+ // Mudança de tamanho de página
26
+ if (eventPageSize !== currentComponentPageSize) {
27
+ navigationDirection = 'forward';
28
+ resetDocs = true;
29
+ newClientPageIndex = 0;
30
+ }
31
+ // Indo para primeira página
32
+ else if (pageIndex === 0 &&
33
+ previousPageIndex !== undefined &&
34
+ pageIndex < previousPageIndex) {
35
+ navigationDirection = 'forward';
36
+ newPageNumber = 1;
37
+ newClientPageIndex = 0;
38
+ resetDocs = true;
39
+ }
40
+ // Indo para última página (salto)
41
+ else if (pageIndex === lastPageIndex &&
42
+ previousPageIndex !== undefined &&
43
+ pageIndex > previousPageIndex &&
44
+ pageIndex - previousPageIndex > 1) {
45
+ navigationDirection = 'backward';
46
+ resetDocs = true;
47
+ const itemsExpectedInLastPage = totalItems - lastPageIndex * eventPageSize;
48
+ if (itemsExpectedInLastPage > 0 &&
49
+ itemsExpectedInLastPage < eventPageSize) {
50
+ originalPageSize = currentComponentPageSize;
51
+ }
52
+ }
53
+ // Próxima página
54
+ else if (previousPageIndex !== undefined && pageIndex > previousPageIndex) {
55
+ navigationDirection = 'forward';
56
+ resetDocs = false;
57
+ }
58
+ // Página anterior
59
+ else if (previousPageIndex !== undefined && pageIndex < previousPageIndex) {
60
+ navigationDirection = 'backward';
61
+ resetDocs = false;
62
+ }
63
+ // Mesma página (reload)
64
+ else if (previousPageIndex !== undefined &&
65
+ pageIndex === previousPageIndex) {
66
+ navigationDirection = 'reload';
67
+ resetDocs = false;
68
+ }
69
+ // Caso inicial (primeira carga)
70
+ else if (previousPageIndex === undefined && pageIndex === 0) {
71
+ shouldNavigate = false;
72
+ }
73
+ // Caso não tratado
74
+ else {
75
+ console.warn('Condição de navegação não tratada:', event);
76
+ shouldNavigate = false;
77
+ }
78
+ return {
79
+ direction: navigationDirection,
80
+ resetDocs,
81
+ originalPageSize,
82
+ shouldNavigate,
83
+ newClientPageIndex,
84
+ newPageNumber,
85
+ };
86
+ }
87
+ /**
88
+ * Calcula o número de itens esperados na última página
89
+ */
90
+ calculateLastPageItemCount(totalItems, pageSize) {
91
+ const lastPageIndex = Math.max(0, Math.ceil(totalItems / pageSize) - 1);
92
+ return totalItems - lastPageIndex * pageSize;
93
+ }
94
+ /**
95
+ * Calcula o índice da última página
96
+ */
97
+ calculateLastPageIndex(totalItems, pageSize) {
98
+ return Math.max(0, Math.ceil(totalItems / pageSize) - 1);
99
+ }
100
+ /**
101
+ * Verifica se deve mostrar o botão de próxima página
102
+ */
103
+ shouldShowNextButton(hasNextPage, isPaginated) {
104
+ return hasNextPage || !isPaginated;
105
+ }
106
+ }
107
+ PaginationService.ɵfac = function PaginationService_Factory(t) { return new (t || PaginationService)(); };
108
+ PaginationService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: PaginationService, factory: PaginationService.ɵfac, providedIn: 'root' });
109
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PaginationService, [{
110
+ type: Injectable,
111
+ args: [{
112
+ providedIn: 'root',
113
+ }]
114
+ }], null, null); })();
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZmlyZWJhc2UtdGFibGUta3hwL3NyYy9saWIvc2VydmljZXMvcGFnaW5hdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBdUIzQyxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLG1CQUFtQixDQUNqQixLQUFnQixFQUNoQixZQUE2QjtRQUU3QixNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUM7UUFDdkQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNsQyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUM7UUFDM0MsTUFBTSx3QkFBd0IsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDO1FBRXZELElBQUksbUJBQW1CLEdBQXNDLFFBQVEsQ0FBQztRQUN0RSxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxnQkFBZ0IsR0FBa0IsSUFBSSxDQUFDO1FBQzNDLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztRQUNuQyxJQUFJLGFBQWEsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQUM7UUFFbkQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDNUIsQ0FBQyxFQUNELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FDMUMsQ0FBQztRQUVGLDZCQUE2QjtRQUM3QixJQUFJLGlCQUFpQixLQUFLLFNBQVMsSUFBSSxTQUFTLEdBQUcsaUJBQWlCLEVBQUU7WUFDcEUsYUFB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Q0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQixDQUFDLFdBQW9CLEVBQUUsV0FBb0I7UUFDN0QsT0FBTyxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDckMsQ0FBQzs7a0ZBaElVLGlCQUFpQjt1RUFBakIsaUJBQWlCLFdBQWpCLGlCQUFpQixtQkFGaEIsTUFBTTt1RkFFUCxpQkFBaUI7Y0FIN0IsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uU3RhdGUge1xuICBjdXJyZW50UGFnZU51bWJlcjogbnVtYmVyO1xuICBjdXJyZW50Q2xpZW50UGFnZUluZGV4OiBudW1iZXI7XG4gIHBhZ2VTaXplOiBudW1iZXI7XG4gIHRvdGFsSXRlbXM6IG51bWJlcjtcbiAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmF2aWdhdGlvblJlc3VsdCB7XG4gIGRpcmVjdGlvbjogJ2ZvcndhcmQnIHwgJ2JhY2t3YXJkJyB8ICdyZWxvYWQnO1xuICByZXNldERvY3M6IGJvb2xlYW47XG4gIG9yaWdpbmFsUGFnZVNpemU6IG51bWJlciB8IG51bGw7XG4gIHNob3VsZE5hdmlnYXRlOiBib29sZWFuO1xuICBuZXdDbGllbnRQYWdlSW5kZXg6IG51bWJlcjtcbiAgbmV3UGFnZU51bWJlcjogbnVtYmVyO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvblNlcnZpY2Uge1xuICBjYWxjdWxhdGVOYXZpZ2F0aW9uKFxuICAgIGV2ZW50OiBQYWdlRXZlbnQsXG4gICAgY3VycmVudFN0YXRlOiBQYWdpbmF0aW9uU3RhdGVcbiAgKTogTmF2aWdhdGlvblJlc3VsdCB7XG4gICAgY29uc3QgcHJldmlvdXNQYWdlSW5kZXggPSBldmVudC5wcmV2aW91c1BhZ2VJbmRleCA/PyAwO1xuICAgIGNvbnN0IHBhZ2VJbmRleCA9IGV2ZW50LnBhZ2VJbmRleDtcbiAgICBjb25zdCBldmVudFBhZ2VTaXplID0gZXZlbnQucGFnZVNpemU7XG4gICAgY29uc3QgdG90YWxJdGVtcyA9IGN1cnJlbnRTdGF0ZS50b3RhbEl0ZW1zO1xuICAgIGNvbnN0IGN1cnJlbnRDb21wb25lbnRQYWdlU2l6ZSA9IGN1cnJlbnRTdGF0ZS5wYWdlU2l6ZTtcblxuICAgIGxldCBuYXZpZ2F0aW9uRGlyZWN0aW9uOiAnZm9yd2FyZCcgfCAnYmFja3dhcmQnIHwgJ3JlbG9hZCcgPSAncmVsb2FkJztcbiAgICBsZXQgcmVzZXREb2NzID0gZmFsc2U7XG4gICAgbGV0IG9yaWdpbmFsUGFnZVNpemU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIGxldCBzaG91bGROYXZpZ2F0ZSA9IHRydWU7XG4gICAgbGV0IG5ld0NsaWVudFBhZ2VJbmRleCA9IHBhZ2VJbmRleDtcbiAgICBsZXQgbmV3UGFnZU51bWJlciA9IGN1cnJlbnRTdGF0ZS5jdXJyZW50UGFnZU51bWJlcjtcblxuICAgIGNvbnN0IGxhc3RQYWdlSW5kZXggPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLmNlaWwodG90YWxJdGVtcyAvIGV2ZW50UGFnZVNpemUpIC0gMVxuICAgICk7XG5cbiAgICAvLyBBdHVhbGl6YXIgbsO6bWVybyBkYSBww6FnaW5hXG4gICAgaWYgKHByZXZpb3VzUGFnZUluZGV4ICE9PSB1bmRlZmluZWQgJiYgcGFnZUluZGV4ID4gcHJldmlvdXNQYWdlSW5kZXgpIHtcbiAgICAgIG5ld1BhZ2VOdW1iZXIrKztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgcHJldmlvdXNQYWdlSW5kZXggIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcGFnZUluZGV4IDwgcHJldmlvdXNQYWdlSW5kZXhcbiAgICApIHtcbiAgICAgIG5ld1BhZ2VOdW1iZXIgPSBNYXRoLm1heCgxLCBuZXdQYWdlTnVtYmVyIC0gMSk7XG4gICAgfVxuXG4gICAgLy8gTXVkYW7Dp2EgZGUgdGFtYW5obyBkZSBww6FnaW5hXG4gICAgaWYgKGV2ZW50UGFnZVNpemUgIT09IGN1cnJlbnRDb21wb25lbnRQYWdlU2l6ZSkge1xuICAgICAgbmF2aWdhdGlvbkRpcmVjdGlvbiA9ICdmb3J3YXJkJztcbiAgICAgIHJlc2V0RG9jcyA9IHRydWU7XG4gICAgICBuZXdDbGllbnRQYWdlSW5kZXggPSAwO1xuICAgIH1cbiAgICAvLyBJbmRvIHBhcmEgcHJpbWVpcmEgcMOhZ2luYVxuICAgIGVsc2UgaWYgKFxuICAgICAgcGFnZUluZGV4ID09PSAwICYmXG4gICAgICBwcmV2aW91c1BhZ2VJbmRleCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBwYWdlSW5kZXggPCBwcmV2aW91c1BhZ2VJbmRleFxuICAgICkge1xuICAgICAgbmF2aWdhdGlvbkRpcmVjdGlvbiA9ICdmb3J3YXJkJztcbiAgICAgIG5ld1BhZ2VOdW1iZXIgPSAxO1xuICAgICAgbmV3Q2xpZW50UGFnZUluZGV4ID0gMDtcbiAgICAgIHJlc2V0RG9jcyA9IHRydWU7XG4gICAgfVxuICAgIC8vIEluZG8gcGFyYSDDumx0aW1hIHDDoWdpbmEgKHNhbHRvKVxuICAgIGVsc2UgaWYgKFxuICAgICAgcGFnZUluZGV4ID09PSBsYXN0UGFnZUluZGV4ICYmXG4gICAgICBwcmV2aW91c1BhZ2VJbmRleCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBwYWdlSW5kZXggPiBwcmV2aW91c1BhZ2VJbmRleCAmJlxuICAgICAgcGFnZUluZGV4IC0gcHJldmlvdXNQYWdlSW5kZXggPiAxXG4gICAgKSB7XG4gICAgICBuYXZpZ2F0aW9uRGlyZWN0aW9uID0gJ2JhY2t3YXJkJztcbiAgICAgIHJlc2V0RG9jcyA9IHRydWU7XG5cbiAgICAgIGNvbnN0IGl0ZW1zRXhwZWN0ZWRJbkxhc3RQYWdlID1cbiAgICAgICAgdG90YWxJdGVtcyAtIGxhc3RQYWdlSW5kZXggKiBldmVudFBhZ2VTaXplO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW1zRXhwZWN0ZWRJbkxhc3RQYWdlID4gMCAmJlxuICAgICAgICBpdGVtc0V4cGVjdGVkSW5MYXN0UGFnZSA8IGV2ZW50UGFnZVNpemVcbiAgICAgICkge1xuICAgICAgICBvcmlnaW5hbFBhZ2VTaXplID0gY3VycmVudENvbXBvbmVudFBhZ2VTaXplO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBQcsOzeGltYSBww6FnaW5hXG4gICAgZWxzZSBpZiAocHJldmlvdXNQYWdlSW5kZXggIT09IHVuZGVmaW5lZCAmJiBwYWdlSW5kZXggPiBwcmV2aW91c1BhZ2VJbmRleCkge1xuICAgICAgbmF2aWdhdGlvbkRpcmVjdGlvbiA9ICdmb3J3YXJkJztcbiAgICAgIHJlc2V0RG9jcyA9IGZhbHNlO1xuICAgIH1cbiAgICAvLyBQw6FnaW5hIGFudGVyaW9yXG4gICAgZWxzZSBpZiAocHJldmlvdXNQYWdlSW5kZXggIT09IHVuZGVmaW5lZCAmJiBwYWdlSW5kZXggPCBwcmV2aW91c1BhZ2VJbmRleCkge1xuICAgICAgbmF2aWdhdGlvbkRpcmVjdGlvbiA9ICdiYWNrd2FyZCc7XG4gICAgICByZXNldERvY3MgPSBmYWxzZTtcbiAgICB9XG4gICAgLy8gTWVzbWEgcMOhZ2luYSAocmVsb2FkKVxuICAgIGVsc2UgaWYgKFxuICAgICAgcHJldmlvdXNQYWdlSW5kZXggIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcGFnZUluZGV4ID09PSBwcmV2aW91c1BhZ2VJbmRleFxuICAgICkge1xuICAgICAgbmF2aWdhdGlvbkRpcmVjdGlvbiA9ICdyZWxvYWQnO1xuICAgICAgcmVzZXREb2NzID0gZmFsc2U7XG4gICAgfVxuICAgIC8vIENhc28gaW5pY2lhbCAocHJpbWVpcmEgY2FyZ2EpXG4gICAgZWxzZSBpZiAocHJldmlvdXNQYWdlSW5kZXggPT09IHVuZGVmaW5lZCAmJiBwYWdlSW5kZXggPT09IDApIHtcbiAgICAgIHNob3VsZE5hdmlnYXRlID0gZmFsc2U7XG4gICAgfVxuICAgIC8vIENhc28gbsOjbyB0cmF0YWRvXG4gICAgZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0NvbmRpw6fDo28gZGUgbmF2ZWdhw6fDo28gbsOjbyB0cmF0YWRhOicsIGV2ZW50KTtcbiAgICAgIHNob3VsZE5hdmlnYXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRpcmVjdGlvbjogbmF2aWdhdGlvbkRpcmVjdGlvbixcbiAgICAgIHJlc2V0RG9jcyxcbiAgICAgIG9yaWdpbmFsUGFnZVNpemUsXG4gICAgICBzaG91bGROYXZpZ2F0ZSxcbiAgICAgIG5ld0NsaWVudFBhZ2VJbmRleCxcbiAgICAgIG5ld1BhZ2VOdW1iZXIsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhIG8gbsO6bWVybyBkZSBpdGVucyBlc3BlcmFkb3MgbmEgw7psdGltYSBww6FnaW5hXG4gICAqL1xuICBjYWxjdWxhdGVMYXN0UGFnZUl0ZW1Db3VudCh0b3RhbEl0ZW1zOiBudW1iZXIsIHBhZ2VTaXplOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGxhc3RQYWdlSW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLmNlaWwodG90YWxJdGVtcyAvIHBhZ2VTaXplKSAtIDEpO1xuICAgIHJldHVybiB0b3RhbEl0ZW1zIC0gbGFzdFBhZ2VJbmRleCAqIHBhZ2VTaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGEgbyDDrW5kaWNlIGRhIMO6bHRpbWEgcMOhZ2luYVxuICAgKi9cbiAgY2FsY3VsYXRlTGFzdFBhZ2VJbmRleCh0b3RhbEl0ZW1zOiBudW1iZXIsIHBhZ2VTaXplOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLmNlaWwodG90YWxJdGVtcyAvIHBhZ2VTaXplKSAtIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNlIGRldmUgbW9zdHJhciBvIGJvdMOjbyBkZSBwcsOzeGltYSBww6FnaW5hXG4gICAqL1xuICBzaG91bGRTaG93TmV4dEJ1dHRvbihoYXNOZXh0UGFnZTogYm9vbGVhbiwgaXNQYWdpbmF0ZWQ6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gaGFzTmV4dFBhZ2UgfHwgIWlzUGFnaW5hdGVkO1xuICB9XG59XG4iXX0=