@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.
- package/README.md +129 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,3 +1,130 @@
|
|
|
1
|
-
# pagination
|
|
1
|
+
# @libs-ui/components-pagination
|
|
2
2
|
|
|
3
|
-
|
|
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`
|