@libs-ui/components-pagination 0.2.356-42 → 0.2.356-43

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.
package/README.md CHANGED
@@ -1,33 +1,35 @@
1
1
  # @libs-ui/components-pagination
2
2
 
3
- > Component phân trang (Pagination) mạnh mẽ, hỗ trợ điều hướng nhanh, nhảy trang và hiển thị linh hoạt.
3
+ > Component phân trang Angular standalone, hỗ trợ two-way binding, nhảy trang nhanh debounce input.
4
4
 
5
5
  ## Giới thiệu
6
6
 
7
- `LibsUiComponentsPaginationComponent` là một standalone Angular component giúp chia nhỏ dữ liệu thành các trang, cung cấp trải nghiệm điều hướng mượt cho các bảng dữ liệu hoặc danh sách lớn.
7
+ `LibsUiComponentsPaginationComponent` là standalone Angular component giúp chia nhỏ dữ liệu thành các trang cung cấp trải nghiệm điều hướng mượt mà. Component hỗ trợ two-way binding qua `model()`, tự động tính toán cửa sổ trang hiển thị theo trang hiện tại, và tích hợp ô nhập nhảy trang với debounce 1500ms. Phù hợp dùng với mọi bảng dữ liệu hoặc danh sách lớn cần phân trang phía client hoặc server-side.
8
8
 
9
- ### Tính năng
9
+ ## Tính năng
10
10
 
11
- - ✅ **Hiển thị linh hoạt**: Hỗ trợ hiển thị tổng số trang ô nhập nhảy trang (Go to page).
12
- - ✅ **Layout tùy biến**: Vùng thông tin bổ trợ thể đặt 4 hướng (Top, Bottom, Left, Right).
13
- - ✅ **Debounced Input**: Tránh việc nhảy trang liên tục khi người dùng đang nhập số trang thủ công.
14
- - ✅ **Auto-Recalculation**: Tự động tính toán lại danh sách trang hiển thị khi số lượng item hoặc trang hiện tại thay đổi.
15
- - ✅ **Angular Signals**: Sử dụng hoàn toàn Signals để quản trạng thái hiệu quả.
11
+ - ✅ **Two-way binding** qua `[(currentPage)]` đồng bộ trang hiện tại hai chiều
12
+ - ✅ **Hiển thị tổng trang** tùy chọn `[showTotalPage]` hiển thị nhãn "X trang"
13
+ - ✅ **Nhảy trang nhanh** ô input "Go to page" với debounce 1500ms, nhấn Enter nhảy ngay
14
+ - ✅ **Bố cục linh hoạt** vùng tổng trang & nhảy trang đặt được top / bottom / left / right
15
+ - ✅ **Sliding window** danh sách số trang hiển thị trượt theo trang hiện tại, tự điều chỉnh số lượng
16
+ - ✅ **Boundary protection** — tự kéo `currentPage` về trang cuối khi dữ liệu thay đổi làm số trang giảm
17
+ - ✅ **Disable state** — vô hiệu hóa toàn bộ điều hướng qua `[disable]`
18
+ - ✅ **Custom class** — tùy chỉnh class cho container, từng nút trang và vùng thông tin phụ
19
+ - ✅ **Angular Signals + OnPush** — hiệu năng cao, không re-render thừa
20
+ - ✅ **firstPageStartNumber** — hỗ trợ quy ước trang bắt đầu từ 0 hoặc 1
16
21
 
17
22
  ## Khi nào sử dụng
18
23
 
19
- - Khi hiển thị danh sách dữ liệu lớn (Table, Grid, List) cần phân chia theo trang.
20
- - Khi cần cung cấp cho người dùng khả năng nhảy nhanh đến một trang cụ thể bằng cách nhập số.
21
- - Phù hợp cho cả ứng dụng desktop web dashboard.
24
+ - Khi danh sách hoặc bảng dữ liệu lớn cần chia thành nhiều trang để tối ưu hiệu suất
25
+ - Khi cần cung cấp điều hướng ràng (Previous / Next / số trang) cho người dùng
26
+ - Khi người dùng cần nhảy nhanh đến một trang cụ thể bằng cách nhập số trang
27
+ - Khi cần tích hợp phân trang server-side (gọi API mới mỗi khi `outPageSelect` emit)
22
28
 
23
29
  ## Cài đặt
24
30
 
25
31
  ```bash
26
- # npm
27
32
  npm install @libs-ui/components-pagination
28
-
29
- # yarn
30
- yarn add @libs-ui/components-pagination
31
33
  ```
32
34
 
33
35
  ## Import
@@ -43,83 +45,284 @@ import { LibsUiComponentsPaginationComponent } from '@libs-ui/components-paginat
43
45
  export class YourComponent {}
44
46
  ```
45
47
 
46
- ## dụ
48
+ ### Types & Interfaces
49
+
50
+ ```typescript
51
+ import {
52
+ IPaginationConfig,
53
+ IPaginationFunctionsControl,
54
+ } from '@libs-ui/components-pagination';
55
+ ```
56
+
57
+ ## Ví dụ sử dụng
47
58
 
48
- ### Basic
59
+ ### 1. Phân trang cơ bản
60
+
61
+ ```typescript
62
+ // your.component.ts
63
+ import { Component, signal } from '@angular/core';
64
+ import { LibsUiComponentsPaginationComponent } from '@libs-ui/components-pagination';
65
+
66
+ @Component({
67
+ selector: 'app-your',
68
+ standalone: true,
69
+ imports: [LibsUiComponentsPaginationComponent],
70
+ templateUrl: './your.component.html',
71
+ })
72
+ export class YourComponent {
73
+ protected currentPage = signal<number>(1);
74
+
75
+ protected handlerPageSelect(page: number): void {
76
+ event?.stopPropagation?.();
77
+ console.log('Chuyển sang trang:', page);
78
+ // Gọi API để load dữ liệu trang mới
79
+ }
80
+ }
81
+ ```
49
82
 
50
83
  ```html
84
+ <!-- your.component.html -->
51
85
  <libs_ui-components-pagination
52
86
  [totalItems]="100"
53
87
  [perPage]="10"
54
88
  [(currentPage)]="currentPage"
55
- (outPageSelect)="onPageChange($event)" />
89
+ (outPageSelect)="handlerPageSelect($event)" />
56
90
  ```
57
91
 
58
- ### Advanced (Show goto & total)
92
+ ### 2. Hiển thị tổng trang và nhảy trang nhanh (bên phải)
93
+
94
+ ```typescript
95
+ // your.component.ts
96
+ import { Component, signal } from '@angular/core';
97
+ import { LibsUiComponentsPaginationComponent } from '@libs-ui/components-pagination';
98
+
99
+ @Component({
100
+ selector: 'app-your',
101
+ standalone: true,
102
+ imports: [LibsUiComponentsPaginationComponent],
103
+ templateUrl: './your.component.html',
104
+ })
105
+ export class YourComponent {
106
+ protected currentPage = signal<number>(1);
107
+ protected totalItems = signal<number>(500);
108
+
109
+ protected handlerPageSelect(page: number): void {
110
+ event?.stopPropagation?.();
111
+ // Load dữ liệu trang mới từ API
112
+ }
113
+ }
114
+ ```
59
115
 
60
116
  ```html
117
+ <!-- your.component.html -->
61
118
  <libs_ui-components-pagination
62
- [totalItems]="500"
119
+ [totalItems]="totalItems()"
63
120
  [perPage]="20"
64
121
  [(currentPage)]="currentPage"
65
122
  [showTotalPage]="true"
66
123
  [showInputGotoPage]="true"
67
- [modeDisplayTotalPageAndGotoPage]="'right'" />
124
+ [modeDisplayTotalPageAndGotoPage]="'right'"
125
+ (outPageSelect)="handlerPageSelect($event)" />
126
+ ```
127
+
128
+ ### 3. Trang bắt đầu từ 0 (zero-based) với vùng thông tin phụ ở trên
129
+
130
+ ```typescript
131
+ // your.component.ts
132
+ import { Component, signal } from '@angular/core';
133
+ import { LibsUiComponentsPaginationComponent } from '@libs-ui/components-pagination';
134
+
135
+ @Component({
136
+ selector: 'app-your',
137
+ standalone: true,
138
+ imports: [LibsUiComponentsPaginationComponent],
139
+ templateUrl: './your.component.html',
140
+ })
141
+ export class YourComponent {
142
+ protected currentPage = signal<number>(0);
143
+
144
+ protected handlerPageSelect(page: number): void {
145
+ event?.stopPropagation?.();
146
+ // page = 0, 1, 2, ... (zero-based)
147
+ }
148
+ }
149
+ ```
150
+
151
+ ```html
152
+ <!-- your.component.html -->
153
+ <libs_ui-components-pagination
154
+ [totalItems]="200"
155
+ [perPage]="10"
156
+ [(currentPage)]="currentPage"
157
+ [firstPageStartNumber]="0"
158
+ [showTotalPage]="true"
159
+ [showInputGotoPage]="true"
160
+ [modeDisplayTotalPageAndGotoPage]="'top'"
161
+ (outPageSelect)="handlerPageSelect($event)" />
68
162
  ```
69
163
 
70
- ## API
164
+ ### 4. Disabled state
71
165
 
72
- ### libs_ui-components-pagination
166
+ ```html
167
+ <libs_ui-components-pagination
168
+ [totalItems]="100"
169
+ [perPage]="10"
170
+ [(currentPage)]="currentPage"
171
+ [disable]="isLoading()" />
172
+ ```
173
+
174
+ ### 5. Tùy chỉnh class container và nút trang
175
+
176
+ ```html
177
+ <libs_ui-components-pagination
178
+ [totalItems]="100"
179
+ [perPage]="10"
180
+ [(currentPage)]="currentPage"
181
+ [numberPageDisplay]="7"
182
+ classIncludeContainer="mt-4"
183
+ classIncludeItem="w-[36px] h-[36px]"
184
+ [showTotalPage]="true"
185
+ classDisplayTotalPageAndGotoPage="gap-2"
186
+ (outPageSelect)="handlerPageSelect($event)" />
187
+ ```
188
+
189
+ ### 6. Dùng FunctionsControl qua ViewChild
190
+
191
+ ```typescript
192
+ // parent.component.ts
193
+ import { Component, viewChild } from '@angular/core';
194
+ import {
195
+ LibsUiComponentsPaginationComponent,
196
+ IPaginationFunctionsControl,
197
+ } from '@libs-ui/components-pagination';
198
+
199
+ @Component({
200
+ selector: 'app-parent',
201
+ standalone: true,
202
+ imports: [LibsUiComponentsPaginationComponent],
203
+ template: `
204
+ <libs_ui-components-pagination
205
+ #paginationRef
206
+ [totalItems]="totalItems()"
207
+ [perPage]="20"
208
+ [(currentPage)]="currentPage" />
209
+ <button (click)="handlerResetPage()">Reset trang</button>
210
+ `,
211
+ })
212
+ export class ParentComponent {
213
+ private readonly paginationRef = viewChild<LibsUiComponentsPaginationComponent>('paginationRef');
214
+ protected currentPage = signal<number>(1);
215
+ protected totalItems = signal<number>(200);
216
+
217
+ protected handlerResetPage(): void {
218
+ event?.stopPropagation?.();
219
+ this.paginationRef()?.FunctionsControl.changePage(1);
220
+ }
221
+ }
222
+ ```
223
+
224
+ ## @Input()
225
+
226
+ | Input | Type | Default | Mô tả | Ví dụ |
227
+ |---|---|---|---|---|
228
+ | `[totalItems]` | `number` | **Bắt buộc** | Tổng số bản ghi cần phân trang | `[totalItems]="500"` |
229
+ | `[perPage]` | `number` | **Bắt buộc** | Số bản ghi hiển thị trên mỗi trang | `[perPage]="20"` |
230
+ | `[(currentPage)]` | `number` | **Bắt buộc** | Trang hiện tại — two-way binding qua `model()` | `[(currentPage)]="currentPage"` |
231
+ | `[numberPageDisplay]` | `number` | `5` | Số lượng nút số trang tối đa hiển thị trên thanh điều hướng | `[numberPageDisplay]="7"` |
232
+ | `[showTotalPage]` | `boolean` | `undefined` | Hiển thị nhãn tổng số trang (vd: "10 trang") | `[showTotalPage]="true"` |
233
+ | `[showInputGotoPage]` | `boolean` | `undefined` | Hiển thị ô input để nhảy nhanh đến trang bất kỳ | `[showInputGotoPage]="true"` |
234
+ | `[modeDisplayTotalPageAndGotoPage]` | `'top' \| 'bottom' \| 'left' \| 'right'` | `'bottom'` | Vị trí hiển thị vùng tổng trang và nhảy trang so với thanh số trang | `[modeDisplayTotalPageAndGotoPage]="'right'"` |
235
+ | `[classDisplayTotalPageAndGotoPage]` | `string` | `undefined` | Class CSS tùy chỉnh cho vùng chứa thông tin tổng trang và nhảy trang | `classDisplayTotalPageAndGotoPage="gap-4"` |
236
+ | `[classIncludeContainer]` | `string` | `undefined` | Class CSS tùy chỉnh cho wrapper ngoài cùng của component | `classIncludeContainer="mt-4 justify-end"` |
237
+ | `[classIncludeItem]` | `string` | `undefined` | Class CSS tùy chỉnh cho từng nút số trang | `classIncludeItem="w-[40px] h-[40px]"` |
238
+ | `[disable]` | `boolean` | `undefined` | Vô hiệu hóa toàn bộ điều hướng (click, nhập số trang) | `[disable]="isLoading()"` |
239
+ | `[firstPageStartNumber]` | `0 \| 1` | `1` | Quy ước số trang bắt đầu: `1` = one-based (mặc định), `0` = zero-based | `[firstPageStartNumber]="0"` |
240
+
241
+ ## @Output()
242
+
243
+ | Output | Type | Mô tả | Handler TS | Binding HTML |
244
+ |---|---|---|---|---|
245
+ | `(outPageSelect)` | `number` | Emit số trang mới mỗi khi người dùng chuyển trang (click số trang, Previous, Next, hoặc Go to page) | `handlerPageSelect(page: number): void { event?.stopPropagation?.(); /* gọi API */ }` | `(outPageSelect)="handlerPageSelect($event)"` |
246
+
247
+ ## FunctionsControl (ViewChild API)
248
+
249
+ Truy cập qua `viewChild` để điều khiển component từ bên ngoài:
250
+
251
+ ```typescript
252
+ private readonly paginationRef = viewChild<LibsUiComponentsPaginationComponent>('paginationRef');
253
+
254
+ // Gọi changePage với số trang cụ thể
255
+ this.paginationRef()?.FunctionsControl.changePage(3);
256
+
257
+ // Gọi changePage không có tham số → re-render trang hiện tại
258
+ this.paginationRef()?.FunctionsControl.changePage();
259
+ ```
260
+
261
+ | Method | Signature | Mô tả |
262
+ |---|---|---|
263
+ | `changePage` | `(page?: number) => Promise<void>` | Chuyển đến trang `page`. Nếu không truyền `page`, re-render trang hiện tại |
264
+
265
+ ## Types & Interfaces
266
+
267
+ ```typescript
268
+ import {
269
+ IPaginationConfig,
270
+ IPaginationFunctionsControl,
271
+ } from '@libs-ui/components-pagination';
272
+
273
+ // IPaginationConfig — dùng để định nghĩa config tập trung
274
+ type IPaginationConfig = {
275
+ position?: 'top' | 'bottom';
276
+ classIncludeContainer?: string;
277
+ classIncludeItem?: string;
278
+ disable?: boolean;
279
+ numberPageDisplay?: number;
280
+ showTotalPage?: boolean;
281
+ firstPageStartNumber?: 0 | 1;
282
+ showInputGotoPage?: boolean;
283
+ modeDisplayTotalPageAndGotoPage?: 'top' | 'bottom' | 'left' | 'right';
284
+ classDisplayTotalPageAndGotoPage?: string;
285
+ perPage?: number;
286
+ totalItems?: number;
287
+ currentPage?: number;
288
+ };
289
+
290
+ // IPaginationFunctionsControl — interface của FunctionsControl getter
291
+ interface IPaginationFunctionsControl {
292
+ changePage: (page?: number) => Promise<void>;
293
+ }
294
+ ```
73
295
 
74
- #### Inputs
296
+ ## Logic ẩn quan trọng
75
297
 
76
- | Property | Type | Default | Description |
77
- | ------------------------------------ | ---------------------------------------- | ------------ | --------------------------------------------------------------- |
78
- | `[classIncludeContainer]` | `string` | `undefined` | Custom class cho container chính. |
79
- | `[classIncludeItem]` | `string` | `undefined` | Custom class cho từng nút phân trang. |
80
- | `[classDisplayTotalPageAndGotoPage]` | `string` | `undefined` | Custom class cho vùng tổng trang & nhảy trang. |
81
- | `[disable]` | `boolean` | `false` | Vô hiệu hóa tương tác phân trang. |
82
- | `[modeDisplayTotalPageAndGotoPage]` | `'top' \| 'bottom' \| 'left' \| 'right'` | `'bottom'` | Vị trí của vùng thông tin bổ trợ (Tổng trang & Nhảy trang). |
83
- | `[numberPageDisplay]` | `number` | `5` | Số lượng các nút trang (con số) hiển thị trên thanh điều hướng. |
84
- | `[perPage]` | `number` | **Bắt buộc** | Số lượng phần tử hiển thị trên mỗi trang. |
85
- | `[showInputGotoPage]` | `boolean` | `false` | Hiển thị ô nhập để nhảy nhanh đến trang bất kỳ. |
86
- | `[showTotalPage]` | `boolean` | `false` | Hiển thị thông báo tổng số trang. |
87
- | `[totalItems]` | `number` | **Bắt buộc** | Tổng số lượng phần tử cần phân trang. |
298
+ ### Debounced Navigation (1500ms)
88
299
 
89
- #### Models (Two-way bindings)
300
+ Khi người dùng nhập số vào ô "Go to page", component đợi 1500ms sau lần gõ cuối mới thực hiện chuyển trang, tránh spam API. Nhấn **Enter** sẽ bỏ qua thời gian chờ và chuyển trang ngay lập tức.
90
301
 
91
- | Property | Type | Description |
92
- | ----------------- | -------- | ----------------------------------------- |
93
- | `[(currentPage)]` | `number` | Trang hiện tại đang được chọn (bắt buộc). |
302
+ ### Sliding Window (cửa sổ trang trượt)
94
303
 
95
- #### Outputs
304
+ Danh sách các nút số trang hiển thị được tính động, luôn bao quanh `currentPage` trong phạm vi `numberPageDisplay`. Khi `currentPage` thay đổi, cửa sổ trang trượt theo để trang hiện tại luôn nằm ở giữa (hoặc gần giữa).
96
305
 
97
- | Property | Type | Description |
98
- | ----------------- | -------- | ------------------------------------------------- |
99
- | `(outPageSelect)` | `number` | Phát ra số trang mới khi người dùng chuyển trang. |
306
+ ### Boundary Protection (giới hạn biên)
100
307
 
101
- ## Hidden Logic
308
+ Nếu `totalItems` thay đổi làm giảm tổng số trang xuống thấp hơn `currentPage` hiện tại, component tự động kéo `currentPage` về trang cuối hợp lệ và emit `outPageSelect`.
102
309
 
103
- ### 1. Debounced Navigation
310
+ ### firstPageStartNumber
104
311
 
105
- Khi người dùng nhập số trang vào ô "Go to page", component sẽ chờ **1500ms** (debounce) trước khi thực hiện chuyển trang để tránh spam request. Tuy nhiên, nếu nhấn **Enter**, trang sẽ được chuyển ngay lập tức.
312
+ - `firstPageStartNumber="1"` (mặc định): `currentPage` nhận giá trị `1, 2, 3, ...`, emit `1, 2, 3, ...`
313
+ - `firstPageStartNumber="0"`: `currentPage` nhận giá trị `0, 1, 2, ...`, emit `0, 1, 2, ...`
106
314
 
107
- ### 2. Boundary Protection
315
+ Dùng `firstPageStartNumber="0"` khi API backend dùng quy ước zero-based pagination.
108
316
 
109
- Nếu `currentPage` được cung cấp lớn hơn tổng số trang thực tế (`totalPage`), component sẽ tự động điều chỉnh `currentPage` về giá trị `totalPage` để đảm bảo tính hợp lệ của dữ liệu.
317
+ ## Lưu ý quan trọng
110
318
 
111
- ### 3. Dynamic Page Window
319
+ ⚠️ **Two-way binding bắt buộc**: Luôn dùng `[(currentPage)]` thay vì `[currentPage]` một chiều. Nếu chỉ dùng một chiều, component không thể cập nhật lại số trang hiển thị khi người dùng điều hướng.
112
320
 
113
- Danh sách các nút số trang hiển thị được tính toán linh hoạt bao quanh `currentPage` dựa trên `numberPageDisplay`, giúp tối ưu không gian hiển thị khi hàng trăm trang.
321
+ ⚠️ **Required inputs**: `totalItems`, `perPage` `currentPage` bắt buộc. Thiếu bất kỳ input nào sẽ khiến component không thể tính toán số trang không render được gì.
114
322
 
115
- ## Công nghệ
323
+ ⚠️ **Debounce 1500ms**: Ô "Go to page" có delay 1500ms. Nếu UX yêu cầu chuyển trang ngay lập tức khi nhập, hướng dẫn người dùng nhấn Enter sau khi nhập.
116
324
 
117
- | Technology | Version | Purpose |
118
- | --------------- | ------- | ----------------- |
119
- | Angular | 18+ | Framework |
120
- | Angular Signals | - | State management |
121
- | RxJS | 7.x | Debounce handling |
122
- | OnPush | - | Performance |
325
+ ⚠️ **Disable khi loading**: Nên bind `[disable]="isLoading()"` để ngăn người dùng chuyển trang trong lúc đang gọi API, tránh race condition.
123
326
 
124
327
  ## Demo
125
328
 
@@ -127,4 +330,4 @@ Danh sách các nút số trang hiển thị được tính toán linh hoạt ba
127
330
  npx nx serve core-ui
128
331
  ```
129
332
 
130
- Truy cập: `http://localhost:4200/pagination`
333
+ Truy cập: `http://localhost:4500/pagination`
@@ -1,6 +1,6 @@
1
1
  import { NgTemplateOutlet } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
- import { signal, input, model, computed, output, inject, DestroyRef, effect, untracked, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { signal, input, model, computed, output, inject, DestroyRef, effect, untracked, Component, ChangeDetectionStrategy } from '@angular/core';
4
4
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
5
  import { LibsUiComponentsInputsInputComponent } from '@libs-ui/components-inputs-input';
6
6
  import { TranslateProviderConfig } from '@libs-ui/services-translate';
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-components-pagination.mjs","sources":["../../../../../libs-ui/components/pagination/src/pagination.component.ts","../../../../../libs-ui/components/pagination/src/pagination.component.html","../../../../../libs-ui/components/pagination/src/libs-ui-components-pagination.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, DestroyRef, effect, inject, input, model, OnInit, output, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { LibsUiComponentsInputsInputComponent } from '@libs-ui/components-inputs-input';\nimport { TranslateProviderConfig } from '@libs-ui/services-translate';\nimport { isNil } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { debounceTime, Subject } from 'rxjs';\nimport { IPaginationFunctionsControl } from './pagination.type';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-pagination',\n templateUrl: './pagination.component.html',\n styleUrl: './pagination.component.scss',\n standalone: true,\n imports: [TranslateModule, LibsUiComponentsInputsInputComponent, NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TranslateProviderConfig],\n})\nexport class LibsUiComponentsPaginationComponent implements OnInit {\n private readonly fakeEventHtml = new Event('click');\n private readonly isEnterSearch = signal(false);\n protected listPageDisplay = signal<Array<{ key: string; value: string }>>([]);\n protected gotoPageNumber = signal<number | undefined>(undefined);\n protected totalPage = signal<number>(0);\n private readonly onChangeValue = new Subject<number>();\n\n readonly showTotalPage = input<boolean>();\n readonly showInputGotoPage = input<boolean>();\n readonly modeDisplayTotalPageAndGotoPage = input<'top' | 'bottom' | 'left' | 'right'>('bottom');\n readonly classDisplayTotalPageAndGotoPage = input<string>();\n\n readonly classIncludeContainer = input<string>();\n readonly classIncludeItem = input<string>();\n readonly disable = input<boolean>();\n readonly numberPageDisplay = input<number, number | undefined>(5, { transform: (value) => value || 5 });\n readonly totalItems = input.required<number>();\n readonly perPage = input.required<number>();\n readonly firstPageStartNumber = input<number, 0 | 1 | undefined>(1, { transform: (value) => value ?? 1 });\n readonly currentPage = model.required<number>();\n readonly currentPageComputed = computed(() => this.currentPage() + (this.firstPageStartNumber() === 1 ? 0 : 1));\n readonly outPageSelect = output<number>();\n private readonly destroyRef = inject(DestroyRef);\n constructor() {\n let totalItems = 0;\n effect(() => {\n if ( !isNil(this.totalItems())|| totalItems !== this.totalItems()) {\n untracked(() => {\n totalItems = this.totalItems();\n this.renderPagination();\n if (this.totalPage() && this.currentPageComputed() >= this.totalPage()) {\n this.selectPage(this.fakeEventHtml, { key: `${this.totalPage()}`, value: `${this.totalPage()}` });\n }\n });\n }\n });\n this.onChangeValue.pipe(debounceTime(1500), takeUntilDestroyed(this.destroyRef)).subscribe((value) => {\n if (this.isEnterSearch() || +value === this.currentPageComputed()) {\n this.isEnterSearch.set(false);\n return;\n }\n this.selectPage(this.fakeEventHtml, { key: `${value}`, value: `${value}` });\n });\n }\n\n ngOnInit(): void {\n if (!isNil(this.currentPage()) && !isNil(this.totalItems()) && !isNil(this.perPage())) {\n this.renderPagination();\n }\n }\n\n public get FunctionsControl(): IPaginationFunctionsControl {\n return {\n changePage:async (value?:number)=> {\n if(!isNil(value)){\n await this.changePage(value);\n return;\n }\n await this.changePage(this.currentPageComputed());\n }\n };\n }\n\n private renderPagination() {\n if (this.perPage() > 0 && !isNil(this.totalItems())) {\n this.totalPage.set(Math.ceil(this.totalItems() / this.perPage()));\n }\n this.listPageDisplay.set([]);\n\n if (this.totalPage() <= this.numberPageDisplay()) {\n this.listPageDisplay.set(\n Array.from({ length: this.totalPage() }, (_, index) => {\n return { key: `${index + 1}`, value: `${index + 1}` };\n })\n );\n\n return;\n }\n\n if (this.currentPageComputed() < this.numberPageDisplay() - 1) {\n this.listPageDisplay.set(\n Array.from({ length: this.numberPageDisplay() }, (_, index) => {\n return { key: `${index + 1}`, value: `${index + 1}` };\n })\n );\n\n return;\n }\n\n const startPage = this.currentPageComputed() - this.numberPageDisplay() / 2;\n let numberPageBefore = [\n this.currentPageComputed(),\n 0,\n this.numberPageDisplay() / 2,\n ][Math.sign(startPage) + 1];\n const gapAfter = this.numberPageDisplay() - numberPageBefore;\n const endPage = this.currentPageComputed() + gapAfter;\n const numberPageAfter = this.totalPage() >= endPage ? gapAfter : this.totalPage() - this.currentPageComputed();\n\n if (numberPageBefore + numberPageAfter < this.numberPageDisplay()) {\n numberPageBefore = this.numberPageDisplay() - numberPageAfter;\n }\n\n for (let i = 0; i < numberPageBefore; i++) {\n this.listPageDisplay.update((listPage) => {\n listPage.unshift({ key: `${this.currentPageComputed() - i}`, value: `${this.currentPageComputed() - i}` });\n\n return [...listPage];\n });\n }\n\n if (numberPageAfter >= 0) {\n for (let i = 1; i <= numberPageAfter; i++) {\n this.listPageDisplay.update((listPage) => {\n listPage.push({ key: `${this.currentPageComputed() + i}`, value: `${this.currentPageComputed() + i}` });\n return [...listPage];\n });\n }\n }\n }\n\n protected selectPage(e: Event, item: { key: string; value: string }) {\n e.stopPropagation();\n const pageSelect = +item.key - (this.firstPageStartNumber() === 0 ? 1 : 0);\n\n \n if (pageSelect === this.currentPage()) {\n return;\n }\n\n this.currentPage.set(pageSelect);\n this.outPageSelect.emit(this.currentPage());\n this.renderPagination();\n }\n\n protected nextPage(e: Event) {\n e.stopPropagation();\n if (this.currentPageComputed() < this.totalPage()) {\n this.currentPage.update((currentPage) => currentPage + 1);\n this.outPageSelect.emit(this.currentPage());\n this.renderPagination();\n }\n }\n\n protected prePage(e: Event) {\n e.stopPropagation();\n if (this.currentPageComputed() > 1) {\n this.currentPage.update((currentPage) => currentPage - 1);\n this.outPageSelect.emit(this.currentPage());\n this.renderPagination();\n }\n }\n\n protected async changePage(value: string | number) {\n value = value as number;\n if (!value) {\n this.gotoPageNumber.set(undefined);\n return;\n }\n this.gotoPageNumber.set(value);\n this.onChangeValue.next(value);\n }\n\n protected handlerEnterInput() {\n if (isNil(this.gotoPageNumber()) || this.gotoPageNumber() === this.currentPageComputed()) {\n return;\n }\n\n this.isEnterSearch.set(true);\n this.selectPage(this.fakeEventHtml, { key: `${this.gotoPageNumber()}`, value: `${this.gotoPageNumber()}` });\n }\n}\n","<div class=\"flex flex-col items-center flex-wrap w-full justify-center {{ classIncludeContainer() ?? '' }}\">\n @let constHtmlDisplayTotalPageAndGotoPage = showTotalPage() || showInputGotoPage();\n @if (constHtmlDisplayTotalPageAndGotoPage && modeDisplayTotalPageAndGotoPage() === 'top') {\n <ng-container *ngTemplateOutlet=\"gotoPageNumberRef\" />\n }\n <div class=\"flex shrink-0 h-full items-center\">\n @let constHtmlDisableButtonPre = currentPageComputed() <= 1 || totalPage() <= 1 || disable();\n @if (constHtmlDisplayTotalPageAndGotoPage && modeDisplayTotalPageAndGotoPage() === 'left') {\n <ng-container *ngTemplateOutlet=\"gotoPageNumberRef\" />\n }\n <div\n class=\"libs-ui-components-pagination-button rotate-[180deg] pl-[14px] pr-[6px]\"\n [class.libs-ui-disable]=\"constHtmlDisableButtonPre\"\n [class.pointer-events-none]=\"constHtmlDisableButtonPre\"\n (click)=\"prePage($event)\"\n (keydown.enter)=\"prePage($event)\">\n <i class=\"libs-ui-icon-chevron-right libs-ui-font-h2r\"></i>\n </div>\n @for (item of listPageDisplay(); track item.key) {\n <div\n class=\"libs-ui-components-pagination-item libs-ui-font-h3m {{ classIncludeItem() ?? '' }}\"\n [class.libs-ui-components-pagination-active]=\"item.key === currentPageComputed() + ''\"\n [class.libs-ui-disable]=\"disable()\"\n [class.pointer-events-none]=\"disable()\"\n (click)=\"selectPage($event, item)\"\n (keydown.enter)=\"selectPage($event, item)\">\n {{ item.value }}\n </div>\n } @empty {\n <div class=\"libs-ui-font-h5m text-[#9CA2AD] mx-[12px] flex shrink-0\">\n {{ 'i18n_no_data_yet' | translate }}\n </div>\n }\n\n @let constHtmlDisableButtonNext = currentPageComputed() >= totalPage() || disable();\n <div\n class=\"libs-ui-components-pagination-button pl-[14px] pr-[6p]x\"\n [class.libs-ui-disable]=\"constHtmlDisableButtonNext\"\n [class.pointer-events-none]=\"constHtmlDisableButtonNext\"\n (click)=\"nextPage($event)\"\n (keydown.enter)=\"nextPage($event)\">\n <i class=\"libs-ui-icon-chevron-right libs-ui-font-h2r\"></i>\n </div>\n @if (constHtmlDisplayTotalPageAndGotoPage && modeDisplayTotalPageAndGotoPage() === 'right') {\n <ng-container *ngTemplateOutlet=\"gotoPageNumberRef\" />\n }\n </div>\n @if (constHtmlDisplayTotalPageAndGotoPage && modeDisplayTotalPageAndGotoPage() === 'bottom') {\n <ng-container *ngTemplateOutlet=\"gotoPageNumberRef\" />\n }\n</div>\n\n<ng-template #gotoPageNumberRef>\n <div\n class=\"flex shrink-0 h-full items-center {{ classDisplayTotalPageAndGotoPage() ?? '' }}\"\n [class.mb-[16px]]=\"modeDisplayTotalPageAndGotoPage() === 'top'\"\n [class.mt-[16px]]=\"modeDisplayTotalPageAndGotoPage() === 'bottom'\">\n @if (showTotalPage()) {\n <div class=\"libs-ui-font-h5m text-[#9CA2AD] mx-[12px]\">\n {{ 'i18n_value_sum_page' | translate: { value: totalPage() } }}\n </div>\n }\n @if (showInputGotoPage()) {\n @if (showTotalPage()) {\n <div class=\"h-[16px] w-[1px] bg-[#CDD0D6]\"></div>\n }\n <div class=\"libs-ui-font-h5m text-[#9CA2AD] mx-[12px] flex shrink-0\">\n {{ 'i18n_go_to' | translate }}\n </div>\n <div class=\"w-[60px] mr-[12px] shrink-0\">\n <libs_ui-components-inputs-input\n [dataType]=\"'int'\"\n classInclude=\"!rounded-[6px]\"\n [maxValueNumber]=\"totalPage()\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [defaultHeight]=\"28\"\n [value]=\"gotoPageNumber() || ''\"\n (outChange)=\"changePage($event)\"\n (outEnterEvent)=\"handlerEnterInput()\"\n [disable]=\"disable() || totalPage() <= numberPageDisplay()\" />\n </div>\n }\n </div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"libs-ui-components-pagination.mjs","sources":["../../../../../libs-ui/components/pagination/src/pagination.component.ts","../../../../../libs-ui/components/pagination/src/pagination.component.html","../../../../../libs-ui/components/pagination/src/libs-ui-components-pagination.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, DestroyRef, effect, inject, input, model, OnInit, output, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { LibsUiComponentsInputsInputComponent } from '@libs-ui/components-inputs-input';\nimport { TranslateProviderConfig } from '@libs-ui/services-translate';\nimport { isNil } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { debounceTime, Subject } from 'rxjs';\nimport { IPaginationFunctionsControl } from './pagination.type';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-pagination',\n templateUrl: './pagination.component.html',\n styleUrl: './pagination.component.scss',\n standalone: true,\n imports: [TranslateModule, LibsUiComponentsInputsInputComponent, NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TranslateProviderConfig],\n})\nexport class LibsUiComponentsPaginationComponent implements OnInit {\n private readonly fakeEventHtml = new Event('click');\n private readonly isEnterSearch = signal(false);\n protected listPageDisplay = signal<Array<{ key: string; value: string }>>([]);\n protected gotoPageNumber = signal<number | undefined>(undefined);\n protected totalPage = signal<number>(0);\n private readonly onChangeValue = new Subject<number>();\n\n readonly showTotalPage = input<boolean>();\n readonly showInputGotoPage = input<boolean>();\n readonly modeDisplayTotalPageAndGotoPage = input<'top' | 'bottom' | 'left' | 'right'>('bottom');\n readonly classDisplayTotalPageAndGotoPage = input<string>();\n\n readonly classIncludeContainer = input<string>();\n readonly classIncludeItem = input<string>();\n readonly disable = input<boolean>();\n readonly numberPageDisplay = input<number, number | undefined>(5, { transform: (value) => value || 5 });\n readonly totalItems = input.required<number>();\n readonly perPage = input.required<number>();\n readonly firstPageStartNumber = input<number, 0 | 1 | undefined>(1, { transform: (value) => value ?? 1 });\n readonly currentPage = model.required<number>();\n readonly currentPageComputed = computed(() => this.currentPage() + (this.firstPageStartNumber() === 1 ? 0 : 1));\n readonly outPageSelect = output<number>();\n private readonly destroyRef = inject(DestroyRef);\n constructor() {\n let totalItems = 0;\n effect(() => {\n if ( !isNil(this.totalItems())|| totalItems !== this.totalItems()) {\n untracked(() => {\n totalItems = this.totalItems();\n this.renderPagination();\n if (this.totalPage() && this.currentPageComputed() >= this.totalPage()) {\n this.selectPage(this.fakeEventHtml, { key: `${this.totalPage()}`, value: `${this.totalPage()}` });\n }\n });\n }\n });\n this.onChangeValue.pipe(debounceTime(1500), takeUntilDestroyed(this.destroyRef)).subscribe((value) => {\n if (this.isEnterSearch() || +value === this.currentPageComputed()) {\n this.isEnterSearch.set(false);\n return;\n }\n this.selectPage(this.fakeEventHtml, { key: `${value}`, value: `${value}` });\n });\n }\n\n ngOnInit(): void {\n if (!isNil(this.currentPage()) && !isNil(this.totalItems()) && !isNil(this.perPage())) {\n this.renderPagination();\n }\n }\n\n public get FunctionsControl(): IPaginationFunctionsControl {\n return {\n changePage:async (value?:number)=> {\n if(!isNil(value)){\n await this.changePage(value);\n return;\n }\n await this.changePage(this.currentPageComputed());\n }\n };\n }\n\n private renderPagination() {\n if (this.perPage() > 0 && !isNil(this.totalItems())) {\n this.totalPage.set(Math.ceil(this.totalItems() / this.perPage()));\n }\n this.listPageDisplay.set([]);\n\n if (this.totalPage() <= this.numberPageDisplay()) {\n this.listPageDisplay.set(\n Array.from({ length: this.totalPage() }, (_, index) => {\n return { key: `${index + 1}`, value: `${index + 1}` };\n })\n );\n\n return;\n }\n\n if (this.currentPageComputed() < this.numberPageDisplay() - 1) {\n this.listPageDisplay.set(\n Array.from({ length: this.numberPageDisplay() }, (_, index) => {\n return { key: `${index + 1}`, value: `${index + 1}` };\n })\n );\n\n return;\n }\n\n const startPage = this.currentPageComputed() - this.numberPageDisplay() / 2;\n let numberPageBefore = [\n this.currentPageComputed(),\n 0,\n this.numberPageDisplay() / 2,\n ][Math.sign(startPage) + 1];\n const gapAfter = this.numberPageDisplay() - numberPageBefore;\n const endPage = this.currentPageComputed() + gapAfter;\n const numberPageAfter = this.totalPage() >= endPage ? gapAfter : this.totalPage() - this.currentPageComputed();\n\n if (numberPageBefore + numberPageAfter < this.numberPageDisplay()) {\n numberPageBefore = this.numberPageDisplay() - numberPageAfter;\n }\n\n for (let i = 0; i < numberPageBefore; i++) {\n this.listPageDisplay.update((listPage) => {\n listPage.unshift({ key: `${this.currentPageComputed() - i}`, value: `${this.currentPageComputed() - i}` });\n\n return [...listPage];\n });\n }\n\n if (numberPageAfter >= 0) {\n for (let i = 1; i <= numberPageAfter; i++) {\n this.listPageDisplay.update((listPage) => {\n listPage.push({ key: `${this.currentPageComputed() + i}`, value: `${this.currentPageComputed() + i}` });\n return [...listPage];\n });\n }\n }\n }\n\n protected selectPage(e: Event, item: { key: string; value: string }) {\n e.stopPropagation();\n const pageSelect = +item.key - (this.firstPageStartNumber() === 0 ? 1 : 0);\n\n \n if (pageSelect === this.currentPage()) {\n return;\n }\n\n this.currentPage.set(pageSelect);\n this.outPageSelect.emit(this.currentPage());\n this.renderPagination();\n }\n\n protected nextPage(e: Event) {\n e.stopPropagation();\n if (this.currentPageComputed() < this.totalPage()) {\n this.currentPage.update((currentPage) => currentPage + 1);\n this.outPageSelect.emit(this.currentPage());\n this.renderPagination();\n }\n }\n\n protected prePage(e: Event) {\n e.stopPropagation();\n if (this.currentPageComputed() > 1) {\n this.currentPage.update((currentPage) => currentPage - 1);\n this.outPageSelect.emit(this.currentPage());\n this.renderPagination();\n }\n }\n\n protected async changePage(value: string | number) {\n value = value as number;\n if (!value) {\n this.gotoPageNumber.set(undefined);\n return;\n }\n this.gotoPageNumber.set(value);\n this.onChangeValue.next(value);\n }\n\n protected handlerEnterInput() {\n if (isNil(this.gotoPageNumber()) || this.gotoPageNumber() === this.currentPageComputed()) {\n return;\n }\n\n this.isEnterSearch.set(true);\n this.selectPage(this.fakeEventHtml, { key: `${this.gotoPageNumber()}`, value: `${this.gotoPageNumber()}` });\n }\n}\n","<div class=\"flex flex-col items-center flex-wrap w-full justify-center {{ classIncludeContainer() ?? '' }}\">\n @let constHtmlDisplayTotalPageAndGotoPage = showTotalPage() || showInputGotoPage();\n @if (constHtmlDisplayTotalPageAndGotoPage && modeDisplayTotalPageAndGotoPage() === 'top') {\n <ng-container *ngTemplateOutlet=\"gotoPageNumberRef\" />\n }\n <div class=\"flex shrink-0 h-full items-center\">\n @let constHtmlDisableButtonPre = currentPageComputed() <= 1 || totalPage() <= 1 || disable();\n @if (constHtmlDisplayTotalPageAndGotoPage && modeDisplayTotalPageAndGotoPage() === 'left') {\n <ng-container *ngTemplateOutlet=\"gotoPageNumberRef\" />\n }\n <div\n class=\"libs-ui-components-pagination-button rotate-[180deg] pl-[14px] pr-[6px]\"\n [class.libs-ui-disable]=\"constHtmlDisableButtonPre\"\n [class.pointer-events-none]=\"constHtmlDisableButtonPre\"\n (click)=\"prePage($event)\"\n (keydown.enter)=\"prePage($event)\">\n <i class=\"libs-ui-icon-chevron-right libs-ui-font-h2r\"></i>\n </div>\n @for (item of listPageDisplay(); track item.key) {\n <div\n class=\"libs-ui-components-pagination-item libs-ui-font-h3m {{ classIncludeItem() ?? '' }}\"\n [class.libs-ui-components-pagination-active]=\"item.key === currentPageComputed() + ''\"\n [class.libs-ui-disable]=\"disable()\"\n [class.pointer-events-none]=\"disable()\"\n (click)=\"selectPage($event, item)\"\n (keydown.enter)=\"selectPage($event, item)\">\n {{ item.value }}\n </div>\n } @empty {\n <div class=\"libs-ui-font-h5m text-[#9CA2AD] mx-[12px] flex shrink-0\">\n {{ 'i18n_no_data_yet' | translate }}\n </div>\n }\n\n @let constHtmlDisableButtonNext = currentPageComputed() >= totalPage() || disable();\n <div\n class=\"libs-ui-components-pagination-button pl-[14px] pr-[6p]x\"\n [class.libs-ui-disable]=\"constHtmlDisableButtonNext\"\n [class.pointer-events-none]=\"constHtmlDisableButtonNext\"\n (click)=\"nextPage($event)\"\n (keydown.enter)=\"nextPage($event)\">\n <i class=\"libs-ui-icon-chevron-right libs-ui-font-h2r\"></i>\n </div>\n @if (constHtmlDisplayTotalPageAndGotoPage && modeDisplayTotalPageAndGotoPage() === 'right') {\n <ng-container *ngTemplateOutlet=\"gotoPageNumberRef\" />\n }\n </div>\n @if (constHtmlDisplayTotalPageAndGotoPage && modeDisplayTotalPageAndGotoPage() === 'bottom') {\n <ng-container *ngTemplateOutlet=\"gotoPageNumberRef\" />\n }\n</div>\n\n<ng-template #gotoPageNumberRef>\n <div\n class=\"flex shrink-0 h-full items-center {{ classDisplayTotalPageAndGotoPage() ?? '' }}\"\n [class.mb-[16px]]=\"modeDisplayTotalPageAndGotoPage() === 'top'\"\n [class.mt-[16px]]=\"modeDisplayTotalPageAndGotoPage() === 'bottom'\">\n @if (showTotalPage()) {\n <div class=\"libs-ui-font-h5m text-[#9CA2AD] mx-[12px]\">\n {{ 'i18n_value_sum_page' | translate: { value: totalPage() } }}\n </div>\n }\n @if (showInputGotoPage()) {\n @if (showTotalPage()) {\n <div class=\"h-[16px] w-[1px] bg-[#CDD0D6]\"></div>\n }\n <div class=\"libs-ui-font-h5m text-[#9CA2AD] mx-[12px] flex shrink-0\">\n {{ 'i18n_go_to' | translate }}\n </div>\n <div class=\"w-[60px] mr-[12px] shrink-0\">\n <libs_ui-components-inputs-input\n [dataType]=\"'int'\"\n classInclude=\"!rounded-[6px]\"\n [maxValueNumber]=\"totalPage()\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [defaultHeight]=\"28\"\n [value]=\"gotoPageNumber() || ''\"\n (outChange)=\"changePage($event)\"\n (outEnterEvent)=\"handlerEnterInput()\"\n [disable]=\"disable() || totalPage() <= numberPageDisplay()\" />\n </div>\n }\n </div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@libs-ui/components-pagination",
3
- "version": "0.2.356-42",
3
+ "version": "0.2.356-43",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=18.0.0",
6
6
  "@angular/core": ">=18.0.0",
7
- "@libs-ui/components-inputs-input": "0.2.356-42",
8
- "@libs-ui/services-translate": "0.2.356-42",
7
+ "@libs-ui/components-inputs-input": "0.2.356-43",
8
+ "@libs-ui/services-translate": "0.2.356-43",
9
9
  "@ngx-translate/core": "^15.0.0",
10
10
  "rxjs": "~7.8.0",
11
- "@libs-ui/utils": "0.2.356-42"
11
+ "@libs-ui/utils": "0.2.356-43"
12
12
  },
13
13
  "sideEffects": false,
14
14
  "module": "fesm2022/libs-ui-components-pagination.mjs",