@libs-ui/components-inputs-add 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,56 +1,51 @@
|
|
|
1
1
|
# @libs-ui/components-inputs-add
|
|
2
2
|
|
|
3
|
-
> Component
|
|
4
|
-
|
|
5
|
-
**Version:** 0.2.355-14
|
|
3
|
+
> Component quản lý danh sách input fields động với khả năng thêm/xóa, validation đầy đủ và customization linh hoạt
|
|
6
4
|
|
|
7
5
|
## Giới thiệu
|
|
8
6
|
|
|
9
|
-
`LibsUiComponentsInputsAddComponent` là một standalone Angular component
|
|
7
|
+
`LibsUiComponentsInputsAddComponent` là một standalone Angular component cho phép người dùng quản lý danh sách các input fields động. Component tích hợp sẵn cơ chế thêm/xóa items, validation từng field riêng biệt, kiểm tra giá trị duplicate, và hỗ trợ nhiều kiểu dữ liệu khác nhau (text, number, password...). Component sử dụng Angular Signals và OnPush Change Detection để đảm bảo hiệu năng tối ưu.
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
## Tính năng
|
|
12
10
|
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
11
|
+
- Thêm/xóa input fields động với nút Add và Remove
|
|
12
|
+
- Two-way binding với `model()` cho `items` array
|
|
13
|
+
- Validation tích hợp: required, minLength, maxLength, pattern, min/max value, duplicate
|
|
14
|
+
- Hỗ trợ nhiều kiểu dữ liệu: text, number (int/float), password, textarea
|
|
15
|
+
- Giới hạn số lượng items tối thiểu/tối đa (`minItems`, `maxItems`)
|
|
16
|
+
- Custom template trái/phải cho từng item (TemplateRef outlets)
|
|
17
|
+
- Hỗ trợ đơn vị tính bên trái và bên phải (units left/right)
|
|
18
|
+
- Label configuration tích hợp (title, required mark, description, toggle, popover)
|
|
19
|
+
- FunctionsControl API để validate và set error từ component cha
|
|
20
|
+
- Custom button "Add New" với đầy đủ styling options
|
|
21
|
+
- Debounce 250ms khi validate sau khi value thay đổi hoặc remove item
|
|
22
|
+
- Angular Signals + OnPush Change Detection
|
|
21
23
|
|
|
22
24
|
## Khi nào sử dụng
|
|
23
25
|
|
|
24
|
-
- Cần nhập nhiều giá trị cùng loại
|
|
25
|
-
- Cho phép người dùng thêm/xóa fields động
|
|
26
|
-
- Cần validation cho từng field riêng biệt
|
|
27
|
-
- Quản lý danh sách inputs với min/max
|
|
28
|
-
- Cần kiểm tra duplicate
|
|
29
|
-
|
|
30
|
-
## Important Notes
|
|
31
|
-
|
|
32
|
-
⚠️ **fieldNameBind Required**: Phải truyền fieldNameBind để xác định property name trong items array.
|
|
33
|
-
|
|
34
|
-
⚠️ **items Model**: items là model (two-way binding), component tự động cập nhật array khi add/remove.
|
|
35
|
-
|
|
36
|
-
⚠️ **Validation Timing**: Validation chạy sau 250ms debounce khi value change hoặc remove item.
|
|
37
|
-
|
|
38
|
-
⚠️ **ignoreValidEmptyField**: Khi true, chỉ cần ít nhất 1 field có giá trị là valid (không bắt buộc tất cả).
|
|
26
|
+
- Cần nhập nhiều giá trị cùng loại: emails, số điện thoại, URLs, tags
|
|
27
|
+
- Cho phép người dùng thêm/xóa fields động theo nhu cầu
|
|
28
|
+
- Cần validation cho từng field riêng biệt trong danh sách
|
|
29
|
+
- Quản lý danh sách inputs với ràng buộc số lượng min/max
|
|
30
|
+
- Cần kiểm tra giá trị trùng lặp (duplicate) giữa các fields
|
|
31
|
+
- Form có section nhập liệu lặp lại theo cấu trúc giống nhau
|
|
39
32
|
|
|
40
33
|
## Cài đặt
|
|
41
34
|
|
|
42
35
|
```bash
|
|
43
|
-
# npm
|
|
44
36
|
npm install @libs-ui/components-inputs-add
|
|
45
|
-
|
|
46
|
-
# yarn
|
|
47
|
-
yarn add @libs-ui/components-inputs-add
|
|
48
37
|
```
|
|
49
38
|
|
|
50
39
|
## Import
|
|
51
40
|
|
|
52
41
|
```typescript
|
|
53
|
-
import {
|
|
42
|
+
import {
|
|
43
|
+
LibsUiComponentsInputsAddComponent,
|
|
44
|
+
IInputAdd,
|
|
45
|
+
IInputAddFunctionControlEvent,
|
|
46
|
+
IEmitValueChange,
|
|
47
|
+
ITemplateRightLeftItem,
|
|
48
|
+
} from '@libs-ui/components-inputs-add';
|
|
54
49
|
|
|
55
50
|
@Component({
|
|
56
51
|
standalone: true,
|
|
@@ -60,261 +55,371 @@ import { LibsUiComponentsInputsAddComponent, IInputAdd, IInputAddFunctionControl
|
|
|
60
55
|
export class YourComponent {}
|
|
61
56
|
```
|
|
62
57
|
|
|
63
|
-
## Ví dụ
|
|
58
|
+
## Ví dụ sử dụng
|
|
64
59
|
|
|
65
|
-
###
|
|
66
|
-
|
|
67
|
-
```html
|
|
68
|
-
<libs_ui-components-inputs-add
|
|
69
|
-
[fieldNameBind]="'email'"
|
|
70
|
-
[(items)]="emailItems"
|
|
71
|
-
[placeholder]="'Nhập email'"
|
|
72
|
-
[labelConfig]="{
|
|
73
|
-
labelLeft: 'Email addresses',
|
|
74
|
-
required: true
|
|
75
|
-
}" />
|
|
76
|
-
```
|
|
60
|
+
### Cơ bản — Danh sách email
|
|
77
61
|
|
|
78
62
|
```typescript
|
|
79
|
-
|
|
63
|
+
import { Component, signal } from '@angular/core';
|
|
64
|
+
import { LibsUiComponentsInputsAddComponent, IInputAdd } from '@libs-ui/components-inputs-add';
|
|
65
|
+
|
|
66
|
+
@Component({
|
|
67
|
+
selector: 'app-email-list',
|
|
68
|
+
standalone: true,
|
|
69
|
+
imports: [LibsUiComponentsInputsAddComponent],
|
|
70
|
+
template: `
|
|
71
|
+
<libs_ui-components-inputs-add
|
|
72
|
+
[fieldNameBind]="'email'"
|
|
73
|
+
[(items)]="emailItems"
|
|
74
|
+
[placeholder]="'Nhập địa chỉ email'"
|
|
75
|
+
[labelConfig]="{ labelLeft: 'Danh sách email', required: true }"
|
|
76
|
+
/>
|
|
77
|
+
`,
|
|
78
|
+
})
|
|
79
|
+
export class EmailListComponent {
|
|
80
80
|
emailItems = signal<Array<IInputAdd>>([{ email: '' }]);
|
|
81
81
|
}
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
-
###
|
|
84
|
+
### Giới hạn số lượng items
|
|
85
85
|
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
[(items)]="phoneItems"
|
|
90
|
-
[minItems]="2"
|
|
91
|
-
[maxItems]="10"
|
|
92
|
-
[placeholder]="'Nhập số điện thoại'" />
|
|
93
|
-
```
|
|
86
|
+
```typescript
|
|
87
|
+
import { Component, signal } from '@angular/core';
|
|
88
|
+
import { LibsUiComponentsInputsAddComponent, IInputAdd } from '@libs-ui/components-inputs-add';
|
|
94
89
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
90
|
+
@Component({
|
|
91
|
+
selector: 'app-phone-list',
|
|
92
|
+
standalone: true,
|
|
93
|
+
imports: [LibsUiComponentsInputsAddComponent],
|
|
94
|
+
template: `
|
|
95
|
+
<libs_ui-components-inputs-add
|
|
96
|
+
[fieldNameBind]="'phone'"
|
|
97
|
+
[(items)]="phoneItems"
|
|
98
|
+
[minItems]="2"
|
|
99
|
+
[maxItems]="5"
|
|
100
|
+
[placeholder]="'Nhập số điện thoại'"
|
|
101
|
+
[labelConfig]="{ labelLeft: 'Số điện thoại (2–5 số)' }"
|
|
102
|
+
/>
|
|
103
|
+
`,
|
|
104
|
+
})
|
|
105
|
+
export class PhoneListComponent {
|
|
106
|
+
phoneItems = signal<Array<IInputAdd>>([{ phone: '' }, { phone: '' }]);
|
|
107
|
+
}
|
|
111
108
|
```
|
|
112
109
|
|
|
110
|
+
### Validation và kiểm tra duplicate
|
|
111
|
+
|
|
113
112
|
```typescript
|
|
114
|
-
|
|
113
|
+
import { Component, signal } from '@angular/core';
|
|
114
|
+
import {
|
|
115
|
+
LibsUiComponentsInputsAddComponent,
|
|
116
|
+
IInputAdd,
|
|
117
|
+
IInputAddFunctionControlEvent,
|
|
118
|
+
IEmitValueChange,
|
|
119
|
+
} from '@libs-ui/components-inputs-add';
|
|
120
|
+
|
|
121
|
+
@Component({
|
|
122
|
+
selector: 'app-url-list',
|
|
123
|
+
standalone: true,
|
|
124
|
+
imports: [LibsUiComponentsInputsAddComponent],
|
|
125
|
+
template: `
|
|
126
|
+
<libs_ui-components-inputs-add
|
|
127
|
+
[fieldNameBind]="'url'"
|
|
128
|
+
[(items)]="urlItems"
|
|
129
|
+
[placeholder]="'https://example.com'"
|
|
130
|
+
[labelConfig]="{ labelLeft: 'Danh sách URL', required: true }"
|
|
131
|
+
[validRequired]="{ message: 'URL là bắt buộc' }"
|
|
132
|
+
[validDuplicate]="{ message: 'URL đã tồn tại trong danh sách' }"
|
|
133
|
+
(outFunctionsControl)="handlerFunctionsControl($event)"
|
|
134
|
+
(outValueChange)="handlerValueChange($event)"
|
|
135
|
+
(outAddItem)="handlerAddItem($event)"
|
|
136
|
+
(outRemove)="handlerRemove($event)"
|
|
137
|
+
/>
|
|
138
|
+
<button (click)="validateAll()">Kiểm tra hợp lệ</button>
|
|
139
|
+
`,
|
|
140
|
+
})
|
|
141
|
+
export class UrlListComponent {
|
|
115
142
|
urlItems = signal<Array<IInputAdd>>([{ url: '' }]);
|
|
116
|
-
functionControls
|
|
143
|
+
private functionControls: IInputAddFunctionControlEvent | null = null;
|
|
117
144
|
|
|
118
|
-
|
|
119
|
-
|
|
145
|
+
handlerFunctionsControl(controls: IInputAddFunctionControlEvent): void {
|
|
146
|
+
this.functionControls = controls;
|
|
120
147
|
}
|
|
121
148
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
console.log('Is valid:', isValid);
|
|
149
|
+
handlerValueChange(event: IEmitValueChange): void {
|
|
150
|
+
// xử lý khi giá trị thay đổi
|
|
125
151
|
}
|
|
152
|
+
|
|
153
|
+
handlerAddItem(item: IInputAdd): void {
|
|
154
|
+
// xử lý khi thêm item mới
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
handlerRemove(item: IInputAdd): void {
|
|
158
|
+
// xử lý khi xóa item
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
async validateAll(): Promise<void> {
|
|
162
|
+
const isValid = await this.functionControls?.checkIsValid();
|
|
163
|
+
// xử lý kết quả validation
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Nhập số có đơn vị tính
|
|
169
|
+
|
|
170
|
+
```typescript
|
|
171
|
+
import { Component, signal } from '@angular/core';
|
|
172
|
+
import { LibsUiComponentsInputsAddComponent, IInputAdd } from '@libs-ui/components-inputs-add';
|
|
173
|
+
|
|
174
|
+
@Component({
|
|
175
|
+
selector: 'app-weight-list',
|
|
176
|
+
standalone: true,
|
|
177
|
+
imports: [LibsUiComponentsInputsAddComponent],
|
|
178
|
+
template: `
|
|
179
|
+
<libs_ui-components-inputs-add
|
|
180
|
+
[fieldNameBind]="'weight'"
|
|
181
|
+
[(items)]="weightItems"
|
|
182
|
+
[dataType]="'int'"
|
|
183
|
+
[placeholder]="'Nhập trọng lượng'"
|
|
184
|
+
[unitsRight]="[{ id: 'kg', label: 'Kg' }, { id: 'lb', label: 'Lbs' }]"
|
|
185
|
+
[keySelectedUnitRight]="'kg'"
|
|
186
|
+
[configUnitRight]="{ fieldKey: 'id', fieldLabel: 'label' }"
|
|
187
|
+
[labelConfig]="{ labelLeft: 'Trọng lượng', description: 'Nhập trọng lượng kèm đơn vị' }"
|
|
188
|
+
/>
|
|
189
|
+
`,
|
|
190
|
+
})
|
|
191
|
+
export class WeightListComponent {
|
|
192
|
+
weightItems = signal<Array<IInputAdd>>([{ weight: '' }]);
|
|
126
193
|
}
|
|
127
194
|
```
|
|
128
195
|
|
|
129
|
-
### Custom
|
|
130
|
-
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
196
|
+
### Custom button Add và ignoreValidEmptyField
|
|
197
|
+
|
|
198
|
+
```typescript
|
|
199
|
+
import { Component, signal } from '@angular/core';
|
|
200
|
+
import { LibsUiComponentsInputsAddComponent, IInputAdd } from '@libs-ui/components-inputs-add';
|
|
201
|
+
|
|
202
|
+
@Component({
|
|
203
|
+
selector: 'app-tag-list',
|
|
204
|
+
standalone: true,
|
|
205
|
+
imports: [LibsUiComponentsInputsAddComponent],
|
|
206
|
+
template: `
|
|
207
|
+
<libs_ui-components-inputs-add
|
|
208
|
+
[fieldNameBind]="'tag'"
|
|
209
|
+
[(items)]="tagItems"
|
|
210
|
+
[placeholder]="'Nhập tag'"
|
|
211
|
+
[maxItems]="8"
|
|
212
|
+
[ignoreValidEmptyField]="true"
|
|
213
|
+
[addItemButtonConfig]="{
|
|
214
|
+
type: 'button-link-primary',
|
|
215
|
+
label: 'Thêm tag',
|
|
216
|
+
classIconLeft: 'libs-ui-icon-add text-[10px] mr-[8px]'
|
|
217
|
+
}"
|
|
218
|
+
[labelConfig]="{ labelLeft: 'Tags', description: 'Ít nhất một tag là bắt buộc' }"
|
|
219
|
+
[validRequired]="{ message: 'Cần ít nhất một tag' }"
|
|
220
|
+
/>
|
|
221
|
+
`,
|
|
222
|
+
})
|
|
223
|
+
export class TagListComponent {
|
|
224
|
+
tagItems = signal<Array<IInputAdd>>([{ tag: '' }]);
|
|
225
|
+
}
|
|
146
226
|
```
|
|
147
227
|
|
|
148
|
-
##
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
|
155
|
-
|
|
|
156
|
-
| `[
|
|
157
|
-
| `[
|
|
158
|
-
| `[
|
|
159
|
-
| `[
|
|
160
|
-
| `[
|
|
161
|
-
| `[
|
|
162
|
-
| `[
|
|
163
|
-
| `[
|
|
164
|
-
| `[
|
|
165
|
-
| `[
|
|
166
|
-
| `[
|
|
167
|
-
| `[
|
|
168
|
-
| `[
|
|
169
|
-
| `[
|
|
170
|
-
| `[
|
|
171
|
-
| `[
|
|
172
|
-
| `[
|
|
173
|
-
| `[
|
|
174
|
-
| `[
|
|
175
|
-
| `[
|
|
176
|
-
| `[
|
|
177
|
-
| `[
|
|
178
|
-
| `[
|
|
179
|
-
| `[
|
|
180
|
-
| `[
|
|
181
|
-
| `[
|
|
182
|
-
| `[
|
|
183
|
-
| `[
|
|
184
|
-
| `[
|
|
185
|
-
| `[
|
|
186
|
-
| `[
|
|
187
|
-
| `[
|
|
188
|
-
| `[
|
|
189
|
-
| `[
|
|
190
|
-
| `[
|
|
191
|
-
| `[
|
|
192
|
-
| `[
|
|
193
|
-
| `[
|
|
194
|
-
| `[
|
|
195
|
-
| `[
|
|
196
|
-
| `[
|
|
197
|
-
| `[
|
|
198
|
-
| `[
|
|
199
|
-
| `[
|
|
200
|
-
| `[
|
|
201
|
-
| `[
|
|
202
|
-
| `[
|
|
203
|
-
| `[
|
|
204
|
-
| `[
|
|
205
|
-
| `[
|
|
206
|
-
| `[
|
|
207
|
-
| `[
|
|
208
|
-
| `[
|
|
209
|
-
| `[
|
|
210
|
-
| `[
|
|
211
|
-
| `[
|
|
212
|
-
| `[
|
|
213
|
-
| `[
|
|
214
|
-
| `[
|
|
215
|
-
| `[
|
|
216
|
-
| `[
|
|
217
|
-
| `[
|
|
218
|
-
| `[
|
|
219
|
-
| `[
|
|
220
|
-
| `[
|
|
221
|
-
| `[
|
|
222
|
-
| `[
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
|
231
|
-
|
|
|
232
|
-
| `(
|
|
233
|
-
| `(
|
|
234
|
-
| `(
|
|
235
|
-
| `(
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
228
|
+
## @Input()
|
|
229
|
+
|
|
230
|
+
| Input | Type | Default | Mô tả | Ví dụ |
|
|
231
|
+
|---|---|---|---|---|
|
|
232
|
+
| `[fieldNameBind]` | `string` | **required** | Tên property trong mỗi item dùng để bind giá trị | `[fieldNameBind]="'email'"` |
|
|
233
|
+
| `[(items)]` | `Array<IInputAdd>` | **required** | Mảng items — two-way binding qua model() | `[(items)]="emailItems"` |
|
|
234
|
+
| `[acceptNegativeValue]` | `boolean` | `false` | Cho phép nhập giá trị âm (dùng với dataType number) | `[acceptNegativeValue]="true"` |
|
|
235
|
+
| `[addItemButtonConfig]` | `IButton` | `undefined` | Cấu hình nút "Thêm mới" | `[addItemButtonConfig]="{ type: 'button-primary', label: 'Add' }"` |
|
|
236
|
+
| `[autoAddZeroLessThan10InTypeInt]` | `boolean` | `false` | Tự động thêm số 0 trước khi số < 10 (với kiểu int) | `[autoAddZeroLessThan10InTypeInt]="true"` |
|
|
237
|
+
| `[autoRemoveEmoji]` | `boolean` | `false` | Tự động loại bỏ emoji khỏi giá trị input | `[autoRemoveEmoji]="true"` |
|
|
238
|
+
| `[backgroundNone]` | `boolean` | `false` | Sử dụng nền trong suốt cho input | `[backgroundNone]="true"` |
|
|
239
|
+
| `[borderError]` | `boolean` | `false` | Hiển thị border màu đỏ khi có lỗi | `[borderError]="true"` |
|
|
240
|
+
| `[classContainerBottomInput]` | `string` | `undefined` | Class CSS cho vùng container phía dưới input | `[classContainerBottomInput]="'mt-2'"` |
|
|
241
|
+
| `[classContainerInput]` | `string` | `undefined` | Class CSS cho container bao ngoài mỗi input | `[classContainerInput]="'w-full'"` |
|
|
242
|
+
| `[classInclude]` | `string` | `undefined` | Class CSS bổ sung cho container chính của component | `[classInclude]="'mb-4'"` |
|
|
243
|
+
| `[classIncludeInput]` | `string` | `undefined` | Class CSS bổ sung cho từng input field | `[classIncludeInput]="'flex-1'"` |
|
|
244
|
+
| `[classMessageErrorInclude]` | `string` | `undefined` | Class CSS bổ sung cho message lỗi | `[classMessageErrorInclude]="'text-xs'"` |
|
|
245
|
+
| `[configItemAddToItems]` | `IInputAdd` | `undefined` | Template dữ liệu mặc định khi thêm item mới | `[configItemAddToItems]="{ unit: 'kg' }"` |
|
|
246
|
+
| `[configUnitLeft]` | `IInputValidUnitConfig` | `{ fieldKey: 'id', fieldLabel: 'label' }` | Cấu hình mapping field cho danh sách unit trái | `[configUnitLeft]="{ fieldKey: 'value', fieldLabel: 'name' }"` |
|
|
247
|
+
| `[configUnitRight]` | `IInputValidUnitConfig` | `{ fieldKey: 'id', fieldLabel: 'label' }` | Cấu hình mapping field cho danh sách unit phải | `[configUnitRight]="{ fieldKey: 'value', fieldLabel: 'name' }"` |
|
|
248
|
+
| `[dataType]` | `TYPE_DATA_TYPE_INPUT` | `undefined` | Kiểu dữ liệu input: text, int, float, email... | `[dataType]="'int'"` |
|
|
249
|
+
| `[defaultHeight]` | `number` | `undefined` | Chiều cao mặc định (px) của input | `[defaultHeight]="40"` |
|
|
250
|
+
| `[disable]` | `boolean` | `false` | Vô hiệu hóa toàn bộ inputs trong danh sách | `[disable]="true"` |
|
|
251
|
+
| `[emitEmptyInDataTypeNumber]` | `boolean` | `false` | Emit giá trị rỗng khi dataType là number và field trống | `[emitEmptyInDataTypeNumber]="true"` |
|
|
252
|
+
| `[fixedFloat]` | `number` | `undefined` | Số chữ số thập phân cố định (dataType float) | `[fixedFloat]="2"` |
|
|
253
|
+
| `[focusTimeOut]` | `number` | `undefined` | Thời gian delay (ms) trước khi focus input | `[focusTimeOut]="100"` |
|
|
254
|
+
| `[formInputSpacing]` | `number` | `8` | Khoảng cách (px) giữa các dòng input | `[formInputSpacing]="12"` |
|
|
255
|
+
| `[functionValid]` | `TYPE_FUNCTION_INPUT_VALID` | `undefined` | Hàm validate tùy chỉnh bổ sung | `[functionValid]="customValidFn"` |
|
|
256
|
+
| `[ignoreAddItem]` | `boolean` | `false` | Ẩn nút "Thêm mới" | `[ignoreAddItem]="true"` |
|
|
257
|
+
| `[ignoreRemove]` | `boolean` | `false` | Ẩn nút xóa cho tất cả items | `[ignoreRemove]="true"` |
|
|
258
|
+
| `[ignoreShowError]` | `boolean` | `false` | Ẩn hiển thị thông báo lỗi validation | `[ignoreShowError]="true"` |
|
|
259
|
+
| `[ignoreStopPropagationEvent]` | `boolean` | `false` | Không chặn sự kiện lan truyền (stopPropagation) | `[ignoreStopPropagationEvent]="true"` |
|
|
260
|
+
| `[ignoreUnitRightClassReadOnly]` | `boolean` | `false` | Không áp class readonly cho unit bên phải | `[ignoreUnitRightClassReadOnly]="true"` |
|
|
261
|
+
| `[ignoreValidEmptyField]` | `boolean` | `false` | Coi là valid nếu ít nhất 1 field có giá trị (không bắt buộc tất cả) | `[ignoreValidEmptyField]="true"` |
|
|
262
|
+
| `[ignoreWidthInput100]` | `boolean` | `false` | Không áp dụng width 100% cho input | `[ignoreWidthInput100]="true"` |
|
|
263
|
+
| `[isBaselineStyle]` | `boolean` | `false` | Căn chỉnh items theo baseline (dùng khi input có chiều cao khác nhau) | `[isBaselineStyle]="true"` |
|
|
264
|
+
| `[keepPlaceholderOnly]` | `boolean` | `false` | Chỉ giữ lại placeholder, ẩn các nội dung khác khi trống | `[keepPlaceholderOnly]="true"` |
|
|
265
|
+
| `[keySelectedUnitLeft]` | `any` | `undefined` | Giá trị key của unit bên trái đang được chọn | `[keySelectedUnitLeft]="'kg'"` |
|
|
266
|
+
| `[keySelectedUnitRight]` | `any` | `undefined` | Giá trị key của unit bên phải đang được chọn | `[keySelectedUnitRight]="'usd'"` |
|
|
267
|
+
| `[labelConfig]` | `ILabel` | `undefined` | Cấu hình toàn bộ label (tiêu đề, required, description, toggle...) | `[labelConfig]="{ labelLeft: 'Email', required: true }"` |
|
|
268
|
+
| `[leftTemplateItems]` | `ITemplateRightLeftItem` | *(default từ define)* | Cấu hình các loại template hiển thị bên trái mỗi item | `[leftTemplateItems]="customLeftTemplate"` |
|
|
269
|
+
| `[maxItems]` | `number` | `5` | Số lượng items tối đa được phép thêm | `[maxItems]="10"` |
|
|
270
|
+
| `[maxLength]` | `number` | `undefined` | Độ dài tối đa ký tự được nhập | `[maxLength]="100"` |
|
|
271
|
+
| `[maxLengthNumberCount]` | `number` | `undefined` | Độ dài tối đa cho kiểu number count | `[maxLengthNumberCount]="6"` |
|
|
272
|
+
| `[maxValueNumber]` | `number` | `undefined` | Giá trị số tối đa được phép nhập | `[maxValueNumber]="999"` |
|
|
273
|
+
| `[minItems]` | `number` | `1` | Số lượng items tối thiểu, không thể xóa nếu đạt mức này | `[minItems]="2"` |
|
|
274
|
+
| `[minValueNumber]` | `number` | `undefined` | Giá trị số tối thiểu được phép nhập | `[minValueNumber]="0"` |
|
|
275
|
+
| `[noBorder]` | `boolean` | `false` | Ẩn border của input | `[noBorder]="true"` |
|
|
276
|
+
| `[onlyAcceptNegativeValue]` | `boolean` | `false` | Chỉ chấp nhận giá trị âm | `[onlyAcceptNegativeValue]="true"` |
|
|
277
|
+
| `[paddingRightCustomSpecific]` | `number` | `undefined` | Giá trị padding-right tùy chỉnh cụ thể (fix lỗi count display) | `[paddingRightCustomSpecific]="40"` |
|
|
278
|
+
| `[placeholder]` | `string` | `undefined` | Placeholder mặc định áp dụng cho tất cả inputs | `[placeholder]="'Nhập giá trị'"` |
|
|
279
|
+
| `[positionMessageErrorStartInput]` | `boolean` | `false` | Hiển thị message lỗi bắt đầu từ vị trí input (bỏ qua template trái) | `[positionMessageErrorStartInput]="true"` |
|
|
280
|
+
| `[readonly]` | `boolean` | `false` | Đặt toàn bộ inputs thành chỉ đọc | `[readonly]="true"` |
|
|
281
|
+
| `[resetAutoCompletePassword]` | `boolean` | `false` | Reset autocomplete cho trường password | `[resetAutoCompletePassword]="true"` |
|
|
282
|
+
| `[resize]` | `'auto' \| 'none'` | `undefined` | Kiểu resize cho textarea | `[resize]="'auto'"` |
|
|
283
|
+
| `[rightTemplateItems]` | `ITemplateRightLeftItem` | *(default: remove + template)* | Cấu hình các loại template hiển thị bên phải mỗi item | `[rightTemplateItems]="customRightTemplate"` |
|
|
284
|
+
| `[showCount]` | `boolean` | `false` | Hiển thị bộ đếm ký tự | `[showCount]="true"` |
|
|
285
|
+
| `[tagInput]` | `TYPE_TAG_INPUT` | `undefined` | Tag HTML của input (input hoặc textarea) | `[tagInput]="'textarea'"` |
|
|
286
|
+
| `[templateLeftBottomInput]` | `TemplateRef<TYPE_TEMPLATE_REF>` | `undefined` | Template hiển thị phía dưới bên trái input | `[templateLeftBottomInput]="myTpl"` |
|
|
287
|
+
| `[templateLeftOutlet]` | `TemplateRef<TYPE_TEMPLATE_REF>` | `undefined` | Template outlet toàn cục hiển thị bên trái input | `[templateLeftOutlet]="leftTpl"` |
|
|
288
|
+
| `[templateRightBottomInput]` | `TemplateRef<TYPE_TEMPLATE_REF>` | `undefined` | Template hiển thị phía dưới bên phải input | `[templateRightBottomInput]="myTpl"` |
|
|
289
|
+
| `[templateRightOutlet]` | `TemplateRef<TYPE_TEMPLATE_REF>` | `undefined` | Template outlet toàn cục hiển thị bên phải input | `[templateRightOutlet]="rightTpl"` |
|
|
290
|
+
| `[typeInput]` | `TYPE_INPUT` | `undefined` | Kiểu input HTML: text, password, email... | `[typeInput]="'password'"` |
|
|
291
|
+
| `[unitsLeft]` | `Array<any>` | `undefined` | Danh sách đơn vị tính hiển thị bên trái input | `[unitsLeft]="[{ id: 'vnd', label: 'VND' }]"` |
|
|
292
|
+
| `[unitsRight]` | `Array<any>` | `undefined` | Danh sách đơn vị tính hiển thị bên phải input | `[unitsRight]="[{ id: 'kg', label: 'Kg' }]"` |
|
|
293
|
+
| `[useColorModeExist]` | `boolean` | `false` | Sử dụng color mode có sẵn | `[useColorModeExist]="true"` |
|
|
294
|
+
| `[validDuplicate]` | `IMessageTranslate` | `undefined` | Thông báo lỗi khi phát hiện giá trị trùng lặp | `[validDuplicate]="{ message: 'Giá trị đã tồn tại' }"` |
|
|
295
|
+
| `[validMaxLength]` | `IMessageTranslate` | `undefined` | Validate và thông báo khi vượt độ dài tối đa | `[validMaxLength]="{ message: 'Tối đa 50 ký tự' }"` |
|
|
296
|
+
| `[validMaxValue]` | `IMessageTranslate` | `undefined` | Validate và thông báo khi vượt giá trị số tối đa | `[validMaxValue]="{ message: 'Không được vượt quá 100' }"` |
|
|
297
|
+
| `[validMinLength]` | `IValidLength` | `undefined` | Validate độ dài tối thiểu | `[validMinLength]="{ length: 3, message: 'Tối thiểu 3 ký tự' }"` |
|
|
298
|
+
| `[validMinValue]` | `IMessageTranslate` | `undefined` | Validate và thông báo khi nhỏ hơn giá trị số tối thiểu | `[validMinValue]="{ message: 'Phải >= 0' }"` |
|
|
299
|
+
| `[validPattern]` | `Array<IValidPattern>` | `undefined` | Validate theo danh sách regex pattern | `[validPattern]="[{ pattern: /^[a-z]+$/, message: 'Chỉ chữ thường' }]"` |
|
|
300
|
+
| `[validRequired]` | `IValidRequired` | `undefined` | Validate bắt buộc nhập | `[validRequired]="{ message: 'Trường này bắt buộc' }"` |
|
|
301
|
+
| `[valuePatternShowError]` | `boolean` | `false` | Hiển thị lỗi pattern (khi pattern trả về false) | `[valuePatternShowError]="true"` |
|
|
302
|
+
| `[valueUpDownNumber]` | `number` | `undefined` | Bước nhảy tăng/giảm khi nhấn mũi tên trên số | `[valueUpDownNumber]="5"` |
|
|
303
|
+
|
|
304
|
+
## @Output()
|
|
305
|
+
|
|
306
|
+
| Output | Type | Mô tả | Handler TS | Binding HTML |
|
|
307
|
+
|---|---|---|---|---|
|
|
308
|
+
| `(outAddItem)` | `IInputAdd` | Emit khi người dùng nhấn nút thêm item mới | `handlerAddItem(item: IInputAdd): void { item; }` | `(outAddItem)="handlerAddItem($event)"` |
|
|
309
|
+
| `(outClickButtonLabel)` | `IButton` | Emit khi click button trong khu vực label | `handlerClickButtonLabel(button: IButton): void { button; }` | `(outClickButtonLabel)="handlerClickButtonLabel($event)"` |
|
|
310
|
+
| `(outFunctionsControl)` | `IInputAddFunctionControlEvent` | Emit API functions để component cha thực hiện validate hoặc set error | `handlerFunctionsControl(controls: IInputAddFunctionControlEvent): void { this.controls = controls; }` | `(outFunctionsControl)="handlerFunctionsControl($event)"` |
|
|
311
|
+
| `(outLabelLeftClick)` | `MouseEvent` | Emit khi click vào label bên trái | `handlerLabelLeftClick(event: MouseEvent): void { event.stopPropagation(); }` | `(outLabelLeftClick)="handlerLabelLeftClick($event)"` |
|
|
312
|
+
| `(outLabelRightClick)` | `boolean` | Emit khi click vào label bên phải | `handlerLabelRightClick(value: boolean): void { value; }` | `(outLabelRightClick)="handlerLabelRightClick($event)"` |
|
|
313
|
+
| `(outRemove)` | `IInputAdd` | Emit item vừa bị xóa khi người dùng nhấn nút remove | `handlerRemove(item: IInputAdd): void { item; }` | `(outRemove)="handlerRemove($event)"` |
|
|
314
|
+
| `(outSwitchEventLabel)` | `ISwitchEvent` | Emit sự kiện switch/toggle trong khu vực label | `handlerSwitchLabel(event: ISwitchEvent): void { event; }` | `(outSwitchEventLabel)="handlerSwitchLabel($event)"` |
|
|
315
|
+
| `(outValueChange)` | `IEmitValueChange` | Emit mỗi khi giá trị của bất kỳ input nào trong danh sách thay đổi | `handlerValueChange(event: IEmitValueChange): void { event.value; event.item; }` | `(outValueChange)="handlerValueChange($event)"` |
|
|
316
|
+
|
|
317
|
+
## FunctionsControl
|
|
318
|
+
|
|
319
|
+
Component expose API thông qua `(outFunctionsControl)` để component cha có thể gọi validate hoặc set error từ bên ngoài.
|
|
320
|
+
|
|
321
|
+
```typescript
|
|
322
|
+
// Nhận và lưu functions control
|
|
323
|
+
private functionControls: IInputAddFunctionControlEvent | null = null;
|
|
324
|
+
|
|
325
|
+
handlerFunctionsControl(controls: IInputAddFunctionControlEvent): void {
|
|
326
|
+
this.functionControls = controls;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
// Gọi validate tất cả items
|
|
330
|
+
async validateAll(): Promise<void> {
|
|
331
|
+
const isValid = await this.functionControls?.checkIsValid();
|
|
332
|
+
// isValid = true nếu tất cả inputs hợp lệ
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
// Đặt thông báo lỗi cho tất cả items
|
|
336
|
+
async setAllErrors(message: string): Promise<void> {
|
|
337
|
+
await this.functionControls?.setMessageError(message);
|
|
338
|
+
}
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
| Method | Signature | Mô tả |
|
|
342
|
+
|---|---|---|
|
|
343
|
+
| `checkIsValid()` | `() => Promise<boolean>` | Kiểm tra validation tất cả items, trả về `true` nếu hợp lệ. Bỏ qua items có `disable` hoặc `readonly`. |
|
|
344
|
+
| `setMessageError(message)` | `(message: string) => Promise<void>` | Đặt thông báo lỗi tùy chỉnh cho tất cả items trong danh sách. |
|
|
247
345
|
|
|
248
346
|
## Types & Interfaces
|
|
249
347
|
|
|
250
348
|
```typescript
|
|
349
|
+
import {
|
|
350
|
+
IInputAdd,
|
|
351
|
+
IInputAddFunctionControlEvent,
|
|
352
|
+
IEmitValueChange,
|
|
353
|
+
ITemplateRightLeftItem,
|
|
354
|
+
} from '@libs-ui/components-inputs-add';
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
```typescript
|
|
358
|
+
// Interface cho mỗi item trong danh sách
|
|
359
|
+
// Mở rộng Record<string, any> để hỗ trợ dynamic field theo fieldNameBind
|
|
251
360
|
interface IInputAdd extends Record<string, any> {
|
|
252
|
-
uniqKey?: string;
|
|
253
|
-
disable?: boolean;
|
|
254
|
-
readonly?: boolean;
|
|
255
|
-
ignoreRemove?: boolean;
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
templateLeftOutlet?: TemplateRef<TYPE_TEMPLATE_REF>;
|
|
271
|
-
templateRightOutlet?: TemplateRef<TYPE_TEMPLATE_REF>;
|
|
272
|
-
functionControl?: IInputValidFunctionControlEvent;
|
|
273
|
-
|
|
274
|
-
[key: string]: any;
|
|
361
|
+
uniqKey?: string; // key nội bộ, tự động tạo
|
|
362
|
+
disable?: boolean; // disable item riêng lẻ
|
|
363
|
+
readonly?: boolean; // readonly item riêng lẻ
|
|
364
|
+
ignoreRemove?: boolean; // ẩn nút xóa cho item này
|
|
365
|
+
placeholder?: string; // placeholder riêng cho item
|
|
366
|
+
maxValueNumber?: number; // giá trị số tối đa riêng
|
|
367
|
+
minValueNumber?: number; // giá trị số tối thiểu riêng
|
|
368
|
+
maxLength?: number; // độ dài tối đa riêng
|
|
369
|
+
unitsLeft?: Array<any>; // units trái riêng cho item
|
|
370
|
+
configUnitLeft?: IInputValidUnitConfig; // config unit trái riêng
|
|
371
|
+
keySelectedUnitLeft?: any; // unit trái đang chọn riêng
|
|
372
|
+
unitsRight?: Array<any>; // units phải riêng cho item
|
|
373
|
+
configUnitRight?: IInputValidUnitConfig; // config unit phải riêng
|
|
374
|
+
keySelectedUnitRight?: any; // unit phải đang chọn riêng
|
|
375
|
+
templateLeftOutlet?: TemplateRef<TYPE_TEMPLATE_REF>; // template trái riêng
|
|
376
|
+
templateRightOutlet?: TemplateRef<TYPE_TEMPLATE_REF>; // template phải riêng
|
|
377
|
+
functionControl?: IInputValidFunctionControlEvent; // internal, tự quản lý
|
|
378
|
+
[key: string]: any; // dynamic properties
|
|
275
379
|
}
|
|
276
380
|
|
|
381
|
+
// API functions để validate và set error từ component cha
|
|
277
382
|
interface IInputAddFunctionControlEvent {
|
|
278
383
|
checkIsValid: () => Promise<boolean>;
|
|
279
384
|
setMessageError: (message: string) => Promise<void>;
|
|
280
385
|
}
|
|
281
386
|
|
|
387
|
+
// Event emit khi giá trị thay đổi
|
|
282
388
|
interface IEmitValueChange {
|
|
283
|
-
value: string | number;
|
|
284
|
-
item: IInputAdd;
|
|
389
|
+
value: string | number; // giá trị mới
|
|
390
|
+
item: IInputAdd; // item bị thay đổi
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
// Cấu hình template trái/phải của danh sách items
|
|
394
|
+
interface ITemplateRightLeftItem {
|
|
395
|
+
classInclude?: string;
|
|
396
|
+
items: Array<{
|
|
397
|
+
type: 'remove' | 'template'; // 'remove': nút xóa, 'template': custom template
|
|
398
|
+
classInclude?: string;
|
|
399
|
+
}>;
|
|
285
400
|
}
|
|
286
401
|
```
|
|
287
402
|
|
|
288
|
-
##
|
|
403
|
+
## Lưu ý quan trọng
|
|
289
404
|
|
|
290
|
-
|
|
291
|
-
| --------------- | ------- | ---------------- |
|
|
292
|
-
| Angular | 18+ | Framework |
|
|
293
|
-
| Angular Signals | - | State management |
|
|
294
|
-
| TailwindCSS | 3.x | Styling |
|
|
295
|
-
| OnPush | - | Change Detection |
|
|
405
|
+
⚠️ **fieldNameBind bắt buộc**: Phải truyền `[fieldNameBind]` để component biết property nào trong `IInputAdd` chứa giá trị. Ví dụ `[fieldNameBind]="'email'"` thì mỗi item phải có field `email`.
|
|
296
406
|
|
|
297
|
-
|
|
407
|
+
⚠️ **items là two-way binding**: `items` sử dụng `model()` (Angular signal two-way binding). Dùng cú pháp `[(items)]="myItems"` để nhận cập nhật khi add/remove. Nếu chỉ truyền `[items]` một chiều, array trong component cha sẽ không được cập nhật.
|
|
298
408
|
|
|
299
|
-
|
|
300
|
-
npx nx serve core-ui
|
|
301
|
-
```
|
|
409
|
+
⚠️ **Khởi tạo items**: Nếu truyền vào `items` là mảng rỗng `[]`, component tự động tạo một item mặc định `{ [fieldNameBind]: '' }` trong `ngOnInit`.
|
|
302
410
|
|
|
303
|
-
|
|
411
|
+
⚠️ **Debounce validation**: Validation tự động chạy sau 250ms debounce khi value thay đổi hoặc khi remove item. Không cần gọi `checkIsValid()` thủ công sau mỗi lần nhập.
|
|
304
412
|
|
|
305
|
-
|
|
413
|
+
⚠️ **ignoreValidEmptyField**: Khi bật `[ignoreValidEmptyField]="true"`, nếu ít nhất 1 field trong danh sách có giá trị thì toàn bộ fields trống đều được coi là valid. Dùng cho trường hợp "nhập ít nhất một giá trị".
|
|
306
414
|
|
|
307
|
-
|
|
308
|
-
# Chạy tests
|
|
309
|
-
npx nx test components-inputs-add
|
|
415
|
+
⚠️ **minItems và remove**: Nút remove sẽ bị ẩn tự động khi số lượng items hiện tại bằng giá trị `minItems`. Mặc định `minItems = 1` nên luôn giữ ít nhất 1 item.
|
|
310
416
|
|
|
311
|
-
|
|
312
|
-
npx nx test components-inputs-add --coverage
|
|
417
|
+
⚠️ **Per-item config**: Mỗi `IInputAdd` item có thể override nhiều thuộc tính như `placeholder`, `maxLength`, `disable`, `readonly`, `ignoreRemove`, `unitsLeft/Right` riêng — ưu tiên hơn config toàn cục.
|
|
313
418
|
|
|
314
|
-
|
|
315
|
-
npx nx test components-inputs-add --watch
|
|
316
|
-
```
|
|
419
|
+
## Demo
|
|
317
420
|
|
|
318
|
-
|
|
421
|
+
```bash
|
|
422
|
+
npx nx serve core-ui
|
|
423
|
+
```
|
|
319
424
|
|
|
320
|
-
|
|
425
|
+
Truy cập: `http://localhost:4500/inputs/add`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NgTemplateOutlet } from '@angular/common';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { signal, input, model, output,
|
|
3
|
+
import { signal, input, model, output, Component, ChangeDetectionStrategy } from '@angular/core';
|
|
4
4
|
import { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';
|
|
5
5
|
import { LibsUiComponentsInputsValidComponent } from '@libs-ui/components-inputs-valid';
|
|
6
6
|
import { LibsUiComponentsLabelComponent } from '@libs-ui/components-label';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libs-ui-components-inputs-add.mjs","sources":["../../../../../../libs-ui/components/inputs/add/src/defines/add.define.ts","../../../../../../libs-ui/components/inputs/add/src/add.component.ts","../../../../../../libs-ui/components/inputs/add/src/add.component.html","../../../../../../libs-ui/components/inputs/add/src/libs-ui-components-inputs-add.ts"],"sourcesContent":["import { ITemplateRightLeftItem } from '../interfaces/input-add.interface';\n\nexport const rightTemplateItems = (): ITemplateRightLeftItem => {\n return {\n classInclude: '',\n items: [\n {\n type: 'remove',\n classInclude: '',\n },\n {\n type: 'template',\n classInclude: '',\n },\n ],\n };\n};\n\nexport const leftTemplateItems = (): ITemplateRightLeftItem => {\n return {\n classInclude: '',\n items: [\n {\n type: 'remove',\n classInclude: '',\n },\n {\n type: 'template',\n classInclude: '',\n },\n ],\n };\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, model, OnInit, output, signal, TemplateRef } from '@angular/core';\nimport { IButton, LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { IInputValidFunctionControlEvent, IInputValidUnitConfig, IValidLength, IValidPattern, IValidRequired, LibsUiComponentsInputsValidComponent, TYPE_FUNCTION_INPUT_VALID } from '@libs-ui/components-inputs-valid';\nimport { ILabel, LibsUiComponentsLabelComponent } from '@libs-ui/components-label';\nimport { ISwitchEvent } from '@libs-ui/components-switch';\nimport { IMessageTranslate, TYPE_TEMPLATE_REF } from '@libs-ui/interfaces-types';\nimport { cloneDeep, uuid } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { leftTemplateItems, rightTemplateItems } from './defines/add.define';\nimport { IEmitValueChange, IInputAdd, ITemplateRightLeftItem } from './interfaces';\nimport { IInputAddFunctionControlEvent } from './interfaces/function-control-event.interface';\nimport { TYPE_DATA_TYPE_INPUT, TYPE_INPUT, TYPE_TAG_INPUT } from '@libs-ui/components-inputs-input';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-add',\n templateUrl: './add.component.html',\n standalone: true,\n imports: [TranslateModule, NgTemplateOutlet, LibsUiComponentsButtonsButtonComponent, LibsUiComponentsInputsValidComponent, LibsUiComponentsLabelComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LibsUiComponentsInputsAddComponent implements OnInit {\n // #region PROPERTY\n private readonly timeOutKeyUp = signal<number>(0);\n\n // #region INPUT\n readonly fieldNameBind = input.required<string>();\n readonly items = model.required<Array<IInputAdd>>();\n readonly readonly = input<boolean>(false);\n readonly disable = input<boolean>(false);\n readonly addItemButtonConfig = input<IButton>();\n readonly placeholder = input<string>();\n readonly labelConfig = input<ILabel>();\n readonly formInputSpacing = input<number>(8); // khoảng cách giữa hai ô input\n readonly configItemAddToItems = input<IInputAdd>();\n readonly rightTemplateItems = input<ITemplateRightLeftItem>(rightTemplateItems());\n readonly leftTemplateItems = input<ITemplateRightLeftItem>(leftTemplateItems());\n readonly templateLeftOutlet = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n readonly templateRightOutlet = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n readonly ignoreWidthInput100 = input<boolean>();\n readonly classIncludeInput = input<string>();\n readonly classContainerInput = input<string>();\n readonly showCount = input<boolean>();\n readonly ignoreValidEmptyField = input<boolean>(); // chỉ cần có ít nhất 1 field có giá trị là valid\n\n readonly emitEmptyInDataTypeNumber = input<boolean>();\n readonly tagInput = input<TYPE_TAG_INPUT>();\n readonly dataType = input<TYPE_DATA_TYPE_INPUT>();\n readonly typeInput = input<TYPE_INPUT>();\n readonly fixedFloat = input<number>();\n readonly acceptNegativeValue = input<boolean>();\n readonly valueUpDownNumber = input<number | undefined>();\n readonly resetAutoCompletePassword = input<boolean>();\n readonly noBorder = input<boolean>();\n readonly backgroundNone = input<boolean>();\n readonly useColorModeExist = input<boolean>();\n readonly keepPlaceholderOnly = input<boolean>();\n\n readonly classContainerBottomInput = input<string>();\n readonly autoRemoveEmoji = input<boolean>();\n readonly defaultHeight = input<number>();\n readonly ignoreShowError = input<boolean>();\n readonly borderError = input<boolean>();\n\n readonly unitsLeft = input<Array<any>>();\n readonly configUnitLeft = input<IInputValidUnitConfig>({\n fieldKey: 'id',\n fieldLabel: 'label',\n });\n readonly keySelectedUnitLeft = input<any>();\n\n readonly unitsRight = input<Array<any>>();\n readonly configUnitRight = input<IInputValidUnitConfig>({\n fieldKey: 'id',\n fieldLabel: 'label',\n });\n readonly keySelectedUnitRight = input<any>();\n\n readonly maxValueNumber = input<number>();\n readonly minValueNumber = input<number>();\n readonly isBaselineStyle = input<boolean>(); // align-items-baseline dùng khi căn input thẳng hàng với tất cả các phần khác dù có validate hay bất cứ 1 cái gì\n\n readonly valuePatternShowError = input<boolean>(); // mặc định khi test pattern trả tề giá trị bằng false sẽ báo lỗi\n readonly validPattern = input<Array<IValidPattern>>();\n readonly validRequired = input<IValidRequired>();\n readonly validMinLength = input<IValidLength>();\n readonly validMinValue = input<IMessageTranslate>();\n readonly validMaxValue = input<IMessageTranslate>();\n readonly validMaxLength = input<IMessageTranslate>();\n readonly validDuplicate = input<IMessageTranslate>();\n readonly functionValid = input<TYPE_FUNCTION_INPUT_VALID>();\n readonly maxLength = input<number>();\n readonly positionMessageErrorStartInput = input<boolean>(); // khi có template left và right mà muốn mesage error xuất hiện bắt đầu từ ô input thay vì bắt đầu từ template trái\n readonly classInclude = input<string>();\n readonly resize = input<'auto' | 'none'>();\n readonly templateLeftBottomInput = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n readonly templateRightBottomInput = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n readonly onlyAcceptNegativeValue = input<boolean>();\n readonly autoAddZeroLessThan10InTypeInt = input<boolean>();\n readonly maxLengthNumberCount = input<number>();\n readonly classMessageErrorInclude = input<string>();\n readonly ignoreStopPropagationEvent = input<boolean>();\n readonly ignoreUnitRightClassReadOnly = input<boolean>();\n readonly paddingRightCustomSpecific = input<number>(); // fix paddingRight count ko auto tính #52185\n readonly focusTimeOut = input<number>();\n\n readonly ignoreAddItem = input<boolean>(false);\n readonly ignoreRemove = input<boolean>(false);\n readonly maxItems = input<number>(5); // số lượng input tối đa\n readonly minItems = input<number>(1); // không được phép xóa nếu số lượng items <= minItems.length\n\n // #region OUTPUT\n readonly outFunctionsControl = output<IInputAddFunctionControlEvent>();\n readonly outRemove = output<IInputAdd>();\n readonly outAddItem = output<IInputAdd>();\n readonly outClickButtonLabel = output<IButton>();\n readonly outSwitchEventLabel = output<ISwitchEvent>();\n readonly outLabelRightClick = output<boolean>();\n readonly outLabelLeftClick = output<MouseEvent>();\n readonly outValueChange = output<IEmitValueChange>();\n\n ngOnInit() {\n if (!this.items().length) {\n this.items.set([{ [this.fieldNameBind()]: '' }]);\n }\n\n this.items.update((items) =>\n items.map((item) => {\n return { ...item, uniqKey: uuid() };\n })\n );\n\n this.outFunctionsControl.emit(this.FunctionsControl);\n }\n\n /* FUNCTIONS */\n public get FunctionsControl(): IInputAddFunctionControlEvent {\n return {\n checkIsValid: this.checkIsValid.bind(this),\n setMessageError: this.setMessageError.bind(this),\n };\n }\n\n private async setMessageError(message: string) {\n for (const item of this.items()) {\n await item.functionControl?.setMessageError(message);\n }\n }\n\n private async checkIsValid(checkValidRequired = true, currentItem?: IInputAdd): Promise<boolean> {\n let valid = true;\n\n if (this.disable() || this.readonly()) {\n return true;\n }\n\n for (const input of this.items()) {\n if (input.readonly || input.disable) {\n continue;\n }\n\n if (checkValidRequired && !(await this.checkValidRequired(input))) {\n valid = false;\n continue;\n }\n\n if (currentItem?.uniqKey === input.uniqKey) {\n valid = (await input.functionControl?.checkIsValid()) ?? false;\n }\n\n if (!this.validDuplicate()) {\n continue;\n }\n\n if (!input[this.fieldNameBind()]) {\n continue;\n }\n\n if (typeof input[this.fieldNameBind()] === 'string' && !input[this.fieldNameBind()].trim()) {\n continue;\n }\n\n const fieldsDuplicate = this.items().filter((element) => element[this.fieldNameBind()] === input[this.fieldNameBind()]);\n if (!fieldsDuplicate?.length) {\n input.functionControl?.setMessageError('');\n\n continue;\n }\n\n if (fieldsDuplicate.length < 2) {\n input.functionControl?.setMessageError('');\n\n continue;\n }\n valid = false;\n input.functionControl?.setMessageError(this.validDuplicate()?.message || 'i18n_valid_duplicate_msg');\n }\n\n return valid;\n }\n\n private async checkValidRequired(input: IInputAdd) {\n let valid = true;\n const validIfAtLeastOneValue = this.ignoreValidEmptyField() && this.items().find((item) => !!item[this.fieldNameBind()]?.trim());\n\n if (validIfAtLeastOneValue) {\n input.functionControl?.setMessageError('');\n return true;\n }\n\n if (!(await input.functionControl?.checkIsValid())) {\n valid = false;\n }\n\n return valid;\n }\n\n protected handlerAddItem(event: Event) {\n event.stopPropagation();\n\n if (!this.configItemAddToItems()) {\n const newItem: IInputAdd = { uniqKey: uuid(), [this.fieldNameBind()]: '' };\n this.items.update((items) => [...items, newItem]);\n this.outAddItem.emit(newItem);\n\n return;\n }\n const newItem: IInputAdd = { ...cloneDeep(this.configItemAddToItems), uniqKey: uuid(), [this.fieldNameBind()]: '' };\n this.items.update((items) => [...items, newItem]);\n this.outAddItem.emit(newItem);\n }\n\n protected handlerRemove(event: Event, item: IInputAdd, index: number) {\n event.stopPropagation();\n this.items.update((currentItems) => currentItems.filter((_, i) => i !== index));\n this.outRemove.emit(item);\n this.timeOutKeyUp.set(\n setTimeout(() => {\n clearTimeout(this.timeOutKeyUp());\n this.checkIsValid(false);\n }, 250)\n );\n }\n\n protected handlerClickButtonLabel(button: IButton) {\n this.outClickButtonLabel.emit(button);\n }\n\n protected handlerSwitchLabel(event: ISwitchEvent) {\n this.outSwitchEventLabel.emit(event);\n }\n\n protected handlerEventLabelLeftLabel(event: MouseEvent) {\n this.outLabelLeftClick.emit(event);\n }\n\n protected handlerEventLabelRightLabel() {\n this.outLabelRightClick.emit(true);\n }\n\n protected handlerFunctionsControl(event: IInputValidFunctionControlEvent, item: IInputAdd) {\n item.functionControl = event;\n }\n\n protected handlerValueChange(value: string | number, item: IInputAdd) {\n item[this.fieldNameBind()] = value;\n\n this.outValueChange.emit({ value, item });\n\n this.timeOutKeyUp.set(\n setTimeout(() => {\n clearTimeout(this.timeOutKeyUp());\n this.checkIsValid(false, item);\n }, 250)\n );\n }\n}\n","@if (fieldNameBind() && items(); as items) {\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label\n [labelLeft]=\"labelConfig.labelLeft\"\n [classInclude]=\"labelConfig.classInclude\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [labelLeftBehindToggleButton]=\"labelConfig.labelLeftBehindToggleButton\"\n [popover]=\"labelConfig.popover\"\n [required]=\"labelConfig.required\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsRight]=\"labelConfig.disableButtonsRight\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [labelRightRequired]=\"labelConfig.labelRightRequired\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleSize]=\"labelConfig.toggleSize || 'default'\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable\"\n [description]=\"labelConfig.description\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [zIndexPopover]=\"labelConfig.zIndexPopover || 10\"\n [timerDestroyPopover]=\"labelConfig.timerDestroyPopover || 0\"\n [count]=\"labelConfig.count\"\n [limitLength]=\"labelConfig.limitLength\"\n (outClickButton)=\"handlerClickButtonLabel($event)\"\n (outSwitchEvent)=\"handlerSwitchLabel($event)\"\n (outLabelLeftClick)=\"handlerEventLabelLeftLabel($event)\"\n (outLabelRightClick)=\"handlerEventLabelRightLabel()\" />\n }\n @for (item of items; track item.uniqKey; let first = $first; let index = $index) {\n <div\n class=\"flex\"\n [style.marginTop.px]=\"!first ? formInputSpacing() : 0\">\n @if (leftTemplateItems(); as leftTemplateItems) {\n <div class=\"flex {{ leftTemplateItems.classInclude }}\">\n @for (rightItem of leftTemplateItems.items; track $index) {\n @switch (rightItem.type) {\n @case ('template') {\n @if (item.templateLeftOutlet || templateLeftOutlet()) {\n <ng-container *ngTemplateOutlet=\"item.templateLeftOutlet || templateLeftOutlet() || null; context: { item: item, index: index }\" />\n }\n }\n }\n }\n </div>\n }\n <libs_ui-components-inputs-valid\n [item]=\"item\"\n [fieldNameBind]=\"fieldNameBind()\"\n [placeholder]=\"item.placeholder ?? placeholder()\"\n [emitEmptyInDataTypeNumber]=\"emitEmptyInDataTypeNumber()\"\n [tagInput]=\"tagInput()\"\n [dataType]=\"dataType()\"\n [fixedFloat]=\"fixedFloat()\"\n [readonly]=\"readonly() || item.readonly\"\n [disable]=\"disable() || item.disable\"\n [classContainerInput]=\"classContainerInput()\"\n [classIncludeInput]=\"classIncludeInput()\"\n [acceptNegativeValue]=\"acceptNegativeValue()\"\n [valueUpDownNumber]=\"valueUpDownNumber() || 1\"\n [ignoreWidthInput100]=\"ignoreWidthInput100()\"\n [showCount]=\"showCount()\"\n [resetAutoCompletePassword]=\"resetAutoCompletePassword()\"\n [noBorder]=\"noBorder()\"\n [backgroundNone]=\"backgroundNone()\"\n [useColorModeExist]=\"useColorModeExist()\"\n [keepPlaceholderOnly]=\"keepPlaceholderOnly()\"\n [classContainerBottomInput]=\"classContainerBottomInput()\"\n [autoRemoveEmoji]=\"autoRemoveEmoji()\"\n [defaultHeight]=\"defaultHeight()\"\n [ignoreShowError]=\"ignoreShowError()\"\n [borderError]=\"borderError()\"\n [unitsLeft]=\"item.unitsLeft || unitsLeft()\"\n [configUnitLeft]=\"item.configUnitLeft || configUnitLeft()\"\n [keySelectedUnitLeft]=\"item.keySelectedUnitLeft || keySelectedUnitLeft()\"\n [unitsRight]=\"item.unitsRight || unitsRight()\"\n [configUnitRight]=\"item.configUnitRight || configUnitRight()\"\n [keySelectedUnitRight]=\"item.keySelectedUnitRight || keySelectedUnitRight()\"\n [maxValueNumber]=\"item.maxValueNumber || maxValueNumber()\"\n [minValueNumber]=\"item.minValueNumber || minValueNumber()\"\n [isBaselineStyle]=\"isBaselineStyle()\"\n [valuePatternShowError]=\"valuePatternShowError()\"\n [validPattern]=\"validPattern()\"\n [validRequired]=\"validRequired()\"\n [validMinLength]=\"validMinLength()\"\n [validMinValue]=\"validMinValue()\"\n [validMaxValue]=\"validMaxValue()\"\n [validMaxLength]=\"validMaxLength()\"\n [functionValid]=\"functionValid()\"\n [maxLength]=\"item.maxLength || maxLength()\"\n [positionMessageErrorStartInput]=\"positionMessageErrorStartInput()\"\n [classInclude]=\"classInclude()\"\n [onlyAcceptNegativeValue]=\"onlyAcceptNegativeValue()\"\n [autoAddZeroLessThan10InTypeInt]=\"autoAddZeroLessThan10InTypeInt()\"\n [maxLengthNumberCount]=\"maxLengthNumberCount()\"\n [classMessageErrorInclude]=\"classMessageErrorInclude()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [ignoreUnitRightClassReadOnly]=\"ignoreUnitRightClassReadOnly()\"\n [paddingRightCustomSpecific]=\"paddingRightCustomSpecific()\"\n [focusTimeOut]=\"focusTimeOut()\"\n (outValueChange)=\"handlerValueChange($event, item)\"\n (outFunctionsControl)=\"handlerFunctionsControl($event, item)\" />\n\n @if (rightTemplateItems(); as rightTemplateItems) {\n <div\n class=\"flex items-center {{ rightTemplateItems.classInclude }}\"\n [style.height.px]=\"defaultHeight() || 32\">\n @for (rightItem of rightTemplateItems.items; track $index) {\n @switch (rightItem.type) {\n @case ('remove') {\n @if (!ignoreRemove() && !item.ignoreRemove && items.length > minItems()) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-remove mr-[0px]'\"\n classInclude=\"libs-ui-icon-hover-danger !p-[2px] ml-[16px] {{ rightItem.classInclude }}\"\n (outClick)=\"handlerRemove($event, item, index)\" />\n }\n }\n\n @case ('template') {\n @if (item.templateRightOutlet || templateRightOutlet()) {\n <ng-container *ngTemplateOutlet=\"item.templateRightOutlet || templateRightOutlet() || null; context: { item: item, index: index }\" />\n }\n }\n }\n }\n </div>\n }\n </div>\n }\n}\n\n@if (!ignoreAddItem() && (!maxItems() || items().length < maxItems())) {\n <libs_ui-components-buttons-button\n [type]=\"addItemButtonConfig()?.type || 'button-link-primary'\"\n [label]=\"addItemButtonConfig()?.label || 'i18n_add_new'\"\n [classLabel]=\"addItemButtonConfig()?.classLabel || 'libs-uifont-head-5m'\"\n [classIconLeft]=\"addItemButtonConfig()?.classIconLeft || 'libs-ui-icon-add text-[10px] mr-[8px]'\"\n [classInclude]=\"addItemButtonConfig()?.classInclude || '!pb-0 !pl-0 !py-[2px] mt-[8px]'\"\n [disable]=\"disable() || false\"\n (outClick)=\"handlerAddItem($event)\" />\n}\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-inputs-add.mjs","sources":["../../../../../../libs-ui/components/inputs/add/src/defines/add.define.ts","../../../../../../libs-ui/components/inputs/add/src/add.component.ts","../../../../../../libs-ui/components/inputs/add/src/add.component.html","../../../../../../libs-ui/components/inputs/add/src/libs-ui-components-inputs-add.ts"],"sourcesContent":["import { ITemplateRightLeftItem } from '../interfaces/input-add.interface';\n\nexport const rightTemplateItems = (): ITemplateRightLeftItem => {\n return {\n classInclude: '',\n items: [\n {\n type: 'remove',\n classInclude: '',\n },\n {\n type: 'template',\n classInclude: '',\n },\n ],\n };\n};\n\nexport const leftTemplateItems = (): ITemplateRightLeftItem => {\n return {\n classInclude: '',\n items: [\n {\n type: 'remove',\n classInclude: '',\n },\n {\n type: 'template',\n classInclude: '',\n },\n ],\n };\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, model, OnInit, output, signal, TemplateRef } from '@angular/core';\nimport { IButton, LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { IInputValidFunctionControlEvent, IInputValidUnitConfig, IValidLength, IValidPattern, IValidRequired, LibsUiComponentsInputsValidComponent, TYPE_FUNCTION_INPUT_VALID } from '@libs-ui/components-inputs-valid';\nimport { ILabel, LibsUiComponentsLabelComponent } from '@libs-ui/components-label';\nimport { ISwitchEvent } from '@libs-ui/components-switch';\nimport { IMessageTranslate, TYPE_TEMPLATE_REF } from '@libs-ui/interfaces-types';\nimport { cloneDeep, uuid } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { leftTemplateItems, rightTemplateItems } from './defines/add.define';\nimport { IEmitValueChange, IInputAdd, ITemplateRightLeftItem } from './interfaces';\nimport { IInputAddFunctionControlEvent } from './interfaces/function-control-event.interface';\nimport { TYPE_DATA_TYPE_INPUT, TYPE_INPUT, TYPE_TAG_INPUT } from '@libs-ui/components-inputs-input';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-add',\n templateUrl: './add.component.html',\n standalone: true,\n imports: [TranslateModule, NgTemplateOutlet, LibsUiComponentsButtonsButtonComponent, LibsUiComponentsInputsValidComponent, LibsUiComponentsLabelComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LibsUiComponentsInputsAddComponent implements OnInit {\n // #region PROPERTY\n private readonly timeOutKeyUp = signal<number>(0);\n\n // #region INPUT\n readonly fieldNameBind = input.required<string>();\n readonly items = model.required<Array<IInputAdd>>();\n readonly readonly = input<boolean>(false);\n readonly disable = input<boolean>(false);\n readonly addItemButtonConfig = input<IButton>();\n readonly placeholder = input<string>();\n readonly labelConfig = input<ILabel>();\n readonly formInputSpacing = input<number>(8); // khoảng cách giữa hai ô input\n readonly configItemAddToItems = input<IInputAdd>();\n readonly rightTemplateItems = input<ITemplateRightLeftItem>(rightTemplateItems());\n readonly leftTemplateItems = input<ITemplateRightLeftItem>(leftTemplateItems());\n readonly templateLeftOutlet = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n readonly templateRightOutlet = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n readonly ignoreWidthInput100 = input<boolean>();\n readonly classIncludeInput = input<string>();\n readonly classContainerInput = input<string>();\n readonly showCount = input<boolean>();\n readonly ignoreValidEmptyField = input<boolean>(); // chỉ cần có ít nhất 1 field có giá trị là valid\n\n readonly emitEmptyInDataTypeNumber = input<boolean>();\n readonly tagInput = input<TYPE_TAG_INPUT>();\n readonly dataType = input<TYPE_DATA_TYPE_INPUT>();\n readonly typeInput = input<TYPE_INPUT>();\n readonly fixedFloat = input<number>();\n readonly acceptNegativeValue = input<boolean>();\n readonly valueUpDownNumber = input<number | undefined>();\n readonly resetAutoCompletePassword = input<boolean>();\n readonly noBorder = input<boolean>();\n readonly backgroundNone = input<boolean>();\n readonly useColorModeExist = input<boolean>();\n readonly keepPlaceholderOnly = input<boolean>();\n\n readonly classContainerBottomInput = input<string>();\n readonly autoRemoveEmoji = input<boolean>();\n readonly defaultHeight = input<number>();\n readonly ignoreShowError = input<boolean>();\n readonly borderError = input<boolean>();\n\n readonly unitsLeft = input<Array<any>>();\n readonly configUnitLeft = input<IInputValidUnitConfig>({\n fieldKey: 'id',\n fieldLabel: 'label',\n });\n readonly keySelectedUnitLeft = input<any>();\n\n readonly unitsRight = input<Array<any>>();\n readonly configUnitRight = input<IInputValidUnitConfig>({\n fieldKey: 'id',\n fieldLabel: 'label',\n });\n readonly keySelectedUnitRight = input<any>();\n\n readonly maxValueNumber = input<number>();\n readonly minValueNumber = input<number>();\n readonly isBaselineStyle = input<boolean>(); // align-items-baseline dùng khi căn input thẳng hàng với tất cả các phần khác dù có validate hay bất cứ 1 cái gì\n\n readonly valuePatternShowError = input<boolean>(); // mặc định khi test pattern trả tề giá trị bằng false sẽ báo lỗi\n readonly validPattern = input<Array<IValidPattern>>();\n readonly validRequired = input<IValidRequired>();\n readonly validMinLength = input<IValidLength>();\n readonly validMinValue = input<IMessageTranslate>();\n readonly validMaxValue = input<IMessageTranslate>();\n readonly validMaxLength = input<IMessageTranslate>();\n readonly validDuplicate = input<IMessageTranslate>();\n readonly functionValid = input<TYPE_FUNCTION_INPUT_VALID>();\n readonly maxLength = input<number>();\n readonly positionMessageErrorStartInput = input<boolean>(); // khi có template left và right mà muốn mesage error xuất hiện bắt đầu từ ô input thay vì bắt đầu từ template trái\n readonly classInclude = input<string>();\n readonly resize = input<'auto' | 'none'>();\n readonly templateLeftBottomInput = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n readonly templateRightBottomInput = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n readonly onlyAcceptNegativeValue = input<boolean>();\n readonly autoAddZeroLessThan10InTypeInt = input<boolean>();\n readonly maxLengthNumberCount = input<number>();\n readonly classMessageErrorInclude = input<string>();\n readonly ignoreStopPropagationEvent = input<boolean>();\n readonly ignoreUnitRightClassReadOnly = input<boolean>();\n readonly paddingRightCustomSpecific = input<number>(); // fix paddingRight count ko auto tính #52185\n readonly focusTimeOut = input<number>();\n\n readonly ignoreAddItem = input<boolean>(false);\n readonly ignoreRemove = input<boolean>(false);\n readonly maxItems = input<number>(5); // số lượng input tối đa\n readonly minItems = input<number>(1); // không được phép xóa nếu số lượng items <= minItems.length\n\n // #region OUTPUT\n readonly outFunctionsControl = output<IInputAddFunctionControlEvent>();\n readonly outRemove = output<IInputAdd>();\n readonly outAddItem = output<IInputAdd>();\n readonly outClickButtonLabel = output<IButton>();\n readonly outSwitchEventLabel = output<ISwitchEvent>();\n readonly outLabelRightClick = output<boolean>();\n readonly outLabelLeftClick = output<MouseEvent>();\n readonly outValueChange = output<IEmitValueChange>();\n\n ngOnInit() {\n if (!this.items().length) {\n this.items.set([{ [this.fieldNameBind()]: '' }]);\n }\n\n this.items.update((items) =>\n items.map((item) => {\n return { ...item, uniqKey: uuid() };\n })\n );\n\n this.outFunctionsControl.emit(this.FunctionsControl);\n }\n\n /* FUNCTIONS */\n public get FunctionsControl(): IInputAddFunctionControlEvent {\n return {\n checkIsValid: this.checkIsValid.bind(this),\n setMessageError: this.setMessageError.bind(this),\n };\n }\n\n private async setMessageError(message: string) {\n for (const item of this.items()) {\n await item.functionControl?.setMessageError(message);\n }\n }\n\n private async checkIsValid(checkValidRequired = true, currentItem?: IInputAdd): Promise<boolean> {\n let valid = true;\n\n if (this.disable() || this.readonly()) {\n return true;\n }\n\n for (const input of this.items()) {\n if (input.readonly || input.disable) {\n continue;\n }\n\n if (checkValidRequired && !(await this.checkValidRequired(input))) {\n valid = false;\n continue;\n }\n\n if (currentItem?.uniqKey === input.uniqKey) {\n valid = (await input.functionControl?.checkIsValid()) ?? false;\n }\n\n if (!this.validDuplicate()) {\n continue;\n }\n\n if (!input[this.fieldNameBind()]) {\n continue;\n }\n\n if (typeof input[this.fieldNameBind()] === 'string' && !input[this.fieldNameBind()].trim()) {\n continue;\n }\n\n const fieldsDuplicate = this.items().filter((element) => element[this.fieldNameBind()] === input[this.fieldNameBind()]);\n if (!fieldsDuplicate?.length) {\n input.functionControl?.setMessageError('');\n\n continue;\n }\n\n if (fieldsDuplicate.length < 2) {\n input.functionControl?.setMessageError('');\n\n continue;\n }\n valid = false;\n input.functionControl?.setMessageError(this.validDuplicate()?.message || 'i18n_valid_duplicate_msg');\n }\n\n return valid;\n }\n\n private async checkValidRequired(input: IInputAdd) {\n let valid = true;\n const validIfAtLeastOneValue = this.ignoreValidEmptyField() && this.items().find((item) => !!item[this.fieldNameBind()]?.trim());\n\n if (validIfAtLeastOneValue) {\n input.functionControl?.setMessageError('');\n return true;\n }\n\n if (!(await input.functionControl?.checkIsValid())) {\n valid = false;\n }\n\n return valid;\n }\n\n protected handlerAddItem(event: Event) {\n event.stopPropagation();\n\n if (!this.configItemAddToItems()) {\n const newItem: IInputAdd = { uniqKey: uuid(), [this.fieldNameBind()]: '' };\n this.items.update((items) => [...items, newItem]);\n this.outAddItem.emit(newItem);\n\n return;\n }\n const newItem: IInputAdd = { ...cloneDeep(this.configItemAddToItems), uniqKey: uuid(), [this.fieldNameBind()]: '' };\n this.items.update((items) => [...items, newItem]);\n this.outAddItem.emit(newItem);\n }\n\n protected handlerRemove(event: Event, item: IInputAdd, index: number) {\n event.stopPropagation();\n this.items.update((currentItems) => currentItems.filter((_, i) => i !== index));\n this.outRemove.emit(item);\n this.timeOutKeyUp.set(\n setTimeout(() => {\n clearTimeout(this.timeOutKeyUp());\n this.checkIsValid(false);\n }, 250)\n );\n }\n\n protected handlerClickButtonLabel(button: IButton) {\n this.outClickButtonLabel.emit(button);\n }\n\n protected handlerSwitchLabel(event: ISwitchEvent) {\n this.outSwitchEventLabel.emit(event);\n }\n\n protected handlerEventLabelLeftLabel(event: MouseEvent) {\n this.outLabelLeftClick.emit(event);\n }\n\n protected handlerEventLabelRightLabel() {\n this.outLabelRightClick.emit(true);\n }\n\n protected handlerFunctionsControl(event: IInputValidFunctionControlEvent, item: IInputAdd) {\n item.functionControl = event;\n }\n\n protected handlerValueChange(value: string | number, item: IInputAdd) {\n item[this.fieldNameBind()] = value;\n\n this.outValueChange.emit({ value, item });\n\n this.timeOutKeyUp.set(\n setTimeout(() => {\n clearTimeout(this.timeOutKeyUp());\n this.checkIsValid(false, item);\n }, 250)\n );\n }\n}\n","@if (fieldNameBind() && items(); as items) {\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label\n [labelLeft]=\"labelConfig.labelLeft\"\n [classInclude]=\"labelConfig.classInclude\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [labelLeftBehindToggleButton]=\"labelConfig.labelLeftBehindToggleButton\"\n [popover]=\"labelConfig.popover\"\n [required]=\"labelConfig.required\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsRight]=\"labelConfig.disableButtonsRight\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [labelRightRequired]=\"labelConfig.labelRightRequired\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleSize]=\"labelConfig.toggleSize || 'default'\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable\"\n [description]=\"labelConfig.description\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [zIndexPopover]=\"labelConfig.zIndexPopover || 10\"\n [timerDestroyPopover]=\"labelConfig.timerDestroyPopover || 0\"\n [count]=\"labelConfig.count\"\n [limitLength]=\"labelConfig.limitLength\"\n (outClickButton)=\"handlerClickButtonLabel($event)\"\n (outSwitchEvent)=\"handlerSwitchLabel($event)\"\n (outLabelLeftClick)=\"handlerEventLabelLeftLabel($event)\"\n (outLabelRightClick)=\"handlerEventLabelRightLabel()\" />\n }\n @for (item of items; track item.uniqKey; let first = $first; let index = $index) {\n <div\n class=\"flex\"\n [style.marginTop.px]=\"!first ? formInputSpacing() : 0\">\n @if (leftTemplateItems(); as leftTemplateItems) {\n <div class=\"flex {{ leftTemplateItems.classInclude }}\">\n @for (rightItem of leftTemplateItems.items; track $index) {\n @switch (rightItem.type) {\n @case ('template') {\n @if (item.templateLeftOutlet || templateLeftOutlet()) {\n <ng-container *ngTemplateOutlet=\"item.templateLeftOutlet || templateLeftOutlet() || null; context: { item: item, index: index }\" />\n }\n }\n }\n }\n </div>\n }\n <libs_ui-components-inputs-valid\n [item]=\"item\"\n [fieldNameBind]=\"fieldNameBind()\"\n [placeholder]=\"item.placeholder ?? placeholder()\"\n [emitEmptyInDataTypeNumber]=\"emitEmptyInDataTypeNumber()\"\n [tagInput]=\"tagInput()\"\n [dataType]=\"dataType()\"\n [fixedFloat]=\"fixedFloat()\"\n [readonly]=\"readonly() || item.readonly\"\n [disable]=\"disable() || item.disable\"\n [classContainerInput]=\"classContainerInput()\"\n [classIncludeInput]=\"classIncludeInput()\"\n [acceptNegativeValue]=\"acceptNegativeValue()\"\n [valueUpDownNumber]=\"valueUpDownNumber() || 1\"\n [ignoreWidthInput100]=\"ignoreWidthInput100()\"\n [showCount]=\"showCount()\"\n [resetAutoCompletePassword]=\"resetAutoCompletePassword()\"\n [noBorder]=\"noBorder()\"\n [backgroundNone]=\"backgroundNone()\"\n [useColorModeExist]=\"useColorModeExist()\"\n [keepPlaceholderOnly]=\"keepPlaceholderOnly()\"\n [classContainerBottomInput]=\"classContainerBottomInput()\"\n [autoRemoveEmoji]=\"autoRemoveEmoji()\"\n [defaultHeight]=\"defaultHeight()\"\n [ignoreShowError]=\"ignoreShowError()\"\n [borderError]=\"borderError()\"\n [unitsLeft]=\"item.unitsLeft || unitsLeft()\"\n [configUnitLeft]=\"item.configUnitLeft || configUnitLeft()\"\n [keySelectedUnitLeft]=\"item.keySelectedUnitLeft || keySelectedUnitLeft()\"\n [unitsRight]=\"item.unitsRight || unitsRight()\"\n [configUnitRight]=\"item.configUnitRight || configUnitRight()\"\n [keySelectedUnitRight]=\"item.keySelectedUnitRight || keySelectedUnitRight()\"\n [maxValueNumber]=\"item.maxValueNumber || maxValueNumber()\"\n [minValueNumber]=\"item.minValueNumber || minValueNumber()\"\n [isBaselineStyle]=\"isBaselineStyle()\"\n [valuePatternShowError]=\"valuePatternShowError()\"\n [validPattern]=\"validPattern()\"\n [validRequired]=\"validRequired()\"\n [validMinLength]=\"validMinLength()\"\n [validMinValue]=\"validMinValue()\"\n [validMaxValue]=\"validMaxValue()\"\n [validMaxLength]=\"validMaxLength()\"\n [functionValid]=\"functionValid()\"\n [maxLength]=\"item.maxLength || maxLength()\"\n [positionMessageErrorStartInput]=\"positionMessageErrorStartInput()\"\n [classInclude]=\"classInclude()\"\n [onlyAcceptNegativeValue]=\"onlyAcceptNegativeValue()\"\n [autoAddZeroLessThan10InTypeInt]=\"autoAddZeroLessThan10InTypeInt()\"\n [maxLengthNumberCount]=\"maxLengthNumberCount()\"\n [classMessageErrorInclude]=\"classMessageErrorInclude()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [ignoreUnitRightClassReadOnly]=\"ignoreUnitRightClassReadOnly()\"\n [paddingRightCustomSpecific]=\"paddingRightCustomSpecific()\"\n [focusTimeOut]=\"focusTimeOut()\"\n (outValueChange)=\"handlerValueChange($event, item)\"\n (outFunctionsControl)=\"handlerFunctionsControl($event, item)\" />\n\n @if (rightTemplateItems(); as rightTemplateItems) {\n <div\n class=\"flex items-center {{ rightTemplateItems.classInclude }}\"\n [style.height.px]=\"defaultHeight() || 32\">\n @for (rightItem of rightTemplateItems.items; track $index) {\n @switch (rightItem.type) {\n @case ('remove') {\n @if (!ignoreRemove() && !item.ignoreRemove && items.length > minItems()) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-remove mr-[0px]'\"\n classInclude=\"libs-ui-icon-hover-danger !p-[2px] ml-[16px] {{ rightItem.classInclude }}\"\n (outClick)=\"handlerRemove($event, item, index)\" />\n }\n }\n\n @case ('template') {\n @if (item.templateRightOutlet || templateRightOutlet()) {\n <ng-container *ngTemplateOutlet=\"item.templateRightOutlet || templateRightOutlet() || null; context: { item: item, index: index }\" />\n }\n }\n }\n }\n </div>\n }\n </div>\n }\n}\n\n@if (!ignoreAddItem() && (!maxItems() || items().length < maxItems())) {\n <libs_ui-components-buttons-button\n [type]=\"addItemButtonConfig()?.type || 'button-link-primary'\"\n [label]=\"addItemButtonConfig()?.label || 'i18n_add_new'\"\n [classLabel]=\"addItemButtonConfig()?.classLabel || 'libs-uifont-head-5m'\"\n [classIconLeft]=\"addItemButtonConfig()?.classIconLeft || 'libs-ui-icon-add text-[10px] mr-[8px]'\"\n [classInclude]=\"addItemButtonConfig()?.classInclude || '!pb-0 !pl-0 !py-[2px] mt-[8px]'\"\n [disable]=\"disable() || false\"\n (outClick)=\"handlerAddItem($event)\" />\n}\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,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libs-ui/components-inputs-add",
|
|
3
|
-
"version": "0.2.356-
|
|
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-buttons-button": "0.2.356-
|
|
8
|
-
"@libs-ui/components-inputs-valid": "0.2.356-
|
|
9
|
-
"@libs-ui/components-label": "0.2.356-
|
|
10
|
-
"@libs-ui/components-switch": "0.2.356-
|
|
11
|
-
"@libs-ui/interfaces-types": "0.2.356-
|
|
12
|
-
"@libs-ui/utils": "0.2.356-
|
|
7
|
+
"@libs-ui/components-buttons-button": "0.2.356-43",
|
|
8
|
+
"@libs-ui/components-inputs-valid": "0.2.356-43",
|
|
9
|
+
"@libs-ui/components-label": "0.2.356-43",
|
|
10
|
+
"@libs-ui/components-switch": "0.2.356-43",
|
|
11
|
+
"@libs-ui/interfaces-types": "0.2.356-43",
|
|
12
|
+
"@libs-ui/utils": "0.2.356-43",
|
|
13
13
|
"@ngx-translate/core": "^15.0.0",
|
|
14
|
-
"@libs-ui/components-inputs-input": "0.2.356-
|
|
14
|
+
"@libs-ui/components-inputs-input": "0.2.356-43"
|
|
15
15
|
},
|
|
16
16
|
"sideEffects": false,
|
|
17
17
|
"module": "fesm2022/libs-ui-components-inputs-add.mjs",
|