@libs-ui/components-pagination 0.2.355-9 → 0.2.356-1

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 (2) hide show
  1. package/README.md +129 -2
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -1,3 +1,130 @@
1
- # pagination
1
+ # @libs-ui/components-pagination
2
2
 
3
- This library was generated with [Nx](https://nx.dev).
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.
4
+
5
+ ## Giới thiệu
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 mà cho các bảng dữ liệu hoặc danh sách lớn.
8
+
9
+ ### Tính năng
10
+
11
+ - ✅ **Hiển thị linh hoạt**: Hỗ trợ hiển thị tổng số trang và ô nhập nhảy trang (Go to page).
12
+ - ✅ **Layout tùy biến**: Vùng thông tin bổ trợ có 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 lý trạng thái hiệu quả.
16
+
17
+ ## Khi nào sử dụng
18
+
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 và web dashboard.
22
+
23
+ ## Cài đặt
24
+
25
+ ```bash
26
+ # npm
27
+ npm install @libs-ui/components-pagination
28
+
29
+ # yarn
30
+ yarn add @libs-ui/components-pagination
31
+ ```
32
+
33
+ ## Import
34
+
35
+ ```typescript
36
+ import { LibsUiComponentsPaginationComponent } from '@libs-ui/components-pagination';
37
+
38
+ @Component({
39
+ standalone: true,
40
+ imports: [LibsUiComponentsPaginationComponent],
41
+ // ...
42
+ })
43
+ export class YourComponent {}
44
+ ```
45
+
46
+ ## Ví dụ
47
+
48
+ ### Basic
49
+
50
+ ```html
51
+ <libs_ui-components-pagination
52
+ [totalItems]="100"
53
+ [perPage]="10"
54
+ [(currentPage)]="currentPage"
55
+ (outPageSelect)="onPageChange($event)" />
56
+ ```
57
+
58
+ ### Advanced (Show goto & total)
59
+
60
+ ```html
61
+ <libs_ui-components-pagination
62
+ [totalItems]="500"
63
+ [perPage]="20"
64
+ [(currentPage)]="currentPage"
65
+ [showTotalPage]="true"
66
+ [showInputGotoPage]="true"
67
+ [modeDisplayTotalPageAndGotoPage]="'right'" />
68
+ ```
69
+
70
+ ## API
71
+
72
+ ### libs_ui-components-pagination
73
+
74
+ #### Inputs
75
+
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. |
88
+
89
+ #### Models (Two-way bindings)
90
+
91
+ | Property | Type | Description |
92
+ | ----------------- | -------- | ----------------------------------------- |
93
+ | `[(currentPage)]` | `number` | Trang hiện tại đang được chọn (bắt buộc). |
94
+
95
+ #### Outputs
96
+
97
+ | Property | Type | Description |
98
+ | ----------------- | -------- | ------------------------------------------------- |
99
+ | `(outPageSelect)` | `number` | Phát ra số trang mới khi người dùng chuyển trang. |
100
+
101
+ ## Hidden Logic
102
+
103
+ ### 1. Debounced Navigation
104
+
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.
106
+
107
+ ### 2. Boundary Protection
108
+
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.
110
+
111
+ ### 3. Dynamic Page Window
112
+
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 có hàng trăm trang.
114
+
115
+ ## Công nghệ
116
+
117
+ | Technology | Version | Purpose |
118
+ | --------------- | ------- | ----------------- |
119
+ | Angular | 18+ | Framework |
120
+ | Angular Signals | - | State management |
121
+ | RxJS | 7.x | Debounce handling |
122
+ | OnPush | - | Performance |
123
+
124
+ ## Demo
125
+
126
+ ```bash
127
+ npx nx serve core-ui
128
+ ```
129
+
130
+ Truy cập: `http://localhost:4200/pagination`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libs-ui/components-pagination",
3
- "version": "0.2.355-9",
3
+ "version": "0.2.356-1",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=18.0.0",
6
6
  "@angular/core": ">=18.0.0"