@seniorsistemas/angular-components 19.3.4 → 19.4.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/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +1 -0
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +5 -3
- package/esm2022/picklist/lib/picklist/picklist.component.mjs +401 -43
- package/esm2022/picklist/lib/picklist/picklist.module.mjs +5 -25
- package/esm2022/picklist/lib/picklist/types/index.mjs +1 -1
- package/esm2022/picklist/lib/picklist/types/picklist-item.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +4 -2
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-picklist.mjs +402 -64
- package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
- package/package.json +1 -1
- package/picklist/lib/picklist/picklist.component.d.ts +86 -19
- package/picklist/lib/picklist/picklist.module.d.ts +1 -6
- package/picklist/lib/picklist/types/index.d.ts +1 -1
- package/picklist/lib/picklist/types/picklist-item.d.ts +20 -0
|
@@ -1,18 +1,19 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, ChangeDetectorRef, input, signal, output, EventEmitter, DestroyRef, Component, Input, Output, ContentChildren, NgModule } from '@angular/core';
|
|
1
3
|
import * as i2 from '@angular/cdk/drag-drop';
|
|
2
4
|
import { DragDropModule } from '@angular/cdk/drag-drop';
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import * as i0 from '@angular/core';
|
|
6
|
-
import { inject, ChangeDetectorRef, EventEmitter, Component, Input, Output, ContentChildren, NgModule } from '@angular/core';
|
|
5
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
6
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
7
7
|
import * as i3 from '@angular/forms';
|
|
8
8
|
import { FormsModule } from '@angular/forms';
|
|
9
|
-
import * as
|
|
9
|
+
import * as i1 from '@ngx-translate/core';
|
|
10
10
|
import { TranslateModule } from '@ngx-translate/core';
|
|
11
|
-
import {
|
|
12
|
-
import
|
|
11
|
+
import { ButtonComponent } from '@seniorsistemas/angular-components/button';
|
|
12
|
+
import * as i4 from '@seniorsistemas/angular-components/loading-state';
|
|
13
|
+
import { LoadingStateIndicators, LoadingStateModule } from '@seniorsistemas/angular-components/loading-state';
|
|
13
14
|
import { TemplateDirective } from '@seniorsistemas/angular-components/template';
|
|
14
|
-
import
|
|
15
|
-
import {
|
|
15
|
+
import { randomHash } from '@seniorsistemas/angular-components/utils';
|
|
16
|
+
import { Subject, switchMap, distinctUntilChanged, debounceTime, tap, pipe } from 'rxjs';
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
19
|
* @description Componente de lista de dupla seleção (picklist) com suporte a
|
|
@@ -55,6 +56,18 @@ class PicklistComponent {
|
|
|
55
56
|
showCheckbox = false;
|
|
56
57
|
/** @description Propriedade usada para filtrar os itens das listas. @default '' */
|
|
57
58
|
filterBy = '';
|
|
59
|
+
/** @description Habilita o carregamento preguiçoso (lazy load) para as listas. @default false */
|
|
60
|
+
lazyLoad = input(false);
|
|
61
|
+
/** @description Número de linhas a serem exibidas por página caso o lazyLoad esteja habilitado. @default 10 */
|
|
62
|
+
rows = input(10);
|
|
63
|
+
/** @description Função loader para a lista de disponíveis (to-select). Quando fornecida, o componente gerencia internamente paginação, loading e race conditions. */
|
|
64
|
+
sourceLoader = input();
|
|
65
|
+
/** @description Função loader para a lista de selecionados (selected). Quando fornecida, o componente gerencia internamente paginação, loading e race conditions. */
|
|
66
|
+
targetLoader = input();
|
|
67
|
+
_loadingTarget = signal(false);
|
|
68
|
+
_loadingSource = signal(false);
|
|
69
|
+
/** @description Emitido quando um item é movido entre as listas e o lazy load está habilitado. */
|
|
70
|
+
nodeMoved = output();
|
|
58
71
|
/** @description Emitido quando a lista de selecionados muda. */
|
|
59
72
|
selectedItensChange = new EventEmitter();
|
|
60
73
|
/** @description Emitido quando a lista de disponíveis muda. */
|
|
@@ -63,17 +76,29 @@ class PicklistComponent {
|
|
|
63
76
|
selectedItensFilter = '';
|
|
64
77
|
itemToSelectTemplate = null;
|
|
65
78
|
itemSelectedTemplate = null;
|
|
79
|
+
logoIndicator = LoadingStateIndicators.Logo;
|
|
66
80
|
itensToSelectFilterUtil = {
|
|
81
|
+
allItensSelected: false,
|
|
67
82
|
rawItensToSelect: [],
|
|
68
83
|
filteredItensToSelect: [],
|
|
69
84
|
};
|
|
70
85
|
selectedItensFilterUtil = {
|
|
86
|
+
allItensSelected: false,
|
|
71
87
|
rawSelectedItens: [],
|
|
72
88
|
filteredSelectedItens: [],
|
|
73
89
|
};
|
|
74
90
|
selectedItensMap = new Set();
|
|
75
91
|
itensToSelectId = randomHash('itensToSelect');
|
|
76
92
|
selectedItensId = randomHash('selectedItens');
|
|
93
|
+
destroyRef = inject(DestroyRef);
|
|
94
|
+
sourceFilterSubject = new Subject();
|
|
95
|
+
targetFilterSubject = new Subject();
|
|
96
|
+
sourceLoadSubject = new Subject();
|
|
97
|
+
targetLoadSubject = new Subject();
|
|
98
|
+
_internalTotalSource = 0;
|
|
99
|
+
_internalTotalTarget = 0;
|
|
100
|
+
sourceCurrentPage = 0;
|
|
101
|
+
targetCurrentPage = 0;
|
|
77
102
|
_logErrorTemplate = true;
|
|
78
103
|
templates = null;
|
|
79
104
|
ngAfterViewInit() {
|
|
@@ -89,19 +114,48 @@ class PicklistComponent {
|
|
|
89
114
|
}
|
|
90
115
|
this.cdr.detectChanges();
|
|
91
116
|
}
|
|
117
|
+
ngOnInit() {
|
|
118
|
+
this.setupLoaderPipelines();
|
|
119
|
+
this.setupLazyLoadEvents();
|
|
120
|
+
this.setupFilterDebounce();
|
|
121
|
+
}
|
|
92
122
|
ngOnChanges(changes) {
|
|
93
|
-
|
|
123
|
+
const changedItensToSelect = changes['itensToSelect'];
|
|
124
|
+
const changedSelectedItens = changes['selectedItens'];
|
|
125
|
+
if (changedItensToSelect && !this.lazyLoad()) {
|
|
94
126
|
this.itensToSelectFilterUtil = {
|
|
127
|
+
allItensSelected: this.itensToSelectFilterUtil.allItensSelected || false,
|
|
95
128
|
rawItensToSelect: this.itensToSelect,
|
|
96
129
|
filteredItensToSelect: this.itensToSelect,
|
|
97
130
|
};
|
|
98
131
|
}
|
|
99
|
-
if (
|
|
132
|
+
else if (changedItensToSelect && this.lazyLoad()) {
|
|
133
|
+
this.itensToSelectFilterUtil.rawItensToSelect = [
|
|
134
|
+
...this.itensToSelectFilterUtil.rawItensToSelect,
|
|
135
|
+
...this.itensToSelect,
|
|
136
|
+
];
|
|
137
|
+
if (this.itensToSelectFilterUtil.allItensSelected) {
|
|
138
|
+
this._checkAllSelectedItensChange(this.itensToSelectFilterUtil.allItensSelected, this.itensToSelectFilterUtil.rawItensToSelect, this.itensToSelectId);
|
|
139
|
+
}
|
|
140
|
+
this.itensToSelectFilterUtil.filteredItensToSelect = [...this.itensToSelectFilterUtil.rawItensToSelect];
|
|
141
|
+
}
|
|
142
|
+
if (changedSelectedItens && !this.lazyLoad()) {
|
|
100
143
|
this.selectedItensFilterUtil = {
|
|
144
|
+
allItensSelected: this.selectedItensFilterUtil.allItensSelected || false,
|
|
101
145
|
filteredSelectedItens: this.selectedItens,
|
|
102
146
|
rawSelectedItens: this.selectedItens,
|
|
103
147
|
};
|
|
104
148
|
}
|
|
149
|
+
else if (changedSelectedItens && this.lazyLoad()) {
|
|
150
|
+
this.selectedItensFilterUtil.rawSelectedItens = [
|
|
151
|
+
...this.selectedItensFilterUtil.rawSelectedItens,
|
|
152
|
+
...this.selectedItens,
|
|
153
|
+
];
|
|
154
|
+
if (this.selectedItensFilterUtil.allItensSelected) {
|
|
155
|
+
this._checkAllSelectedItensChange(this.selectedItensFilterUtil.allItensSelected, this.selectedItensFilterUtil.rawSelectedItens, this.selectedItensId);
|
|
156
|
+
}
|
|
157
|
+
this.selectedItensFilterUtil.filteredSelectedItens = [...this.selectedItensFilterUtil.rawSelectedItens];
|
|
158
|
+
}
|
|
105
159
|
}
|
|
106
160
|
toggleSelected(internalPicklistItem, containerListId) {
|
|
107
161
|
if (internalPicklistItem.disabled) {
|
|
@@ -115,6 +169,16 @@ class PicklistComponent {
|
|
|
115
169
|
else {
|
|
116
170
|
this.selectedItensMap.delete(internalPicklistItem);
|
|
117
171
|
}
|
|
172
|
+
const containerFilterUtil = containerListId === this.selectedItensId ? this.selectedItensFilterUtil : this.itensToSelectFilterUtil;
|
|
173
|
+
const isAllSelected = this._checkAllSelectedByList(containerListId === this.selectedItensId
|
|
174
|
+
? this.selectedItensFilterUtil.filteredSelectedItens
|
|
175
|
+
: this.itensToSelectFilterUtil.filteredItensToSelect);
|
|
176
|
+
if (this.lazyLoad() && !internalPicklistItem.selected && containerFilterUtil.allItensSelected) {
|
|
177
|
+
containerFilterUtil.allItensSelected = false;
|
|
178
|
+
}
|
|
179
|
+
else if (this.lazyLoad() && isAllSelected && containerFilterUtil.allItensSelected !== isAllSelected) {
|
|
180
|
+
containerFilterUtil.allItensSelected = isAllSelected;
|
|
181
|
+
}
|
|
118
182
|
this.cdr.detectChanges();
|
|
119
183
|
}
|
|
120
184
|
remove(all = false) {
|
|
@@ -122,16 +186,57 @@ class PicklistComponent {
|
|
|
122
186
|
if (!itens.length) {
|
|
123
187
|
return;
|
|
124
188
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
189
|
+
const allElements = this.lazyLoad() ? [] : this.selectedItensFilterUtil.rawSelectedItens;
|
|
190
|
+
const revertAction = () => {
|
|
191
|
+
this.selectedItensFilterUtil.rawSelectedItens = [
|
|
192
|
+
...this.selectedItensFilterUtil.rawSelectedItens,
|
|
193
|
+
...itens.map((i) => {
|
|
194
|
+
i.selected = false;
|
|
195
|
+
return i;
|
|
196
|
+
}),
|
|
197
|
+
];
|
|
198
|
+
this.itensToSelectFilterUtil.rawItensToSelect = this.itensToSelectFilterUtil.rawItensToSelect.filter((x) => !itens.includes(x));
|
|
199
|
+
this.selectedItensFilterUtil.allItensSelected = false;
|
|
200
|
+
if (this.lazyLoad()) {
|
|
201
|
+
this.selectedItensFilterUtil.filteredSelectedItens = this.selectedItensFilterUtil.rawSelectedItens;
|
|
202
|
+
this.itensToSelectFilterUtil.filteredItensToSelect = this.itensToSelectFilterUtil.rawItensToSelect;
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
this.selectedItens = this.selectedItensFilterUtil.rawSelectedItens;
|
|
206
|
+
this.itensToSelect = this.itensToSelectFilterUtil.rawItensToSelect;
|
|
207
|
+
this.filterSelectedItens();
|
|
208
|
+
this.filterItensToSelect();
|
|
209
|
+
this.emitData();
|
|
210
|
+
}
|
|
211
|
+
this.cdr.detectChanges();
|
|
212
|
+
};
|
|
213
|
+
this.nodeMoved.emit({
|
|
214
|
+
direction: 'to-select',
|
|
215
|
+
items: all ? allElements : parseValueEmit(Array.from(this.selectedItensMap)),
|
|
216
|
+
moveAll: all,
|
|
217
|
+
revertAction,
|
|
129
218
|
});
|
|
130
|
-
this.
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
219
|
+
this.itensToSelectFilterUtil.rawItensToSelect = [
|
|
220
|
+
...this.itensToSelectFilterUtil.rawItensToSelect,
|
|
221
|
+
...itens.map((itemRemove) => {
|
|
222
|
+
itemRemove.selected = false;
|
|
223
|
+
this.selectedItensMap.delete(itemRemove);
|
|
224
|
+
return itemRemove;
|
|
225
|
+
}),
|
|
226
|
+
];
|
|
227
|
+
this.selectedItensFilterUtil.rawSelectedItens = this.selectedItensFilterUtil.rawSelectedItens.filter((x) => !itens.includes(x));
|
|
228
|
+
this.selectedItensFilterUtil.allItensSelected = false;
|
|
229
|
+
if (this.lazyLoad()) {
|
|
230
|
+
this.itensToSelectFilterUtil.filteredItensToSelect = this.itensToSelectFilterUtil.rawItensToSelect;
|
|
231
|
+
this.selectedItensFilterUtil.filteredSelectedItens = this.selectedItensFilterUtil.rawSelectedItens;
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
this.itensToSelect = this.itensToSelectFilterUtil.rawItensToSelect;
|
|
235
|
+
this.selectedItens = this.selectedItensFilterUtil.rawSelectedItens;
|
|
236
|
+
this.filterSelectedItens();
|
|
237
|
+
this.filterItensToSelect();
|
|
238
|
+
this.emitData();
|
|
239
|
+
}
|
|
135
240
|
this.cdr.detectChanges();
|
|
136
241
|
}
|
|
137
242
|
add(all = false) {
|
|
@@ -139,21 +244,67 @@ class PicklistComponent {
|
|
|
139
244
|
if (!itens.length) {
|
|
140
245
|
return;
|
|
141
246
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
247
|
+
const allElements = this.lazyLoad() ? [] : this.itensToSelectFilterUtil.rawItensToSelect;
|
|
248
|
+
const revertAction = () => {
|
|
249
|
+
this.itensToSelectFilterUtil.rawItensToSelect = [
|
|
250
|
+
...this.itensToSelectFilterUtil.rawItensToSelect,
|
|
251
|
+
...itens.map((i) => {
|
|
252
|
+
i.selected = false;
|
|
253
|
+
this.selectedItensMap.delete(i);
|
|
254
|
+
return i;
|
|
255
|
+
}),
|
|
256
|
+
];
|
|
257
|
+
this.selectedItensFilterUtil.rawSelectedItens = this.selectedItensFilterUtil.rawSelectedItens.filter((x) => !itens.includes(x));
|
|
258
|
+
this.itensToSelectFilterUtil.allItensSelected = false;
|
|
259
|
+
if (this.lazyLoad()) {
|
|
260
|
+
this.itensToSelectFilterUtil.filteredItensToSelect = this.itensToSelectFilterUtil.rawItensToSelect;
|
|
261
|
+
this.selectedItensFilterUtil.filteredSelectedItens = this.selectedItensFilterUtil.rawSelectedItens;
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
this.itensToSelect = this.itensToSelectFilterUtil.rawItensToSelect;
|
|
265
|
+
this.selectedItens = this.selectedItensFilterUtil.rawSelectedItens;
|
|
266
|
+
this.filterSelectedItens();
|
|
267
|
+
this.filterItensToSelect();
|
|
268
|
+
this.emitData();
|
|
269
|
+
}
|
|
270
|
+
this.cdr.detectChanges();
|
|
271
|
+
};
|
|
272
|
+
this.nodeMoved.emit({
|
|
273
|
+
direction: 'selected',
|
|
274
|
+
items: all ? allElements : parseValueEmit(Array.from(this.selectedItensMap)),
|
|
275
|
+
moveAll: all,
|
|
276
|
+
revertAction,
|
|
146
277
|
});
|
|
147
|
-
this.
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
278
|
+
this.selectedItensFilterUtil.rawSelectedItens = [
|
|
279
|
+
...this.selectedItensFilterUtil.rawSelectedItens,
|
|
280
|
+
...itens.map((itemRemove) => {
|
|
281
|
+
itemRemove.selected = false;
|
|
282
|
+
this.selectedItensMap.delete(itemRemove);
|
|
283
|
+
return itemRemove;
|
|
284
|
+
}),
|
|
285
|
+
];
|
|
286
|
+
this.itensToSelectFilterUtil.rawItensToSelect = this.itensToSelectFilterUtil.rawItensToSelect.filter((x) => !itens.includes(x));
|
|
287
|
+
this.itensToSelectFilterUtil.allItensSelected = false;
|
|
288
|
+
if (this.lazyLoad()) {
|
|
289
|
+
this.selectedItensFilterUtil.filteredSelectedItens = this.selectedItensFilterUtil.rawSelectedItens;
|
|
290
|
+
this.itensToSelectFilterUtil.filteredItensToSelect = this.itensToSelectFilterUtil.rawItensToSelect;
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
this.selectedItens = this.selectedItensFilterUtil.rawSelectedItens;
|
|
294
|
+
this.itensToSelect = this.itensToSelectFilterUtil.rawItensToSelect;
|
|
295
|
+
this.filterSelectedItens();
|
|
296
|
+
this.filterItensToSelect();
|
|
297
|
+
this.emitData();
|
|
298
|
+
}
|
|
152
299
|
this.cdr.detectChanges();
|
|
153
300
|
}
|
|
154
301
|
filterItensToSelect() {
|
|
155
|
-
|
|
156
|
-
|
|
302
|
+
if (this.lazyLoad()) {
|
|
303
|
+
this._loadingSource.set(true);
|
|
304
|
+
this.sourceFilterSubject.next(this.availableItensFilter);
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
let searchTerm = this.availableItensFilter.trim();
|
|
157
308
|
if (searchTerm) {
|
|
158
309
|
this.itensToSelectFilterUtil.filteredItensToSelect = this.itensToSelectFilterUtil.rawItensToSelect.filter((item) => compareStrings(item.data[this.filterBy], searchTerm));
|
|
159
310
|
}
|
|
@@ -163,8 +314,12 @@ class PicklistComponent {
|
|
|
163
314
|
this.cdr.detectChanges();
|
|
164
315
|
}
|
|
165
316
|
filterSelectedItens() {
|
|
166
|
-
|
|
167
|
-
|
|
317
|
+
if (this.lazyLoad()) {
|
|
318
|
+
this._loadingTarget.set(true);
|
|
319
|
+
this.targetFilterSubject.next(this.selectedItensFilter);
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
let searchTerm = this.selectedItensFilter.trim();
|
|
168
323
|
if (searchTerm) {
|
|
169
324
|
this.selectedItensFilterUtil.filteredSelectedItens = this.selectedItensFilterUtil.rawSelectedItens.filter((item) => compareStrings(item.data[this.filterBy], searchTerm));
|
|
170
325
|
}
|
|
@@ -196,14 +351,30 @@ class PicklistComponent {
|
|
|
196
351
|
onDragRelease() {
|
|
197
352
|
this.selectedItensMap.forEach((item) => (item.invisible = false));
|
|
198
353
|
}
|
|
199
|
-
checkAllAvailableItensChange(
|
|
200
|
-
const checked = target.checked;
|
|
354
|
+
checkAllAvailableItensChange(checked) {
|
|
201
355
|
this._checkAllSelectedItensChange(checked, this.itensToSelectFilterUtil.filteredItensToSelect, this.itensToSelectId);
|
|
202
356
|
}
|
|
203
|
-
checkAllSelectedItensChange(
|
|
204
|
-
const checked = target.checked;
|
|
357
|
+
checkAllSelectedItensChange(checked) {
|
|
205
358
|
this._checkAllSelectedItensChange(checked, this.selectedItensFilterUtil.filteredSelectedItens, this.selectedItensId);
|
|
206
359
|
}
|
|
360
|
+
onScroll(event, listId) {
|
|
361
|
+
if (!this.lazyLoad()) {
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
const element = event.target;
|
|
365
|
+
const reachLimit = element.offsetHeight + element.scrollTop >= element.scrollHeight;
|
|
366
|
+
if (!reachLimit) {
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
const target = listId === this.selectedItensId ? 'selected' : 'to-select';
|
|
370
|
+
const targetReachLimit = target === 'selected'
|
|
371
|
+
? this.selectedItensFilterUtil.filteredSelectedItens.length >= this._internalTotalTarget
|
|
372
|
+
: this.itensToSelectFilterUtil.filteredItensToSelect.length >= this._internalTotalSource;
|
|
373
|
+
if (targetReachLimit) {
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
this.loadNextPage(target);
|
|
377
|
+
}
|
|
207
378
|
get disableSelectedItensCheckbox() {
|
|
208
379
|
return filterEnabled(this.selectedItensFilterUtil.filteredSelectedItens).length === 0;
|
|
209
380
|
}
|
|
@@ -216,11 +387,69 @@ class PicklistComponent {
|
|
|
216
387
|
get selectedItensAllSelected() {
|
|
217
388
|
return this._checkAllSelectedByList(this.selectedItensFilterUtil.filteredSelectedItens);
|
|
218
389
|
}
|
|
219
|
-
get
|
|
220
|
-
return this.
|
|
390
|
+
get hasSelectedItens() {
|
|
391
|
+
return this.selectedItensMap.size > 0;
|
|
221
392
|
}
|
|
222
|
-
|
|
223
|
-
|
|
393
|
+
/**
|
|
394
|
+
* @description Recarrega as listas após a confirmação de uma movimentação pelo backend.
|
|
395
|
+
*
|
|
396
|
+
* **Por que usar?**
|
|
397
|
+
* Ao mover itens, o componente atualiza a UI de forma otimista — os itens são movidos
|
|
398
|
+
* imediatamente antes da confirmação do servidor. Após o backend confirmar a operação,
|
|
399
|
+
* chame `resetList` para limpar e recarregar as listas afetadas do zero, garantindo que
|
|
400
|
+
* o estado da UI reflita os dados reais persistidos.
|
|
401
|
+
*
|
|
402
|
+
* **O que espera?**
|
|
403
|
+
* Recebe o objeto `PicklistItemMove<T>` emitido pelo output `(nodeMoved)`. O componente
|
|
404
|
+
* utiliza `node.direction` para determinar qual lista recarregar (a lista de destino da
|
|
405
|
+
* movimentação) e `node.moveAll` para verificar se a origem também deve ser recarregada
|
|
406
|
+
* (por exemplo, ao mover todos os itens de uma lista para outra, ambas ficam com estado
|
|
407
|
+
* alterado no backend).
|
|
408
|
+
*
|
|
409
|
+
* **O que faz?**
|
|
410
|
+
* - Reseta o contador de página da lista de destino para `0` (primeira página).
|
|
411
|
+
* - Limpa todos os itens carregados na lista de destino.
|
|
412
|
+
* - Dispara imediatamente o carregamento da primeira página via `sourceLoader`/`targetLoader`.
|
|
413
|
+
* - Se `node.moveAll === true`, repete o processo para a lista de origem.
|
|
414
|
+
*
|
|
415
|
+
* **Exemplo de uso:**
|
|
416
|
+
* ```typescript
|
|
417
|
+
* nodeMoved(node: PicklistItemMove<MyItem>): void {
|
|
418
|
+
* this.service.moveItems(node).subscribe({
|
|
419
|
+
* next: () => this.myPicklist().resetList(node),
|
|
420
|
+
* error: () => node.revertAction(),
|
|
421
|
+
* });
|
|
422
|
+
* }
|
|
423
|
+
* ```
|
|
424
|
+
*
|
|
425
|
+
* @param node - O objeto de movimentação emitido pelo output `(nodeMoved)`.
|
|
426
|
+
*/
|
|
427
|
+
resetList(node) {
|
|
428
|
+
if (!this.lazyLoad()) {
|
|
429
|
+
return;
|
|
430
|
+
}
|
|
431
|
+
this._resetListByTarget(node.direction);
|
|
432
|
+
if (node.moveAll) {
|
|
433
|
+
this._resetListByTarget(node.direction === 'selected' ? 'to-select' : 'selected');
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
_resetListByTarget(target) {
|
|
437
|
+
if (target === 'selected') {
|
|
438
|
+
this.targetCurrentPage = -1;
|
|
439
|
+
this._internalTotalTarget = 0;
|
|
440
|
+
this.selectedItens = [];
|
|
441
|
+
this.selectedItensFilterUtil.rawSelectedItens = [];
|
|
442
|
+
this.selectedItensFilterUtil.filteredSelectedItens = [];
|
|
443
|
+
}
|
|
444
|
+
else {
|
|
445
|
+
this.sourceCurrentPage = -1;
|
|
446
|
+
this._internalTotalSource = 0;
|
|
447
|
+
this.itensToSelect = [];
|
|
448
|
+
this.itensToSelectFilterUtil.rawItensToSelect = [];
|
|
449
|
+
this.itensToSelectFilterUtil.filteredItensToSelect = [];
|
|
450
|
+
}
|
|
451
|
+
this.cdr.detectChanges();
|
|
452
|
+
Promise.resolve().then(() => this.loadNextPage(target));
|
|
224
453
|
}
|
|
225
454
|
_checkAllSelectedByList(list) {
|
|
226
455
|
const _listItens = filterEnabled(list);
|
|
@@ -231,12 +460,135 @@ class PicklistComponent {
|
|
|
231
460
|
return _listItens.every((x) => x.selected);
|
|
232
461
|
}
|
|
233
462
|
}
|
|
463
|
+
setupLoaderPipelines() {
|
|
464
|
+
if (!this.lazyLoad()) {
|
|
465
|
+
return;
|
|
466
|
+
}
|
|
467
|
+
if (!this.sourceLoader && !this.targetLoader && this._logErrorTemplate) {
|
|
468
|
+
console.error(`Lazy load is enabled but no loader function was provided. Please provide at least one loader function using 'sourceLoader' or 'targetLoader' input.`);
|
|
469
|
+
}
|
|
470
|
+
if (this.sourceLoader()) {
|
|
471
|
+
this.sourceLoadSubject
|
|
472
|
+
.pipe(switchMap((event) => {
|
|
473
|
+
this._loadingSource.set(true);
|
|
474
|
+
return this.sourceLoader()(event);
|
|
475
|
+
}), takeUntilDestroyed(this.destroyRef))
|
|
476
|
+
.subscribe(({ items, totalRecords }) => {
|
|
477
|
+
this._internalTotalSource = totalRecords;
|
|
478
|
+
this.itensToSelectFilterUtil.rawItensToSelect = [
|
|
479
|
+
...this.itensToSelectFilterUtil.rawItensToSelect,
|
|
480
|
+
...items,
|
|
481
|
+
];
|
|
482
|
+
if (this.itensToSelectFilterUtil.allItensSelected) {
|
|
483
|
+
this._checkAllSelectedItensChange(true, this.itensToSelectFilterUtil.rawItensToSelect, this.itensToSelectId);
|
|
484
|
+
}
|
|
485
|
+
this.itensToSelectFilterUtil.filteredItensToSelect = [
|
|
486
|
+
...this.itensToSelectFilterUtil.rawItensToSelect,
|
|
487
|
+
];
|
|
488
|
+
this._loadingSource.set(false);
|
|
489
|
+
this.cdr.detectChanges();
|
|
490
|
+
});
|
|
491
|
+
}
|
|
492
|
+
if (this.targetLoader()) {
|
|
493
|
+
this.targetLoadSubject
|
|
494
|
+
.pipe(switchMap((event) => {
|
|
495
|
+
this._loadingTarget.set(true);
|
|
496
|
+
return this.targetLoader()(event);
|
|
497
|
+
}), takeUntilDestroyed(this.destroyRef))
|
|
498
|
+
.subscribe(({ items, totalRecords }) => {
|
|
499
|
+
this._internalTotalTarget = totalRecords;
|
|
500
|
+
this.selectedItensFilterUtil.rawSelectedItens = [
|
|
501
|
+
...this.selectedItensFilterUtil.rawSelectedItens,
|
|
502
|
+
...items,
|
|
503
|
+
];
|
|
504
|
+
if (this.selectedItensFilterUtil.allItensSelected) {
|
|
505
|
+
this._checkAllSelectedItensChange(true, this.selectedItensFilterUtil.rawSelectedItens, this.selectedItensId);
|
|
506
|
+
}
|
|
507
|
+
this.selectedItensFilterUtil.filteredSelectedItens = [
|
|
508
|
+
...this.selectedItensFilterUtil.rawSelectedItens,
|
|
509
|
+
];
|
|
510
|
+
this._loadingTarget.set(false);
|
|
511
|
+
this.cdr.detectChanges();
|
|
512
|
+
});
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
setupFilterDebounce() {
|
|
516
|
+
if (!this.lazyLoad()) {
|
|
517
|
+
return;
|
|
518
|
+
}
|
|
519
|
+
this.sourceFilterSubject
|
|
520
|
+
.pipe(distinctUntilChanged(), debounceTime(300), tap(() => {
|
|
521
|
+
this.sourceCurrentPage = -1;
|
|
522
|
+
this.itensToSelect = [];
|
|
523
|
+
this.itensToSelectFilterUtil.rawItensToSelect = [];
|
|
524
|
+
this.itensToSelectFilterUtil.filteredItensToSelect = [];
|
|
525
|
+
this.cdr.detectChanges();
|
|
526
|
+
}), switchMap(() => {
|
|
527
|
+
this.loadNextPage('to-select');
|
|
528
|
+
return [];
|
|
529
|
+
}), takeUntilDestroyed(this.destroyRef))
|
|
530
|
+
.subscribe();
|
|
531
|
+
this.targetFilterSubject
|
|
532
|
+
.pipe(distinctUntilChanged(), debounceTime(300), tap(() => {
|
|
533
|
+
this.targetCurrentPage = -1;
|
|
534
|
+
this.selectedItens = [];
|
|
535
|
+
this.selectedItensFilterUtil.rawSelectedItens = [];
|
|
536
|
+
this.selectedItensFilterUtil.filteredSelectedItens = [];
|
|
537
|
+
this.cdr.detectChanges();
|
|
538
|
+
}), switchMap(() => {
|
|
539
|
+
this.loadNextPage('selected');
|
|
540
|
+
return [];
|
|
541
|
+
}), takeUntilDestroyed(this.destroyRef))
|
|
542
|
+
.subscribe();
|
|
543
|
+
}
|
|
544
|
+
setupLazyLoadEvents() {
|
|
545
|
+
if (!this.lazyLoad()) {
|
|
546
|
+
return;
|
|
547
|
+
}
|
|
548
|
+
Promise.resolve().then(() => {
|
|
549
|
+
this.loadNextPage('to-select');
|
|
550
|
+
this.loadNextPage('selected');
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
loadNextPage(target) {
|
|
554
|
+
const totalRegisters = target === 'selected' ? this._internalTotalTarget : this._internalTotalSource;
|
|
555
|
+
const lastPage = Math.ceil(totalRegisters / this.rows());
|
|
556
|
+
if (target === 'selected' && this.targetCurrentPage < lastPage) {
|
|
557
|
+
this.targetCurrentPage++;
|
|
558
|
+
}
|
|
559
|
+
else if (target === 'to-select' && this.sourceCurrentPage < lastPage) {
|
|
560
|
+
this.sourceCurrentPage++;
|
|
561
|
+
}
|
|
562
|
+
this.emitCurrentPage(target);
|
|
563
|
+
}
|
|
564
|
+
emitCurrentPage(target) {
|
|
565
|
+
const filter = target === 'selected' ? this.selectedItensFilter : this.availableItensFilter;
|
|
566
|
+
const page = target === 'selected' ? this.targetCurrentPage : this.sourceCurrentPage;
|
|
567
|
+
const event = { target, page, filter, pageSize: this.rows() };
|
|
568
|
+
if (target === 'selected') {
|
|
569
|
+
this.targetLoadSubject.next(event);
|
|
570
|
+
}
|
|
571
|
+
else {
|
|
572
|
+
this.sourceLoadSubject.next(event);
|
|
573
|
+
}
|
|
574
|
+
}
|
|
234
575
|
_checkAllSelectedItensChange(checked, list, listId) {
|
|
235
576
|
this.unselectedItensByListId(listId === this.selectedItensId ? this.itensToSelectId : this.selectedItensId);
|
|
236
577
|
filterEnabled(list).forEach((item) => {
|
|
237
578
|
item.selected = checked;
|
|
238
|
-
|
|
579
|
+
if (checked) {
|
|
580
|
+
this.selectedItensMap.add(item);
|
|
581
|
+
}
|
|
582
|
+
else {
|
|
583
|
+
this.selectedItensMap.delete(item);
|
|
584
|
+
}
|
|
239
585
|
});
|
|
586
|
+
if (listId === this.selectedItensId) {
|
|
587
|
+
this.selectedItensFilterUtil.allItensSelected = checked;
|
|
588
|
+
}
|
|
589
|
+
else {
|
|
590
|
+
this.itensToSelectFilterUtil.allItensSelected = checked;
|
|
591
|
+
}
|
|
240
592
|
this.cdr.detectChanges();
|
|
241
593
|
}
|
|
242
594
|
unselectedItensByListId(listId) {
|
|
@@ -260,11 +612,11 @@ class PicklistComponent {
|
|
|
260
612
|
this.selectedItensChange.emit(parseValueEmit(this.selectedItens));
|
|
261
613
|
}
|
|
262
614
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PicklistComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
263
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PicklistComponent, selector: "s-picklist", inputs: { itensToSelect: "itensToSelect", selectedItens: "selectedItens", availableItensLabel: "availableItensLabel", availableItensPlaceholder: "availableItensPlaceholder", addSelectedItensLabel: "addSelectedItensLabel", addAllItensLabel: "addAllItensLabel", selectedItensLabel: "selectedItensLabel", selectedItensPlaceholder: "selectedItensPlaceholder", removeSelectedItemsLabel: "removeSelectedItemsLabel", removeAllItemsLabel: "removeAllItemsLabel", showCheckbox: "showCheckbox", filterBy: "filterBy" }, outputs: { selectedItensChange: "selectedItensChange", itensToSelectChange: "itensToSelectChange" }, queries: [{ propertyName: "templates", predicate: TemplateDirective }], usesOnChanges: true, ngImport: i0, template: "<ng-template\n #previewRender\n let-itens=\"itens\"\n let-template=\"template\"\n>\n <section class=\"picklist-items\">\n @for (item of itens; track $index) {\n <ng-container *ngTemplateOutlet=\"template; context: { item: item.data }\"></ng-container>\n }\n </section>\n</ng-template>\n\n<ng-template\n #picklistItensRender\n let-id=\"id\"\n let-itens=\"itens\"\n let-template=\"template\"\n let-listConnectedTo=\"listConnectedTo\"\n>\n <div\n class=\"picklist-items\"\n cdkDropList\n [id]=\"id\"\n [cdkDropListSortingDisabled]=\"true\"\n [cdkDropListData]=\"itens\"\n [cdkDropListConnectedTo]=\"listConnectedTo\"\n (cdkDropListDropped)=\"drop($event)\"\n >\n @for (item of itens; track $index) {\n <div\n cdkDrag\n [cdkDragDisabled]=\"item.disabled\"\n [cdkDragData]=\"item\"\n (click)=\"toggleSelected(item, id)\"\n (cdkDragStarted)=\"onDragStart($event, id)\"\n (cdkDragReleased)=\"onDragRelease()\"\n class=\"picklist-item\"\n [class.picklist-disabled]=\"item.disabled\"\n [class.picklist-item-invisible]=\"item.invisible\"\n [class.picklist-item-active]=\"item.selected\"\n >\n @if (showCheckbox) {\n <input\n type=\"checkbox\"\n class=\"input-checkbox\"\n [(ngModel)]=\"item.selected\"\n [disabled]=\"item.disabled\"\n />\n }\n <div class=\"picklist-content\">\n <ng-container *ngTemplateOutlet=\"template; context: { item: item.data, selected: item.selected, disabled: item.disabled }\"></ng-container>\n </div>\n <ng-container *cdkDragPreview>\n <ng-container *ngTemplateOutlet=\"previewRender; context: { itens: selectedItensMap, template: template }\"></ng-container>\n </ng-container>\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template\n #checkboxTitleRender\n let-disabled=\"disabled\"\n let-checked=\"checked\"\n let-changeFn=\"changeFn\"\n>\n @if (showCheckbox) {\n <input\n class=\"input-checkbox\"\n type=\"checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"checked\"\n (change)=\"changeFn($event.target)\"\n />\n }\n</ng-template>\n\n<div class=\"picklist-container\">\n <div class=\"picklist-item-container\">\n <div class=\"picklist-box\">\n <div class=\"picklist-title-container\">\n @if (!filterBy) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableItensToSelectCheckbox,\n checked: itensToSelectAllSelected,\n changeFn: checkAllAvailableItensChange.bind(this),\n }\n \"\n ></ng-container>\n }\n <span class=\"picklist-title\">\n {{ availableItensLabel || 'platform.angular_components.available-items' | translate }}\n </span>\n </div>\n @if (filterBy && showCheckbox) {\n <div class=\"picklist-filter\">\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableItensToSelectCheckbox,\n checked: itensToSelectAllSelected,\n changeFn: checkAllAvailableItensChange.bind(this),\n }\n \"\n ></ng-container>\n @if (filterBy) {\n <input\n type=\"text\"\n class=\"input-search\"\n [(ngModel)]=\"availableItensFilter\"\n (ngModelChange)=\"filterItensToSelect()\"\n [placeholder]=\"availableItensPlaceholder || 'platform.angular_components.picklist-placeholder' | translate\"\n />\n }\n </div>\n }\n\n <ng-container\n *ngTemplateOutlet=\"\n picklistItensRender;\n context: {\n id: itensToSelectId,\n itens: itensToSelectFilterUtil.filteredItensToSelect,\n template: itemToSelectTemplate,\n listConnectedTo: selectedItensId,\n }\n \"\n >\n </ng-container>\n </div>\n <div class=\"buttons-container\">\n <s-button\n [label]=\"addSelectedItensLabel || 'platform.angular_components.add' | translate\"\n priority=\"primary\"\n rightIconClass=\"fa fa-fw fa-arrow-right\"\n [disabled]=\"!canAddItens\"\n (clicked)=\"add()\"\n [auxiliary]=\"false\"\n [caret]=\"false\"\n >\n </s-button>\n <s-button\n [label]=\"addAllItensLabel || 'platform.angular_components.add_all' | translate\"\n priority=\"link\"\n (clicked)=\"add(true)\"\n [auxiliary]=\"false\"\n >\n </s-button>\n </div>\n </div>\n <div class=\"picklist-item-container\">\n <div class=\"picklist-box\">\n <div class=\"picklist-title-container\">\n @if (!filterBy) {\n <ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableSelectedItensCheckbox,\n checked: selectedItensAllSelected,\n changeFn: checkAllSelectedItensChange.bind(this),\n }\n \"\n ></ng-container>\n </ng-container>\n }\n <span class=\"picklist-title\">\n {{ selectedItensLabel || 'platform.angular_components.selected-items' | translate }}\n </span>\n </div>\n <div\n class=\"picklist-filter\"\n *ngIf=\"filterBy && showCheckbox\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: { disabled: disableSelectedItensCheckbox, checked: selectedItensAllSelected, changeFn: checkAllSelectedItensChange.bind(this) }\n \"\n ></ng-container>\n @if (filterBy) {\n <input\n type=\"text\"\n class=\"input-search\"\n [(ngModel)]=\"selectedItensFilter\"\n (ngModelChange)=\"filterSelectedItens()\"\n [placeholder]=\"selectedItensPlaceholder || 'platform.angular_components.picklist-placeholder' | translate\"\n />\n }\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n picklistItensRender;\n context: {\n id: selectedItensId,\n itens: selectedItensFilterUtil.filteredSelectedItens,\n template: itemSelectedTemplate,\n listConnectedTo: itensToSelectId,\n }\n \"\n >\n </ng-container>\n </div>\n <div class=\"buttons-container\">\n <s-button\n [label]=\"removeSelectedItemsLabel || 'platform.angular_components.remove' | translate\"\n priority=\"primary\"\n iconClass=\"fa fa-fw fa-arrow-left\"\n [disabled]=\"!canRemoveItens\"\n [auxiliary]=\"false\"\n (clicked)=\"remove()\"\n [caret]=\"false\"\n >\n </s-button>\n <s-button\n [label]=\"removeAllItemsLabel || 'platform.angular_components.remove_all' | translate\"\n priority=\"link\"\n (clicked)=\"remove(true)\"\n [auxiliary]=\"false\"\n >\n </s-button>\n </div>\n </div>\n</div>\n", styles: [".picklist-container{display:flex;flex-wrap:wrap;border-radius:4px solid #dedce5;width:100%;background-color:#fff;gap:20px;padding:8px}.picklist-container .picklist-item-container{display:flex;flex-direction:column;flex:1}.picklist-container .picklist-item-container .picklist-box{border:1px solid #dedce5;padding:8px;height:100%;min-width:200px}.picklist-container .picklist-item-container .picklist-box .picklist-filter{display:flex;width:100%}.picklist-container .picklist-item-container .picklist-box .picklist-filter .input-search{border:1px solid #dedce5;min-height:35px;width:100%;border-radius:3px;margin-bottom:10px;margin-top:10px;padding:0 8px;flex:1}.picklist-container .picklist-item-container .picklist-box .picklist-title-container{width:100%;display:flex;align-items:center}.picklist-container .picklist-item-container .picklist-box .picklist-title-container .picklist-title{font-family:Open Sans;font-size:14px;font-weight:700;line-height:21px;text-underline-position:from-font;text-decoration-skip-ink:none}.picklist-container .picklist-item-container .picklist-box .picklist-items{max-height:23em;overflow:auto;height:100%;min-height:55px}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-content{width:100%;height:100%;padding-right:8px;border-radius:3px;margin-bottom:8px}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item{height:55px;border:3px;display:flex}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item:not(.picklist-disabled){cursor:pointer}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item:hover:not(.picklist-disabled,.picklist-item-active,.picklist-item-invisible){background-color:#f1f7f8}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item-active:not(.picklist-item-invisible){background-color:#d5e8ec}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-disabled{opacity:.5;background-color:#fbfafc}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item-invisible{display:none!important}.picklist-container .picklist-item-container .buttons-container{padding-top:10px;display:flex}.picklist-container .picklist-item-container .input-checkbox{margin:12px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i2.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel"], outputs: ["clicked"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] });
|
|
615
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PicklistComponent, isStandalone: true, selector: "s-picklist", inputs: { itensToSelect: { classPropertyName: "itensToSelect", publicName: "itensToSelect", isSignal: false, isRequired: false, transformFunction: null }, selectedItens: { classPropertyName: "selectedItens", publicName: "selectedItens", isSignal: false, isRequired: false, transformFunction: null }, availableItensLabel: { classPropertyName: "availableItensLabel", publicName: "availableItensLabel", isSignal: false, isRequired: false, transformFunction: null }, availableItensPlaceholder: { classPropertyName: "availableItensPlaceholder", publicName: "availableItensPlaceholder", isSignal: false, isRequired: false, transformFunction: null }, addSelectedItensLabel: { classPropertyName: "addSelectedItensLabel", publicName: "addSelectedItensLabel", isSignal: false, isRequired: false, transformFunction: null }, addAllItensLabel: { classPropertyName: "addAllItensLabel", publicName: "addAllItensLabel", isSignal: false, isRequired: false, transformFunction: null }, selectedItensLabel: { classPropertyName: "selectedItensLabel", publicName: "selectedItensLabel", isSignal: false, isRequired: false, transformFunction: null }, selectedItensPlaceholder: { classPropertyName: "selectedItensPlaceholder", publicName: "selectedItensPlaceholder", isSignal: false, isRequired: false, transformFunction: null }, removeSelectedItemsLabel: { classPropertyName: "removeSelectedItemsLabel", publicName: "removeSelectedItemsLabel", isSignal: false, isRequired: false, transformFunction: null }, removeAllItemsLabel: { classPropertyName: "removeAllItemsLabel", publicName: "removeAllItemsLabel", isSignal: false, isRequired: false, transformFunction: null }, showCheckbox: { classPropertyName: "showCheckbox", publicName: "showCheckbox", isSignal: false, isRequired: false, transformFunction: null }, filterBy: { classPropertyName: "filterBy", publicName: "filterBy", isSignal: false, isRequired: false, transformFunction: null }, lazyLoad: { classPropertyName: "lazyLoad", publicName: "lazyLoad", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, sourceLoader: { classPropertyName: "sourceLoader", publicName: "sourceLoader", isSignal: true, isRequired: false, transformFunction: null }, targetLoader: { classPropertyName: "targetLoader", publicName: "targetLoader", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { nodeMoved: "nodeMoved", selectedItensChange: "selectedItensChange", itensToSelectChange: "itensToSelectChange" }, queries: [{ propertyName: "templates", predicate: TemplateDirective }], usesOnChanges: true, ngImport: i0, template: "<ng-template\n #previewRender\n let-itens=\"itens\"\n let-template=\"template\"\n>\n <section class=\"picklist-items\">\n @for (item of itens; track $index) {\n <ng-container *ngTemplateOutlet=\"template; context: { item: item.data }\"></ng-container>\n }\n </section>\n</ng-template>\n\n<ng-template\n #picklistItensRender\n let-id=\"id\"\n let-itens=\"itens\"\n let-template=\"template\"\n let-listConnectedTo=\"listConnectedTo\"\n let-isLoading=\"isLoading\"\n>\n <div\n class=\"picklist-items\"\n cdkDropList\n [id]=\"id\"\n [cdkDropListSortingDisabled]=\"true\"\n [cdkDropListData]=\"itens\"\n [cdkDropListConnectedTo]=\"listConnectedTo\"\n (cdkDropListDropped)=\"drop($event)\"\n *sLoadingState=\"{ loading: isLoading, indicator: logoIndicator }\"\n (scroll)=\"onScroll($event, id)\"\n >\n @for (item of itens; track $index) {\n <div\n cdkDrag\n [cdkDragDisabled]=\"item.disabled\"\n [cdkDragData]=\"item\"\n (click)=\"toggleSelected(item, id)\"\n (cdkDragStarted)=\"onDragStart($event, id)\"\n (cdkDragReleased)=\"onDragRelease()\"\n class=\"picklist-item\"\n [class.picklist-disabled]=\"item.disabled\"\n [class.picklist-item-invisible]=\"item.invisible\"\n [class.picklist-item-active]=\"item.selected\"\n >\n @if (showCheckbox) {\n <input\n type=\"checkbox\"\n class=\"input-checkbox\"\n [(ngModel)]=\"item.selected\"\n [disabled]=\"item.disabled\"\n />\n }\n <div class=\"picklist-content\">\n <ng-container\n *ngTemplateOutlet=\"\n template;\n context: { item: item.data, selected: item.selected, disabled: item.disabled }\n \"\n ></ng-container>\n </div>\n <ng-container *cdkDragPreview>\n <ng-container\n *ngTemplateOutlet=\"previewRender; context: { itens: selectedItensMap, template: template }\"\n ></ng-container>\n </ng-container>\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template\n #checkboxTitleRender\n let-disabled=\"disabled\"\n let-checked=\"checked\"\n let-changeFn=\"changeFn\"\n let-id=\"id\"\n>\n @if (showCheckbox && !lazyLoad()) {\n <input\n class=\"input-checkbox\"\n type=\"checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"checked\"\n (change)=\"changeFn($any($event.target).checked)\"\n />\n } @else if (showCheckbox && lazyLoad() && id === itensToSelectId) {\n <input\n class=\"input-checkbox\"\n type=\"checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"itensToSelectFilterUtil.allItensSelected\"\n (change)=\"checkAllAvailableItensChange($any($event.target).checked)\"\n />\n } @else if (showCheckbox && lazyLoad() && id === selectedItensId) {\n <input\n class=\"input-checkbox\"\n type=\"checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"selectedItensFilterUtil.allItensSelected\"\n (change)=\"checkAllSelectedItensChange($any($event.target).checked)\"\n />\n }\n</ng-template>\n\n<div class=\"picklist-container\">\n <div class=\"picklist-item-container\">\n <div class=\"picklist-box\">\n <div class=\"picklist-title-container\">\n @if (!filterBy && !lazyLoad()) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableItensToSelectCheckbox,\n checked: itensToSelectAllSelected,\n changeFn: checkAllAvailableItensChange.bind(this),\n id: itensToSelectId,\n }\n \"\n ></ng-container>\n }\n <span class=\"picklist-title\">\n {{ availableItensLabel || 'platform.angular_components.available-items' | translate }}\n </span>\n </div>\n @if (filterBy || lazyLoad()) {\n <div class=\"picklist-filter\">\n @if (showCheckbox) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableItensToSelectCheckbox,\n checked: itensToSelectAllSelected,\n changeFn: checkAllAvailableItensChange.bind(this),\n id: itensToSelectId,\n }\n \"\n ></ng-container>\n }\n <input\n type=\"text\"\n class=\"input-search\"\n [(ngModel)]=\"availableItensFilter\"\n (ngModelChange)=\"filterItensToSelect()\"\n [placeholder]=\"\n availableItensPlaceholder || 'platform.angular_components.picklist-placeholder' | translate\n \"\n />\n </div>\n }\n\n <ng-container\n *ngTemplateOutlet=\"\n picklistItensRender;\n context: {\n id: itensToSelectId,\n itens: itensToSelectFilterUtil.filteredItensToSelect,\n template: itemToSelectTemplate,\n listConnectedTo: selectedItensId,\n isLoading: _loadingSource(),\n }\n \"\n >\n </ng-container>\n </div>\n <div class=\"buttons-container\">\n <s-button\n [label]=\"addSelectedItensLabel || 'platform.angular_components.add' | translate\"\n priority=\"primary\"\n rightIconClass=\"fa fa-fw fa-arrow-right\"\n [disabled]=\"!hasSelectedItens\"\n (clicked)=\"add()\"\n [auxiliary]=\"false\"\n [caret]=\"false\"\n >\n </s-button>\n <s-button\n [label]=\"addAllItensLabel || 'platform.angular_components.add_all' | translate\"\n priority=\"link\"\n (clicked)=\"add(true)\"\n [auxiliary]=\"false\"\n >\n </s-button>\n </div>\n </div>\n <div class=\"picklist-item-container\">\n <div class=\"picklist-box\">\n <div class=\"picklist-title-container\">\n @if (!filterBy && !lazyLoad()) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableSelectedItensCheckbox,\n checked: selectedItensAllSelected,\n changeFn: checkAllSelectedItensChange.bind(this),\n id: selectedItensId,\n }\n \"\n ></ng-container>\n }\n <span class=\"picklist-title\">\n {{ selectedItensLabel || 'platform.angular_components.selected-items' | translate }}\n </span>\n </div>\n @if (filterBy || lazyLoad()) {\n <div class=\"picklist-filter\">\n @if (showCheckbox) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableSelectedItensCheckbox,\n checked: selectedItensAllSelected,\n changeFn: checkAllSelectedItensChange.bind(this),\n id: selectedItensId,\n }\n \"\n ></ng-container>\n }\n <input\n type=\"text\"\n class=\"input-search\"\n [(ngModel)]=\"selectedItensFilter\"\n (ngModelChange)=\"filterSelectedItens()\"\n [placeholder]=\"\n selectedItensPlaceholder || 'platform.angular_components.picklist-placeholder' | translate\n \"\n />\n </div>\n }\n <ng-container\n *ngTemplateOutlet=\"\n picklistItensRender;\n context: {\n id: selectedItensId,\n itens: selectedItensFilterUtil.filteredSelectedItens,\n template: itemSelectedTemplate,\n listConnectedTo: itensToSelectId,\n isLoading: _loadingTarget(),\n }\n \"\n >\n </ng-container>\n </div>\n <div class=\"buttons-container\">\n <s-button\n [label]=\"removeSelectedItemsLabel || 'platform.angular_components.remove' | translate\"\n priority=\"primary\"\n iconClass=\"fa fa-fw fa-arrow-left\"\n [disabled]=\"!hasSelectedItens\"\n [auxiliary]=\"false\"\n (clicked)=\"remove()\"\n [caret]=\"false\"\n >\n </s-button>\n <s-button\n [label]=\"removeAllItemsLabel || 'platform.angular_components.remove_all' | translate\"\n priority=\"link\"\n (clicked)=\"remove(true)\"\n [auxiliary]=\"false\"\n >\n </s-button>\n </div>\n </div>\n</div>\n\n", styles: [".picklist-container{display:flex;flex-wrap:wrap;border-radius:4px solid #dedce5;width:100%;background-color:#fff;gap:20px;padding:8px}.picklist-container .picklist-item-container{display:flex;flex-direction:column;flex:1}.picklist-container .picklist-item-container .picklist-box{border:1px solid #dedce5;padding:8px;height:100%;min-width:200px}.picklist-container .picklist-item-container .picklist-box .picklist-filter{display:flex;width:100%}.picklist-container .picklist-item-container .picklist-box .picklist-filter .input-search{border:1px solid #dedce5;min-height:35px;width:100%;border-radius:3px;margin-bottom:10px;margin-top:10px;padding:0 8px;flex:1}.picklist-container .picklist-item-container .picklist-box .picklist-title-container{width:100%;display:flex;align-items:center}.picklist-container .picklist-item-container .picklist-box .picklist-title-container .picklist-title{font-family:Open Sans;font-size:14px;font-weight:700;line-height:21px;text-underline-position:from-font;text-decoration-skip-ink:none}.picklist-container .picklist-item-container .picklist-box .picklist-items{max-height:23em;overflow:auto;height:100%;min-height:100px}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-content{width:100%;height:100%;padding-right:8px;border-radius:3px;margin-bottom:8px}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item{height:55px;border:3px;display:flex}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item:not(.picklist-disabled){cursor:pointer}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item:hover:not(.picklist-disabled,.picklist-item-active,.picklist-item-invisible){background-color:#f1f7f8}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item-active:not(.picklist-item-invisible){background-color:#d5e8ec}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-disabled{opacity:.5;background-color:#fbfafc}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item-invisible{display:none!important}.picklist-container .picklist-item-container .buttons-container{padding-top:10px;display:flex}.picklist-container .picklist-item-container .input-checkbox{margin:12px}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i2.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i2.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel"], outputs: ["clicked"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: LoadingStateModule }, { kind: "directive", type: i4.LoadingStateDirective, selector: "[sLoadingState]", inputs: ["sLoadingState"] }] });
|
|
264
616
|
}
|
|
265
617
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PicklistComponent, decorators: [{
|
|
266
618
|
type: Component,
|
|
267
|
-
args: [{ selector: 's-picklist', template: "<ng-template\n #previewRender\n let-itens=\"itens\"\n let-template=\"template\"\n>\n <section class=\"picklist-items\">\n @for (item of itens; track $index) {\n <ng-container *ngTemplateOutlet=\"template; context: { item: item.data }\"></ng-container>\n }\n </section>\n</ng-template>\n\n<ng-template\n #picklistItensRender\n let-id=\"id\"\n let-itens=\"itens\"\n let-template=\"template\"\n let-listConnectedTo=\"listConnectedTo\"\n>\n <div\n class=\"picklist-items\"\n cdkDropList\n [id]=\"id\"\n [cdkDropListSortingDisabled]=\"true\"\n [cdkDropListData]=\"itens\"\n [cdkDropListConnectedTo]=\"listConnectedTo\"\n (cdkDropListDropped)=\"drop($event)\"\n >\n @for (item of itens; track $index) {\n <div\n cdkDrag\n [cdkDragDisabled]=\"item.disabled\"\n [cdkDragData]=\"item\"\n (click)=\"toggleSelected(item, id)\"\n (cdkDragStarted)=\"onDragStart($event, id)\"\n (cdkDragReleased)=\"onDragRelease()\"\n class=\"picklist-item\"\n [class.picklist-disabled]=\"item.disabled\"\n [class.picklist-item-invisible]=\"item.invisible\"\n [class.picklist-item-active]=\"item.selected\"\n >\n @if (showCheckbox) {\n <input\n type=\"checkbox\"\n class=\"input-checkbox\"\n [(ngModel)]=\"item.selected\"\n [disabled]=\"item.disabled\"\n />\n }\n <div class=\"picklist-content\">\n <ng-container *ngTemplateOutlet=\"template; context: { item: item.data, selected: item.selected, disabled: item.disabled }\"></ng-container>\n </div>\n <ng-container *cdkDragPreview>\n <ng-container *ngTemplateOutlet=\"previewRender; context: { itens: selectedItensMap, template: template }\"></ng-container>\n </ng-container>\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template\n #checkboxTitleRender\n let-disabled=\"disabled\"\n let-checked=\"checked\"\n let-changeFn=\"changeFn\"\n>\n @if (showCheckbox) {\n <input\n class=\"input-checkbox\"\n type=\"checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"checked\"\n (change)=\"changeFn($event.target)\"\n />\n }\n</ng-template>\n\n<div class=\"picklist-container\">\n <div class=\"picklist-item-container\">\n <div class=\"picklist-box\">\n <div class=\"picklist-title-container\">\n @if (!filterBy) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableItensToSelectCheckbox,\n checked: itensToSelectAllSelected,\n changeFn: checkAllAvailableItensChange.bind(this),\n }\n \"\n ></ng-container>\n }\n <span class=\"picklist-title\">\n {{ availableItensLabel || 'platform.angular_components.available-items' | translate }}\n </span>\n </div>\n @if (filterBy && showCheckbox) {\n <div class=\"picklist-filter\">\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableItensToSelectCheckbox,\n checked: itensToSelectAllSelected,\n changeFn: checkAllAvailableItensChange.bind(this),\n }\n \"\n ></ng-container>\n @if (filterBy) {\n <input\n type=\"text\"\n class=\"input-search\"\n [(ngModel)]=\"availableItensFilter\"\n (ngModelChange)=\"filterItensToSelect()\"\n [placeholder]=\"availableItensPlaceholder || 'platform.angular_components.picklist-placeholder' | translate\"\n />\n }\n </div>\n }\n\n <ng-container\n *ngTemplateOutlet=\"\n picklistItensRender;\n context: {\n id: itensToSelectId,\n itens: itensToSelectFilterUtil.filteredItensToSelect,\n template: itemToSelectTemplate,\n listConnectedTo: selectedItensId,\n }\n \"\n >\n </ng-container>\n </div>\n <div class=\"buttons-container\">\n <s-button\n [label]=\"addSelectedItensLabel || 'platform.angular_components.add' | translate\"\n priority=\"primary\"\n rightIconClass=\"fa fa-fw fa-arrow-right\"\n [disabled]=\"!canAddItens\"\n (clicked)=\"add()\"\n [auxiliary]=\"false\"\n [caret]=\"false\"\n >\n </s-button>\n <s-button\n [label]=\"addAllItensLabel || 'platform.angular_components.add_all' | translate\"\n priority=\"link\"\n (clicked)=\"add(true)\"\n [auxiliary]=\"false\"\n >\n </s-button>\n </div>\n </div>\n <div class=\"picklist-item-container\">\n <div class=\"picklist-box\">\n <div class=\"picklist-title-container\">\n @if (!filterBy) {\n <ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableSelectedItensCheckbox,\n checked: selectedItensAllSelected,\n changeFn: checkAllSelectedItensChange.bind(this),\n }\n \"\n ></ng-container>\n </ng-container>\n }\n <span class=\"picklist-title\">\n {{ selectedItensLabel || 'platform.angular_components.selected-items' | translate }}\n </span>\n </div>\n <div\n class=\"picklist-filter\"\n *ngIf=\"filterBy && showCheckbox\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: { disabled: disableSelectedItensCheckbox, checked: selectedItensAllSelected, changeFn: checkAllSelectedItensChange.bind(this) }\n \"\n ></ng-container>\n @if (filterBy) {\n <input\n type=\"text\"\n class=\"input-search\"\n [(ngModel)]=\"selectedItensFilter\"\n (ngModelChange)=\"filterSelectedItens()\"\n [placeholder]=\"selectedItensPlaceholder || 'platform.angular_components.picklist-placeholder' | translate\"\n />\n }\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n picklistItensRender;\n context: {\n id: selectedItensId,\n itens: selectedItensFilterUtil.filteredSelectedItens,\n template: itemSelectedTemplate,\n listConnectedTo: itensToSelectId,\n }\n \"\n >\n </ng-container>\n </div>\n <div class=\"buttons-container\">\n <s-button\n [label]=\"removeSelectedItemsLabel || 'platform.angular_components.remove' | translate\"\n priority=\"primary\"\n iconClass=\"fa fa-fw fa-arrow-left\"\n [disabled]=\"!canRemoveItens\"\n [auxiliary]=\"false\"\n (clicked)=\"remove()\"\n [caret]=\"false\"\n >\n </s-button>\n <s-button\n [label]=\"removeAllItemsLabel || 'platform.angular_components.remove_all' | translate\"\n priority=\"link\"\n (clicked)=\"remove(true)\"\n [auxiliary]=\"false\"\n >\n </s-button>\n </div>\n </div>\n</div>\n", styles: [".picklist-container{display:flex;flex-wrap:wrap;border-radius:4px solid #dedce5;width:100%;background-color:#fff;gap:20px;padding:8px}.picklist-container .picklist-item-container{display:flex;flex-direction:column;flex:1}.picklist-container .picklist-item-container .picklist-box{border:1px solid #dedce5;padding:8px;height:100%;min-width:200px}.picklist-container .picklist-item-container .picklist-box .picklist-filter{display:flex;width:100%}.picklist-container .picklist-item-container .picklist-box .picklist-filter .input-search{border:1px solid #dedce5;min-height:35px;width:100%;border-radius:3px;margin-bottom:10px;margin-top:10px;padding:0 8px;flex:1}.picklist-container .picklist-item-container .picklist-box .picklist-title-container{width:100%;display:flex;align-items:center}.picklist-container .picklist-item-container .picklist-box .picklist-title-container .picklist-title{font-family:Open Sans;font-size:14px;font-weight:700;line-height:21px;text-underline-position:from-font;text-decoration-skip-ink:none}.picklist-container .picklist-item-container .picklist-box .picklist-items{max-height:23em;overflow:auto;height:100%;min-height:55px}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-content{width:100%;height:100%;padding-right:8px;border-radius:3px;margin-bottom:8px}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item{height:55px;border:3px;display:flex}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item:not(.picklist-disabled){cursor:pointer}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item:hover:not(.picklist-disabled,.picklist-item-active,.picklist-item-invisible){background-color:#f1f7f8}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item-active:not(.picklist-item-invisible){background-color:#d5e8ec}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-disabled{opacity:.5;background-color:#fbfafc}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item-invisible{display:none!important}.picklist-container .picklist-item-container .buttons-container{padding-top:10px;display:flex}.picklist-container .picklist-item-container .input-checkbox{margin:12px}\n"] }]
|
|
619
|
+
args: [{ standalone: true, imports: [TranslateModule, DragDropModule, FormsModule, ButtonComponent, NgTemplateOutlet, LoadingStateModule], selector: 's-picklist', template: "<ng-template\n #previewRender\n let-itens=\"itens\"\n let-template=\"template\"\n>\n <section class=\"picklist-items\">\n @for (item of itens; track $index) {\n <ng-container *ngTemplateOutlet=\"template; context: { item: item.data }\"></ng-container>\n }\n </section>\n</ng-template>\n\n<ng-template\n #picklistItensRender\n let-id=\"id\"\n let-itens=\"itens\"\n let-template=\"template\"\n let-listConnectedTo=\"listConnectedTo\"\n let-isLoading=\"isLoading\"\n>\n <div\n class=\"picklist-items\"\n cdkDropList\n [id]=\"id\"\n [cdkDropListSortingDisabled]=\"true\"\n [cdkDropListData]=\"itens\"\n [cdkDropListConnectedTo]=\"listConnectedTo\"\n (cdkDropListDropped)=\"drop($event)\"\n *sLoadingState=\"{ loading: isLoading, indicator: logoIndicator }\"\n (scroll)=\"onScroll($event, id)\"\n >\n @for (item of itens; track $index) {\n <div\n cdkDrag\n [cdkDragDisabled]=\"item.disabled\"\n [cdkDragData]=\"item\"\n (click)=\"toggleSelected(item, id)\"\n (cdkDragStarted)=\"onDragStart($event, id)\"\n (cdkDragReleased)=\"onDragRelease()\"\n class=\"picklist-item\"\n [class.picklist-disabled]=\"item.disabled\"\n [class.picklist-item-invisible]=\"item.invisible\"\n [class.picklist-item-active]=\"item.selected\"\n >\n @if (showCheckbox) {\n <input\n type=\"checkbox\"\n class=\"input-checkbox\"\n [(ngModel)]=\"item.selected\"\n [disabled]=\"item.disabled\"\n />\n }\n <div class=\"picklist-content\">\n <ng-container\n *ngTemplateOutlet=\"\n template;\n context: { item: item.data, selected: item.selected, disabled: item.disabled }\n \"\n ></ng-container>\n </div>\n <ng-container *cdkDragPreview>\n <ng-container\n *ngTemplateOutlet=\"previewRender; context: { itens: selectedItensMap, template: template }\"\n ></ng-container>\n </ng-container>\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template\n #checkboxTitleRender\n let-disabled=\"disabled\"\n let-checked=\"checked\"\n let-changeFn=\"changeFn\"\n let-id=\"id\"\n>\n @if (showCheckbox && !lazyLoad()) {\n <input\n class=\"input-checkbox\"\n type=\"checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"checked\"\n (change)=\"changeFn($any($event.target).checked)\"\n />\n } @else if (showCheckbox && lazyLoad() && id === itensToSelectId) {\n <input\n class=\"input-checkbox\"\n type=\"checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"itensToSelectFilterUtil.allItensSelected\"\n (change)=\"checkAllAvailableItensChange($any($event.target).checked)\"\n />\n } @else if (showCheckbox && lazyLoad() && id === selectedItensId) {\n <input\n class=\"input-checkbox\"\n type=\"checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"selectedItensFilterUtil.allItensSelected\"\n (change)=\"checkAllSelectedItensChange($any($event.target).checked)\"\n />\n }\n</ng-template>\n\n<div class=\"picklist-container\">\n <div class=\"picklist-item-container\">\n <div class=\"picklist-box\">\n <div class=\"picklist-title-container\">\n @if (!filterBy && !lazyLoad()) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableItensToSelectCheckbox,\n checked: itensToSelectAllSelected,\n changeFn: checkAllAvailableItensChange.bind(this),\n id: itensToSelectId,\n }\n \"\n ></ng-container>\n }\n <span class=\"picklist-title\">\n {{ availableItensLabel || 'platform.angular_components.available-items' | translate }}\n </span>\n </div>\n @if (filterBy || lazyLoad()) {\n <div class=\"picklist-filter\">\n @if (showCheckbox) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableItensToSelectCheckbox,\n checked: itensToSelectAllSelected,\n changeFn: checkAllAvailableItensChange.bind(this),\n id: itensToSelectId,\n }\n \"\n ></ng-container>\n }\n <input\n type=\"text\"\n class=\"input-search\"\n [(ngModel)]=\"availableItensFilter\"\n (ngModelChange)=\"filterItensToSelect()\"\n [placeholder]=\"\n availableItensPlaceholder || 'platform.angular_components.picklist-placeholder' | translate\n \"\n />\n </div>\n }\n\n <ng-container\n *ngTemplateOutlet=\"\n picklistItensRender;\n context: {\n id: itensToSelectId,\n itens: itensToSelectFilterUtil.filteredItensToSelect,\n template: itemToSelectTemplate,\n listConnectedTo: selectedItensId,\n isLoading: _loadingSource(),\n }\n \"\n >\n </ng-container>\n </div>\n <div class=\"buttons-container\">\n <s-button\n [label]=\"addSelectedItensLabel || 'platform.angular_components.add' | translate\"\n priority=\"primary\"\n rightIconClass=\"fa fa-fw fa-arrow-right\"\n [disabled]=\"!hasSelectedItens\"\n (clicked)=\"add()\"\n [auxiliary]=\"false\"\n [caret]=\"false\"\n >\n </s-button>\n <s-button\n [label]=\"addAllItensLabel || 'platform.angular_components.add_all' | translate\"\n priority=\"link\"\n (clicked)=\"add(true)\"\n [auxiliary]=\"false\"\n >\n </s-button>\n </div>\n </div>\n <div class=\"picklist-item-container\">\n <div class=\"picklist-box\">\n <div class=\"picklist-title-container\">\n @if (!filterBy && !lazyLoad()) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableSelectedItensCheckbox,\n checked: selectedItensAllSelected,\n changeFn: checkAllSelectedItensChange.bind(this),\n id: selectedItensId,\n }\n \"\n ></ng-container>\n }\n <span class=\"picklist-title\">\n {{ selectedItensLabel || 'platform.angular_components.selected-items' | translate }}\n </span>\n </div>\n @if (filterBy || lazyLoad()) {\n <div class=\"picklist-filter\">\n @if (showCheckbox) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableSelectedItensCheckbox,\n checked: selectedItensAllSelected,\n changeFn: checkAllSelectedItensChange.bind(this),\n id: selectedItensId,\n }\n \"\n ></ng-container>\n }\n <input\n type=\"text\"\n class=\"input-search\"\n [(ngModel)]=\"selectedItensFilter\"\n (ngModelChange)=\"filterSelectedItens()\"\n [placeholder]=\"\n selectedItensPlaceholder || 'platform.angular_components.picklist-placeholder' | translate\n \"\n />\n </div>\n }\n <ng-container\n *ngTemplateOutlet=\"\n picklistItensRender;\n context: {\n id: selectedItensId,\n itens: selectedItensFilterUtil.filteredSelectedItens,\n template: itemSelectedTemplate,\n listConnectedTo: itensToSelectId,\n isLoading: _loadingTarget(),\n }\n \"\n >\n </ng-container>\n </div>\n <div class=\"buttons-container\">\n <s-button\n [label]=\"removeSelectedItemsLabel || 'platform.angular_components.remove' | translate\"\n priority=\"primary\"\n iconClass=\"fa fa-fw fa-arrow-left\"\n [disabled]=\"!hasSelectedItens\"\n [auxiliary]=\"false\"\n (clicked)=\"remove()\"\n [caret]=\"false\"\n >\n </s-button>\n <s-button\n [label]=\"removeAllItemsLabel || 'platform.angular_components.remove_all' | translate\"\n priority=\"link\"\n (clicked)=\"remove(true)\"\n [auxiliary]=\"false\"\n >\n </s-button>\n </div>\n </div>\n</div>\n\n", styles: [".picklist-container{display:flex;flex-wrap:wrap;border-radius:4px solid #dedce5;width:100%;background-color:#fff;gap:20px;padding:8px}.picklist-container .picklist-item-container{display:flex;flex-direction:column;flex:1}.picklist-container .picklist-item-container .picklist-box{border:1px solid #dedce5;padding:8px;height:100%;min-width:200px}.picklist-container .picklist-item-container .picklist-box .picklist-filter{display:flex;width:100%}.picklist-container .picklist-item-container .picklist-box .picklist-filter .input-search{border:1px solid #dedce5;min-height:35px;width:100%;border-radius:3px;margin-bottom:10px;margin-top:10px;padding:0 8px;flex:1}.picklist-container .picklist-item-container .picklist-box .picklist-title-container{width:100%;display:flex;align-items:center}.picklist-container .picklist-item-container .picklist-box .picklist-title-container .picklist-title{font-family:Open Sans;font-size:14px;font-weight:700;line-height:21px;text-underline-position:from-font;text-decoration-skip-ink:none}.picklist-container .picklist-item-container .picklist-box .picklist-items{max-height:23em;overflow:auto;height:100%;min-height:100px}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-content{width:100%;height:100%;padding-right:8px;border-radius:3px;margin-bottom:8px}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item{height:55px;border:3px;display:flex}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item:not(.picklist-disabled){cursor:pointer}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item:hover:not(.picklist-disabled,.picklist-item-active,.picklist-item-invisible){background-color:#f1f7f8}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item-active:not(.picklist-item-invisible){background-color:#d5e8ec}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-disabled{opacity:.5;background-color:#fbfafc}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item-invisible{display:none!important}.picklist-container .picklist-item-container .buttons-container{padding-top:10px;display:flex}.picklist-container .picklist-item-container .input-checkbox{margin:12px}\n"] }]
|
|
268
620
|
}], propDecorators: { itensToSelect: [{
|
|
269
621
|
type: Input
|
|
270
622
|
}], selectedItens: [{
|
|
@@ -322,40 +674,26 @@ const mapData = (list) => {
|
|
|
322
674
|
return list.map((x) => x.data);
|
|
323
675
|
};
|
|
324
676
|
const parseValueEmit = pipe(filterEnabled, mapData);
|
|
325
|
-
const parseItensPickList = (array, disabledFn) => {
|
|
677
|
+
const parseItensPickList = (array, disabledFn, idKey) => {
|
|
326
678
|
return array.map((x) => {
|
|
327
679
|
return {
|
|
328
680
|
data: x,
|
|
329
681
|
disabled: disabledFn ? disabledFn(x) : false,
|
|
682
|
+
id: idKey ? String(x[idKey]) : crypto.randomUUID(),
|
|
330
683
|
};
|
|
331
684
|
});
|
|
332
685
|
};
|
|
333
686
|
|
|
334
687
|
class PicklistModule {
|
|
335
688
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PicklistModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
336
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: PicklistModule,
|
|
337
|
-
|
|
338
|
-
DragDropModule,
|
|
339
|
-
FormsModule,
|
|
340
|
-
ButtonModule], exports: [PicklistComponent] });
|
|
341
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PicklistModule, imports: [CommonModule,
|
|
342
|
-
TranslateModule,
|
|
343
|
-
DragDropModule,
|
|
344
|
-
FormsModule,
|
|
345
|
-
ButtonModule] });
|
|
689
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: PicklistModule, imports: [PicklistComponent], exports: [PicklistComponent] });
|
|
690
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PicklistModule, imports: [PicklistComponent] });
|
|
346
691
|
}
|
|
347
692
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PicklistModule, decorators: [{
|
|
348
693
|
type: NgModule,
|
|
349
694
|
args: [{
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
CommonModule,
|
|
353
|
-
TranslateModule,
|
|
354
|
-
DragDropModule,
|
|
355
|
-
FormsModule,
|
|
356
|
-
ButtonModule,
|
|
357
|
-
],
|
|
358
|
-
exports: [PicklistComponent]
|
|
695
|
+
imports: [PicklistComponent],
|
|
696
|
+
exports: [PicklistComponent],
|
|
359
697
|
}]
|
|
360
698
|
}] });
|
|
361
699
|
|