cilog-lib 0.3.9 → 0.4.3
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/cilog-lib.d.ts +1 -3
- package/esm2020/cilog-lib.mjs +5 -0
- package/esm2020/lib/cilog-lib.component.mjs +26 -0
- package/esm2020/lib/cilog-lib.module.mjs +69 -0
- package/esm2020/lib/cilog-lib.service.mjs +14 -0
- package/esm2020/lib/helpers/enums/grille.enum.mjs +24 -0
- package/esm2020/lib/helpers/interfaces/edition.interface.mjs +2 -0
- package/esm2020/lib/helpers/interfaces/grille.interface.mjs +2 -0
- package/esm2020/lib/helpers/interfaces/message.interface.mjs +2 -0
- package/esm2020/lib/modules/primeng.module.mjs +72 -0
- package/esm2020/lib/services/message.service.mjs +27 -0
- package/esm2020/lib/services/table.service.mjs +14 -0
- package/esm2020/lib/views/message/message.component.mjs +77 -0
- package/esm2020/lib/views/table/table.component.mjs +312 -0
- package/esm2020/public-api.mjs +20 -0
- package/fesm2015/cilog-lib.mjs +620 -0
- package/fesm2015/cilog-lib.mjs.map +1 -0
- package/fesm2020/cilog-lib.mjs +620 -0
- package/fesm2020/cilog-lib.mjs.map +1 -0
- package/lib/cilog-lib.component.d.ts +3 -0
- package/lib/cilog-lib.module.d.ts +12 -0
- package/lib/cilog-lib.service.d.ts +3 -0
- package/lib/helpers/enums/grille.enum.d.ts +1 -0
- package/lib/helpers/interfaces/grille.interface.d.ts +5 -0
- package/lib/modules/primeng.module.d.ts +18 -0
- package/lib/services/message.service.d.ts +3 -0
- package/lib/services/table.service.d.ts +3 -0
- package/lib/views/message/message.component.d.ts +3 -0
- package/lib/views/table/table.component.d.ts +7 -2
- package/package.json +22 -15
- package/public-api.d.ts +2 -0
- package/bundles/cilog-lib.umd.js +0 -840
- package/bundles/cilog-lib.umd.js.map +0 -1
- package/bundles/cilog-lib.umd.min.js +0 -2
- package/bundles/cilog-lib.umd.min.js.map +0 -1
- package/cilog-lib.metadata.json +0 -1
- package/esm2015/cilog-lib.js +0 -8
- package/esm2015/lib/cilog-lib.component.js +0 -18
- package/esm2015/lib/cilog-lib.module.js +0 -44
- package/esm2015/lib/cilog-lib.service.js +0 -13
- package/esm2015/lib/helpers/enums/grille.enum.js +0 -23
- package/esm2015/lib/helpers/interfaces/edition.interface.js +0 -2
- package/esm2015/lib/helpers/interfaces/grille.interface.js +0 -2
- package/esm2015/lib/helpers/interfaces/message.interface.js +0 -2
- package/esm2015/lib/modules/primeng.module.js +0 -39
- package/esm2015/lib/services/message.service.js +0 -25
- package/esm2015/lib/services/table.service.js +0 -13
- package/esm2015/lib/views/message/message.component.js +0 -76
- package/esm2015/lib/views/table/table.component.js +0 -264
- package/esm2015/public-api.js +0 -18
- package/fesm2015/cilog-lib.js +0 -507
- package/fesm2015/cilog-lib.js.map +0 -1
|
@@ -1,264 +0,0 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter, ViewChild, ChangeDetectorRef } from '@angular/core';
|
|
2
|
-
import { ConfirmationService, FilterService } from 'primeng/api';
|
|
3
|
-
import { ColType } from '../../helpers/enums/grille.enum';
|
|
4
|
-
export class CilogTableComponent {
|
|
5
|
-
constructor(confirmationService, filterService, cdRef) {
|
|
6
|
-
this.confirmationService = confirmationService;
|
|
7
|
-
this.filterService = filterService;
|
|
8
|
-
this.cdRef = cdRef;
|
|
9
|
-
this.onEdit = new EventEmitter();
|
|
10
|
-
this.onEditInit = new EventEmitter();
|
|
11
|
-
this.onDelete = new EventEmitter();
|
|
12
|
-
this.onSelect = new EventEmitter();
|
|
13
|
-
this.onUnselect = new EventEmitter();
|
|
14
|
-
this.onFilter = new EventEmitter();
|
|
15
|
-
this.onSort = new EventEmitter();
|
|
16
|
-
this.onPage = new EventEmitter();
|
|
17
|
-
}
|
|
18
|
-
ngOnInit() {
|
|
19
|
-
// Date
|
|
20
|
-
this.filterService.register('dateRangeFilter', (cell, filter) => {
|
|
21
|
-
if (filter == null) {
|
|
22
|
-
return true;
|
|
23
|
-
}
|
|
24
|
-
let start = filter[0].getTime();
|
|
25
|
-
let end;
|
|
26
|
-
if (filter[1]) {
|
|
27
|
-
end = filter[1].getTime() + 86400000;
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
end = start + 86400000;
|
|
31
|
-
}
|
|
32
|
-
return cell.value == null ? false : cell.value.getTime() >= start && cell.value.getTime() <= end;
|
|
33
|
-
});
|
|
34
|
-
// Text
|
|
35
|
-
this.filterService.register('textFilter', (cell, filter) => {
|
|
36
|
-
if (filter == null || filter.trim() == '') {
|
|
37
|
-
return true;
|
|
38
|
-
}
|
|
39
|
-
if (cell.value == null) {
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
return cell.value.toLowerCase().includes(filter.toLowerCase());
|
|
43
|
-
});
|
|
44
|
-
// Number
|
|
45
|
-
this.filterService.register('numberFilter', (cell, filter) => {
|
|
46
|
-
if (filter == null) {
|
|
47
|
-
return true;
|
|
48
|
-
}
|
|
49
|
-
if (cell.value == null) {
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
return cell.value == filter;
|
|
53
|
-
});
|
|
54
|
-
// Objet
|
|
55
|
-
this.filterService.register('objetFilter', (cell, filter) => {
|
|
56
|
-
return (filter.indexOf(cell.value) != -1);
|
|
57
|
-
});
|
|
58
|
-
// Liste
|
|
59
|
-
this.filterService.register('listeFilter', (cell, filter) => {
|
|
60
|
-
let ok = false;
|
|
61
|
-
filter.forEach(val => {
|
|
62
|
-
if (cell.value.indexOf(val) != -1) {
|
|
63
|
-
ok = true;
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
return ok;
|
|
67
|
-
});
|
|
68
|
-
this.columns.forEach(col => {
|
|
69
|
-
if (col.options == null) {
|
|
70
|
-
col.options = { defaultFilters: null };
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
ngAfterViewInit() {
|
|
75
|
-
this.columns.forEach(col => {
|
|
76
|
-
if (col.options.defaultFilters != null) {
|
|
77
|
-
this.filter(col, col.options.defaultFilters, this.getFilterByCol(col));
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
|
-
this.cdRef.detectChanges();
|
|
81
|
-
}
|
|
82
|
-
// Sort
|
|
83
|
-
customSort(event) {
|
|
84
|
-
let col = this.columns.find(col => col.id == event.field);
|
|
85
|
-
this.onSort.emit({ column: col, order: event.order });
|
|
86
|
-
let typeCol = col.type;
|
|
87
|
-
event.data.sort((data1, data2) => {
|
|
88
|
-
let value1 = data1[event.field].value;
|
|
89
|
-
let value2 = data2[event.field].value;
|
|
90
|
-
let result = null;
|
|
91
|
-
if (value1 == null && value2 != null)
|
|
92
|
-
result = -1;
|
|
93
|
-
else if (value1 != null && value2 == null)
|
|
94
|
-
result = 1;
|
|
95
|
-
else if (value1 == null && value2 == null)
|
|
96
|
-
result = 0;
|
|
97
|
-
else if (typeCol == ColType.Text || typeCol == ColType.File)
|
|
98
|
-
result = value1.localeCompare(value2);
|
|
99
|
-
else if (typeCol == ColType.MultiSelect) {
|
|
100
|
-
result = this.getMultiSelectConcat(value1, this.getOption(col, data1, 'optionLabel')).localeCompare(this.getMultiSelectConcat(value2, this.getOption(col, data2, 'optionLabel')));
|
|
101
|
-
}
|
|
102
|
-
else if (typeCol == ColType.Dropdown || typeCol == ColType.SelectButton || typeCol == ColType.State) {
|
|
103
|
-
result = value1[this.getOption(col, data1, 'optionLabel')].localeCompare(value2[this.getOption(col, data2, 'optionLabel')]);
|
|
104
|
-
}
|
|
105
|
-
else if (typeCol == ColType.Number || typeCol == ColType.Date)
|
|
106
|
-
result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0;
|
|
107
|
-
else
|
|
108
|
-
result == 0;
|
|
109
|
-
return (event.order * result);
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
checkType(typeCol, col) {
|
|
113
|
-
return col['type'] == typeCol;
|
|
114
|
-
}
|
|
115
|
-
clickById(id) {
|
|
116
|
-
document.getElementById(id).click();
|
|
117
|
-
}
|
|
118
|
-
onEditCell(row, column, value) {
|
|
119
|
-
this.onEdit.emit({ row: row, column: column, value: value });
|
|
120
|
-
}
|
|
121
|
-
onSelectRow(row) {
|
|
122
|
-
this.onSelect.emit({ row: row });
|
|
123
|
-
}
|
|
124
|
-
onPageTable(event) {
|
|
125
|
-
this.onPage.emit(event);
|
|
126
|
-
}
|
|
127
|
-
onUnselectRow(row) {
|
|
128
|
-
this.onUnselect.emit({ row: row });
|
|
129
|
-
}
|
|
130
|
-
onDeleteLine(row) {
|
|
131
|
-
this.confirmationService.confirm({
|
|
132
|
-
key: 'confirm',
|
|
133
|
-
message: 'Êtes-vous sûr de vouloir supprimer cette ligne ?',
|
|
134
|
-
accept: () => {
|
|
135
|
-
this.values.splice(this.values.indexOf(row), 1);
|
|
136
|
-
this.values = [...this.values];
|
|
137
|
-
this.onDelete.emit({ row: row });
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
onEditInitCell(row, column, value) {
|
|
142
|
-
this.onEditInit.emit({ row: row, column: column, value: value });
|
|
143
|
-
}
|
|
144
|
-
isModeEdition() {
|
|
145
|
-
return this.options.editable;
|
|
146
|
-
}
|
|
147
|
-
getOption(col, row, option) {
|
|
148
|
-
if (row[col.id].options != null) {
|
|
149
|
-
if (row[col.id].options[option] != null) {
|
|
150
|
-
return row[col.id].options[option];
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
if (col.options != null) {
|
|
154
|
-
if (col.options[option] != null) {
|
|
155
|
-
return col.options[option];
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
return null;
|
|
159
|
-
}
|
|
160
|
-
getMultiSelectConcat(value, label) {
|
|
161
|
-
if (value != null) {
|
|
162
|
-
return value.map(val => { return val[label]; }).join(', ');
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
return '';
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
getSelectLibelleByValue(row, col) {
|
|
169
|
-
let label = '';
|
|
170
|
-
if (row[col.id].value == null) {
|
|
171
|
-
return label;
|
|
172
|
-
}
|
|
173
|
-
if (row[col.id].options != null) {
|
|
174
|
-
label = row[col.id].options['options'].find(opt => opt.value == row[col.id].value)[row[col.id].options.optionLabel];
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
if (col.options != null) {
|
|
178
|
-
label = col.options['options'].find(opt => opt.value == row[col.id].value)[col.options.optionLabel];
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
return label;
|
|
182
|
-
}
|
|
183
|
-
getFilterByCol(col) {
|
|
184
|
-
// Dates (range)
|
|
185
|
-
if (col.type == ColType.Date) {
|
|
186
|
-
return 'dateRangeFilter';
|
|
187
|
-
}
|
|
188
|
-
// Number
|
|
189
|
-
if (col.type == ColType.Number) {
|
|
190
|
-
return 'numberFilter';
|
|
191
|
-
}
|
|
192
|
-
// Objet
|
|
193
|
-
if (col.type == ColType.Dropdown || col.type == ColType.State || col.type == ColType.SelectButton) {
|
|
194
|
-
return 'objetFilter';
|
|
195
|
-
}
|
|
196
|
-
// Liste
|
|
197
|
-
if (col.type == ColType.MultiSelect) {
|
|
198
|
-
return 'listeFilter';
|
|
199
|
-
}
|
|
200
|
-
// Texte
|
|
201
|
-
if (col.type == ColType.File || col.type == ColType.Text) {
|
|
202
|
-
return 'textFilter';
|
|
203
|
-
}
|
|
204
|
-
return null;
|
|
205
|
-
}
|
|
206
|
-
onFilterCol(event, col) {
|
|
207
|
-
// Dates (range)
|
|
208
|
-
if (col.type == ColType.Date) {
|
|
209
|
-
this.filter(col, col.options.defaultFilters, 'dateRangeFilter');
|
|
210
|
-
}
|
|
211
|
-
// Number
|
|
212
|
-
if (col.type == ColType.Number) {
|
|
213
|
-
this.filter(col, event.value, 'numberFilter');
|
|
214
|
-
}
|
|
215
|
-
// Objet
|
|
216
|
-
if (col.type == ColType.Dropdown || col.type == ColType.State || col.type == ColType.SelectButton) {
|
|
217
|
-
this.filter(col, event.value, 'objetFilter');
|
|
218
|
-
}
|
|
219
|
-
// Liste
|
|
220
|
-
if (col.type == ColType.MultiSelect) {
|
|
221
|
-
this.filter(col, event.value, 'listeFilter');
|
|
222
|
-
}
|
|
223
|
-
// Texte
|
|
224
|
-
if (col.type == ColType.File || col.type == ColType.Text) {
|
|
225
|
-
this.filter(col, event.target.value, 'textFilter');
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
filter(col, val, filter) {
|
|
229
|
-
this.filterCol = col;
|
|
230
|
-
this.filterValue = val;
|
|
231
|
-
this.table.filter(val, col.id, filter);
|
|
232
|
-
}
|
|
233
|
-
onFilterTable(event) {
|
|
234
|
-
this.onFilter.emit({ column: this.filterCol, value: this.filterValue, filteredValue: this.table.filteredValue });
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
CilogTableComponent.decorators = [
|
|
238
|
-
{ type: Component, args: [{
|
|
239
|
-
selector: 'cilog-table',
|
|
240
|
-
template: "<p-table #table\r\n [columns]=\"columns\"\r\n [value]=\"values\"\r\n dataKey=\"id\"\r\n [selectionMode]=\"options.selectable && !isModeEdition() ? 'single' : null\"\r\n [(selection)]=\"selectedRow\"\r\n (onRowSelect)=\"onSelectRow($event)\"\r\n (onRowUnselect)=\"onUnselectRow($event)\"\r\n (sortFunction)=\"customSort($event)\"\r\n [customSort]=\"options.grouping == null ? true : false\"\r\n [scrollable]=\"true\"\r\n [loading]=\"loading\"\r\n [scrollHeight]=\"options.scrollHeight != null ? options.scrollHeight : null\"\r\n [rowGroupMode]=\"options.grouping != null ? 'subheader' : null\"\r\n [groupRowsBy]=\"options.grouping != null ? options.grouping.obj + '.' + options.grouping.id : null\"\r\n [virtualScroll]=\"options.virtualScroll != null && options.scrollHeight != null ? true : false\"\r\n [virtualRowHeight]=\"35\"\r\n [paginator]=\"options.paginator == null ? false : true\"\r\n [rows]=\"options.paginatorRows\"\r\n (onPage)=\"onPageTable($event)\"\r\n (onFilter)=\"onFilterTable($event)\">\r\n\r\n <!-- Header -->\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngFor=\"let col of columns\"\r\n [ngClass]=\"{ 'centerText' : options.centerHeaders }\"\r\n [pSortableColumn]=\"col.id\"\r\n [pSortableColumnDisabled]=\"(options.virtualScroll != null && options.virtualScroll != false) || options.grouping != null || !options.sortable\"\r\n id=\"{{ col.id }}\">\r\n <span>{{ col.libelle }}</span>\r\n <p-sortIcon *ngIf=\"(options.virtualScroll == null || options.virtualScroll == false) && options.sortable && options.grouping == null\" [field]=\"col.id\"></p-sortIcon>\r\n </th>\r\n <th class=\"cellDelete\" *ngIf=\"options.rowsDeletable\"></th>\r\n </tr>\r\n <!-- FILTRES -->\r\n <tr *ngIf=\"options.filterable\">\r\n <ng-container *ngFor=\"let col of columns\">\r\n <!-- Text -->\r\n <th *ngIf=\"checkType('Text', col) || checkType('File', col)\">\r\n <input pInputText\r\n type=\"text\"\r\n (input)=\"onFilterCol($event, col)\">\r\n </th>\r\n\r\n <!-- Date -->\r\n <th *ngIf=\"checkType('Date', col)\">\r\n <p-calendar dateFormat=\"dd/mm/yy\"\r\n [inputId]=\"col.id + '_filter'\"\r\n firstDayOfWeek=\"1\"\r\n [readonlyInput]=\"true\"\r\n appendTo=\"body\"\r\n selectionMode=\"range\"\r\n (onSelect)=\"onFilterCol($event, col)\"\r\n showButtonBar=\"true\"\r\n (onClearClick)=\"onFilterCol($event, col)\"\r\n [(ngModel)]=\"col.options.defaultFilters\">\r\n </p-calendar>\r\n </th>\r\n\r\n <!-- Number -->\r\n <th *ngIf=\"checkType('Number', col)\">\r\n <p-inputNumber mode=\"decimal\"\r\n locale=\"fr-FR\"\r\n [minFractionDigits]=\"2\"\r\n [showButtons]=\"true\"\r\n (onInput)=\"onFilterCol($event, col)\"\r\n [(ngModel)]=\"col.options.defaultFilters\">\r\n </p-inputNumber>\r\n </th>\r\n\r\n <!-- Liste -->\r\n <th *ngIf=\"checkType('Dropdown', col) || checkType('MultiSelect', col) || checkType('SelectButton', col) || checkType('State', col)\">\r\n <p-multiSelect [options]=\"col.options?.options\"\r\n [filter]=\"true\"\r\n dataKey=\"ID\"\r\n [optionLabel]=\"col.options?.optionLabel\"\r\n appendTo=\"body\"\r\n emptyFilterMessage=\"Aucun r\u00E9sultat\"\r\n emptyMessage=\"Aucun r\u00E9sultat\"\r\n itemSize=\"30\"\r\n selectedItemsLabel=\"{0} selectionn\u00E9s\"\r\n (onChange)=\"onFilterCol($event, col)\"\r\n [(ngModel)]=\"col.options.defaultFilters\">\r\n </p-multiSelect>\r\n </th>\r\n\r\n <!-- Non filtrable -->\r\n <th *ngIf=\"checkType('Button', col) || checkType('Image', col)\">\r\n\r\n </th>\r\n </ng-container>\r\n <th class=\"cellDelete\" *ngIf=\"options.rowsDeletable\"></th>\r\n </tr>\r\n </ng-template>\r\n\r\n <!-- Groupheader -->\r\n <ng-template pTemplate=\"groupheader\" let-rowData>\r\n <tr pRowGroupHeader class=\"row_grouping\">\r\n <td [attr.colspan]=\"columns.length + 1\">\r\n <span class=\"text_bold\">{{ rowData[options.grouping.obj][options.grouping.libelle] }}</span>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <!-- Body -->\r\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\">\r\n <tr id=\"{{ rowData.id }}\"\r\n [ngStyle]=\"{ 'background-color': rowData.color ? rowData.color : null }\"\r\n [pSelectableRow]=\"rowData\"\r\n [pSelectableRowDisabled]=\"!options.selectable || isModeEdition()\">\r\n <ng-container *ngFor=\"let col of columns\">\r\n\r\n <!-- Text -->\r\n <td *ngIf=\"checkType('Text', col) && isModeEdition() && !rowData.readonly && !rowData[col.id]?.readonly\"\r\n [ngStyle]=\"{ 'width' : col.width ? col.width : null, 'background-color': rowData[col.id].color ? rowData[col.id].color : null }\"\r\n id=\"{{ rowData[col.id] != null ? rowData[col.id].id : '' }}\"\r\n [pEditableColumn]=\"rowData\"\r\n [pEditableColumnField]=\"col.id\"\r\n [pTooltip]=\"rowData[col.id].value\"\r\n [tooltipDisabled]=\"!col.tooltip\"\r\n tooltipPosition=\"bottom\">\r\n <span class=\"p-column-title\">{{ col.libelle }} : </span>\r\n <input pInputText\r\n type=\"text\"\r\n [(ngModel)]=\"rowData[col.id].value\"\r\n (change)=\"onEditCell(rowData, col, rowData[col.id].value)\"\r\n (keyup.enter)=\"onEditCell(rowData, col, rowData[col.id].value)\"\r\n (click)=\"onEditInitCell(rowData, col, rowData[col.id].value)\" />\r\n </td>\r\n <td *ngIf=\"checkType('Text', col) && (!isModeEdition() || rowData.readonly || rowData[col.id]?.readonly)\"\r\n [ngStyle]=\"{ 'width' : col.width ? col.width : null, 'background-color': rowData[col.id].color ? rowData[col.id].color : null }\"\r\n id=\"{{ rowData[col.id] != null ? rowData[col.id].id : '' }}\"\r\n [ngClass]=\"{ 'paddingCell': rowData[col.id] != null }\"\r\n [pTooltip]=\"rowData[col.id].value\"\r\n [tooltipDisabled]=\"!col.tooltip\"\r\n tooltipPosition=\"bottom\">\r\n <span class=\"p-column-title\">{{ col.libelle }} : </span>\r\n <span *ngIf=\"rowData[col.id]\">{{ rowData[col.id].value }}</span>\r\n </td>\r\n\r\n <!-- Dropdown -->\r\n <td *ngIf=\"checkType('Dropdown', col) && isModeEdition() && !rowData.readonly && !rowData[col.id]?.readonly\"\r\n [ngStyle]=\"{ 'width' : col.width ? col.width : null, 'background-color': rowData[col.id].color ? rowData[col.id].color : null }\"\r\n id=\"{{ rowData[col.id] != null ? rowData[col.id].id : '' }}\"\r\n [ngClass]=\"rowData[col.id] != null ? 'paddingCell' : null\"\r\n [pTooltip]=\"rowData[col.id].value != null ? rowData[col.id].value[getOption(col, rowData, 'optionLabel')] : ''\"\r\n [tooltipDisabled]=\"!col.tooltip\"\r\n tooltipPosition=\"bottom\">\r\n <span class=\"p-column-title\">{{ col.libelle }} : </span>\r\n <p-dropdown *ngIf=\"rowData[col.id] != null\"\r\n dataKey=\"ID\"\r\n [options]=\"getOption(col, rowData, 'options')\"\r\n [filter]=\"getOption(col, rowData, 'filter')\"\r\n [optionLabel]=\"getOption(col, rowData, 'optionLabel')\"\r\n [(ngModel)]=\"rowData[col.id].value\"\r\n [autoDisplayFirst]=\"false\"\r\n appendTo=\"body\"\r\n emptyFilterMessage=\"Aucun r\u00E9sultat\"\r\n emptyMessage=\"Aucun r\u00E9sultat\"\r\n [baseZIndex]=\"getOption(col, rowData, 'baseZIndex')\"\r\n [virtualScroll]=\"getOption(col, rowData, 'virtualScroll')\"\r\n [readonly]=\"rowData.readonly || rowData[col.id]?.readonly\"\r\n itemSize=\"30\"\r\n (onChange)=\"onEditCell(rowData, col, rowData[col.id].value)\">\r\n </p-dropdown>\r\n </td>\r\n <td *ngIf=\"checkType('Dropdown', col) && (rowData.readonly || rowData[col.id]?.readonly || !isModeEdition())\"\r\n [ngStyle]=\"{ 'width' : col.width ? col.width : null, 'background-color': rowData[col.id].color ? rowData[col.id].color : null }\"\r\n id=\"{{ rowData[col.id] != null ? rowData[col.id].id : '' }}\"\r\n [ngClass]=\"rowData[col.id] != null ? 'paddingCell' : null\"\r\n [pTooltip]=\"rowData[col.id].value != null ? rowData[col.id].value[getOption(col, rowData, 'optionLabel')] : ''\"\r\n [tooltipDisabled]=\"!col.tooltip\"\r\n tooltipPosition=\"bottom\">\r\n <span class=\"p-column-title\">{{ col.libelle }} : </span>\r\n <span *ngIf=\"rowData[col.id]\">{{ rowData[col.id].value != null ? rowData[col.id].value[getOption(col, rowData, 'optionLabel')] : '' }}</span>\r\n </td>\r\n\r\n <!-- Number -->\r\n <td *ngIf=\"checkType('Number', col) && isModeEdition() && !rowData.readonly && !rowData[col.id]?.readonly\"\r\n [ngStyle]=\"{ 'width' : col.width ? col.width : null, 'background-color': rowData[col.id].color ? rowData[col.id].color : null }\"\r\n id=\"{{ rowData[col.id] != null ? rowData[col.id].id : '' }}\"\r\n [ngClass]=\"rowData[col.id] != null ? 'paddingCell' : null\"\r\n [pTooltip]=\"rowData[col.id].value | number\"\r\n [tooltipDisabled]=\"!col.tooltip\"\r\n tooltipPosition=\"bottom\">\r\n <span class=\"p-column-title\">{{ col.libelle }} : </span>\r\n <p-inputNumber *ngIf=\"rowData[col.id] && !rowData.readonly && !rowData[col.id]?.readonly\"\r\n mode=\"decimal\"\r\n locale=\"fr-FR\"\r\n [(ngModel)]=\"rowData[col.id].value\"\r\n [showButtons]=\"getOption(col, rowData, 'showButtons')\"\r\n [suffix]=\"getOption(col, rowData, 'suffix')\"\r\n [prefix]=\"getOption(col, rowData, 'prefix') != null ? getOption(col, rowData, 'prefix') + ' ' : null\"\r\n [minFractionDigits]=\"2\"\r\n [maxFractionDigits]=\"getOption(col, rowData, 'maxDecimales') != null ? getOption(col, rowData, 'maxDecimales') : 2 \"\r\n (ngModelChange)=\"onEditCell(rowData, col, rowData[col.id].value)\"\r\n (onFocus)=\"onEditInitCell(rowData, col, rowData[col.id].value)\">\r\n </p-inputNumber>\r\n </td>\r\n <td *ngIf=\"checkType('Number', col) && (rowData.readonly || rowData[col.id]?.readonly || !isModeEdition())\"\r\n [ngStyle]=\"{ 'width' : col.width ? col.width : null, 'background-color': rowData[col.id].color ? rowData[col.id].color : null }\"\r\n id=\"{{ rowData[col.id] != null ? rowData[col.id].id : '' }}\"\r\n [ngClass]=\"rowData[col.id] != null ? 'paddingCell' : null\"\r\n [pTooltip]=\"rowData[col.id].value | number\"\r\n [tooltipDisabled]=\"!col.tooltip\"\r\n tooltipPosition=\"bottom\">\r\n <span class=\"p-column-title\">{{ col.libelle }} : </span>\r\n <span *ngIf=\"rowData[col.id]\">{{ rowData[col.id].value | number }}</span>\r\n </td>\r\n\r\n <!-- Date -->\r\n <td *ngIf=\"checkType('Date', col) && isModeEdition() && !rowData.readonly && !rowData[col.id]?.readonly\"\r\n [ngStyle]=\"{ 'width' : col.width ? col.width : null, 'background-color': rowData[col.id].color ? rowData[col.id].color : null }\"\r\n id=\"{{ rowData[col.id] != null ? rowData[col.id].id : '' }}\"\r\n [ngClass]=\"rowData[col.id] != null ? 'paddingCell' : null\"\r\n [pTooltip]=\"rowData[col.id].value | date: 'dd/MM/yyyy'\"\r\n [tooltipDisabled]=\"!col.tooltip\"\r\n tooltipPosition=\"bottom\">\r\n <span class=\"p-column-title\">{{ col.libelle }} : </span>\r\n <p-calendar [(ngModel)]=\"rowData[col.id].value\"\r\n dateFormat=\"dd/mm/yy\"\r\n firstDayOfWeek=\"1\"\r\n (onSelect)=\"onEditCell(rowData, col, rowData[col.id].value)\"\r\n [readonlyInput]=\"true\"\r\n appendTo=\"body\">\r\n </p-calendar>\r\n </td>\r\n <td *ngIf=\"checkType('Date', col) && (rowData.readonly || rowData[col.id]?.readonly || !isModeEdition())\"\r\n [ngStyle]=\"{ 'width' : col.width ? col.width : null, 'background-color': rowData[col.id].color ? rowData[col.id].color : null }\"\r\n id=\"{{ rowData[col.id] != null ? rowData[col.id].id : '' }}\"\r\n [ngClass]=\"rowData[col.id] != null ? 'paddingCell' : null\"\r\n [pTooltip]=\"rowData[col.id].value | date: 'dd/MM/yyyy'\"\r\n [tooltipDisabled]=\"!col.tooltip\"\r\n tooltipPosition=\"bottom\">\r\n <span class=\"p-column-title\">{{ col.libelle }} : </span>\r\n <span *ngIf=\"rowData[col.id]\">{{ rowData[col.id].value | date: 'dd/MM/yyyy' }}</span>\r\n </td>\r\n\r\n <!-- MultiSelect -->\r\n <td *ngIf=\"checkType('MultiSelect', col) && isModeEdition() && !rowData.readonly && !rowData[col.id]?.readonly\"\r\n [ngStyle]=\"{ 'width' : col.width ? col.width : null, 'background-color': rowData[col.id].color ? rowData[col.id].color : null }\"\r\n id=\"{{ rowData[col.id] != null ? rowData[col.id].id : '' }}\"\r\n [ngClass]=\"rowData[col.id] != null ? 'paddingCell' : null\"\r\n [pTooltip]=\"getMultiSelectConcat(rowData[col.id].value, getOption(col, rowData, 'optionLabel'))\"\r\n [tooltipDisabled]=\"!col.tooltip\"\r\n tooltipPosition=\"bottom\">\r\n <span class=\"p-column-title\">{{ col.libelle }} : </span>\r\n <p-multiSelect *ngIf=\"rowData[col.id] != null\"\r\n [options]=\"getOption(col, rowData, 'options')\"\r\n [filter]=\"getOption(col, rowData, 'filter')\"\r\n [optionLabel]=\"getOption(col, rowData, 'optionLabel')\"\r\n [(ngModel)]=\"rowData[col.id].value\"\r\n appendTo=\"body\"\r\n dataKey=\"ID\"\r\n emptyFilterMessage=\"Aucun r\u00E9sultat\"\r\n emptyMessage=\"Aucun r\u00E9sultat\"\r\n [baseZIndex]=\"getOption(col, rowData, 'baseZIndex')\"\r\n [virtualScroll]=\"getOption(col, rowData, 'virtualScroll')\"\r\n [readonly]=\"rowData.readonly || rowData[col.id]?.readonly || !isModeEdition()\"\r\n itemSize=\"30\"\r\n selectedItemsLabel=\"{0} utilisateurs selectionn\u00E9s\"\r\n (onChange)=\"onEditCell(rowData, col, rowData[col.id].value)\"\r\n [showToggleAll]=\"false\"\r\n [showHeader]=\"getOption(col, rowData, 'filter')\"\r\n ngDefaultControl>\r\n </p-multiSelect>\r\n </td>\r\n <td *ngIf=\"checkType('MultiSelect', col) && (rowData.readonly || rowData[col.id]?.readonly || !isModeEdition())\"\r\n [ngStyle]=\"{ 'width' : col.width ? col.width : null, 'background-color': rowData[col.id].color ? rowData[col.id].color : null }\"\r\n id=\"{{ rowData[col.id] != null ? rowData[col.id].id : '' }}\"\r\n [ngClass]=\"rowData[col.id] != null ? 'paddingCell' : null\"\r\n [pTooltip]=\"getMultiSelectConcat(rowData[col.id].value, getOption(col, rowData, 'optionLabel'))\"\r\n [tooltipDisabled]=\"!col.tooltip\"\r\n tooltipPosition=\"bottom\">\r\n <span class=\"p-column-title\">{{ col.libelle }} : </span>\r\n <span *ngIf=\"rowData[col.id]\">{{ getMultiSelectConcat(rowData[col.id].value, getOption(col, rowData, 'optionLabel')) }}</span>\r\n </td>\r\n\r\n <!-- Image -->\r\n <td *ngIf=\"checkType('Image', col)\"\r\n [ngStyle]=\"{ 'width' : col.width ? col.width : null, 'background-color': rowData[col.id].color ? rowData[col.id].color : null }\"\r\n id=\"{{ rowData[col.id] != null ? rowData[col.id].id : '' }}\"\r\n [ngClass]=\"rowData[col.id] != null ? 'paddingCell' : null\"\r\n class=\"centerText\">\r\n <span class=\"p-column-title\">{{ col.libelle }} : </span>\r\n <img *ngIf=\"rowData[col.id]\" style=\"vertical-align: middle; width: 40px;\" src=\"{{ rowData[col.id].value }}\" />\r\n </td>\r\n\r\n <!-- Button -->\r\n <td *ngIf=\"checkType('Button', col)\"\r\n class=\"paddingCell centerText\"\r\n [ngStyle]=\"{ 'background-color': rowData[col.id].color ? rowData[col.id].color : null }\">\r\n <span class=\"p-column-title\">{{ col.libelle }} : </span>\r\n <button pButton\r\n [disabled]=\"rowData.readonly || rowData[col.id]?.readonly\"\r\n [ngClass]=\"'p-button-' + getOption(col, rowData, 'severity')\"\r\n [label]=\"getOption(col, rowData, 'label')\"\r\n [icon]=\"getOption(col, rowData, 'icon')\"\r\n (click)=\"rowData[col.id].value()\"\r\n [pTooltip]=\"getOption(col, rowData, 'label')\"\r\n [tooltipDisabled]=\"!col.tooltip\">\r\n </button>\r\n </td>\r\n\r\n <!-- SelectButton -->\r\n <td *ngIf=\"checkType('SelectButton', col) && isModeEdition() && !rowData.readonly && !rowData[col.id]?.readonly\"\r\n [ngStyle]=\"{ 'width' : col.width ? col.width : null, 'background-color': rowData[col.id].color ? rowData[col.id].color : null }\"\r\n id=\"{{ rowData[col.id] != null ? rowData[col.id].id : '' }}\"\r\n [ngClass]=\"rowData[col.id] != null ? 'paddingCell' : null\">\r\n <span class=\"p-column-title\">{{ col.libelle }} : </span>\r\n <p-selectButton *ngIf=\"rowData[col.id] != null\"\r\n [options]=\"getOption(col, rowData, 'options')\"\r\n [optionLabel]=\"getOption(col, rowData, 'optionLabel')\"\r\n [optionValue]=\"getOption(col, rowData, 'optionValue') != null ? getOption(col, rowData, 'optionValue') : 'value'\"\r\n [(ngModel)]=\"rowData[col.id].value\"\r\n [disabled]=\"rowData.readonly || rowData[col.id]?.readonly || !isModeEdition()\"\r\n (onChange)=\"onEditCell(rowData, col, rowData[col.id].value)\">\r\n </p-selectButton>\r\n </td>\r\n <td *ngIf=\"checkType('SelectButton', col) && (rowData.readonly || rowData[col.id]?.readonly || !isModeEdition())\"\r\n [ngStyle]=\"{ 'width' : col.width ? col.width : null, 'background-color': rowData[col.id].color ? rowData[col.id].color : null }\"\r\n id=\"{{ rowData[col.id] != null ? rowData[col.id].id : '' }}\"\r\n [ngClass]=\"rowData[col.id] != null ? 'paddingCell' : null\">\r\n <span class=\"p-column-title\">{{ col.libelle }} : </span>\r\n <span *ngIf=\"rowData[col.id]\">{{ getSelectLibelleByValue(rowData, col) }}</span>\r\n </td>\r\n\r\n <!-- File -->\r\n <td *ngIf=\"checkType('File', col) && isModeEdition() && !rowData.readonly && !rowData[col.id]?.readonly\"\r\n [ngStyle]=\"{ 'width' : col.width ? col.width : null, 'background-color': rowData[col.id].color ? rowData[col.id].color : null }\"\r\n id=\"{{ rowData[col.id] != null ? rowData[col.id].id : '' }}\"\r\n [ngClass]=\"rowData[col.id] != null ? 'paddingCell' : null\"\r\n [pTooltip]=\"rowData[col.id].value ? rowData[col.id].value : ''\"\r\n [tooltipDisabled]=\"!col.tooltip\">\r\n <span class=\"p-column-title\">{{ col.libelle }} : </span>\r\n <div class=\"p-inputgroup\" *ngIf=\"rowData[col.id] != null\">\r\n <button type=\"button\"\r\n pButton\r\n pRipple\r\n icon=\"pi pi-upload\"\r\n (click)=\"clickById('input_' + rowData[col.id].id)\"\r\n [disabled]=\"rowData.readonly || rowData[col.id]?.readonly || !isModeEdition()\">\r\n </button>\r\n <input id=\"{{'output_' + rowData[col.id].id}}\" pInputText type=\"text\" value=\"{{ rowData[col.id].value != null ? rowData[col.id].value : '' }}\" readonly>\r\n </div>\r\n <input *ngIf=\"rowData[col.id]\" id=\"{{'input_' + rowData[col.id].id}}\" #inputFile pInputText type=\"file\" hidden (change)=\"rowData[col.id].value = inputFile.files[0].name; onEditCell(rowData, col, inputFile.files[0])\">\r\n </td>\r\n <td *ngIf=\"checkType('File', col) && (rowData.readonly || rowData[col.id]?.readonly || !isModeEdition())\"\r\n [ngStyle]=\"{ 'width' : col.width ? col.width : null, 'background-color': rowData[col.id].color ? rowData[col.id].color : null }\"\r\n id=\"{{ rowData[col.id] != null ? rowData[col.id].id : '' }}\"\r\n [ngClass]=\"rowData[col.id] != null ? 'paddingCell' : null\"\r\n [pTooltip]=\"rowData[col.id].value ? rowData[col.id].value : ''\"\r\n [tooltipDisabled]=\"!col.tooltip\"\r\n tooltipPosition=\"bottom\">\r\n <span class=\"p-column-title\">{{ col.libelle }} : </span>\r\n <span *ngIf=\"rowData[col.id]\">{{ rowData[col.id].value ? rowData[col.id].value : '' }}</span>\r\n </td>\r\n\r\n <!-- State -->\r\n <td *ngIf=\"checkType('State', col)\"\r\n [ngStyle]=\"{ 'width' : col.width ? col.width : null, 'background-color': rowData[col.id].color ? rowData[col.id].color : null }\"\r\n id=\"{{ rowData[col.id] != null ? rowData[col.id].id : '' }}\"\r\n [ngClass]=\"rowData[col.id] != null ? 'paddingCell' : null\"\r\n class=\"centerText\">\r\n <span class=\"p-column-title\">{{ col.libelle }} : </span>\r\n <p-tag [value]=\"rowData[col.id].value[getOption(col, rowData, 'optionLabel')]\"\r\n [severity]=\"rowData[col.id].value.severity\"\r\n [icon]=\"rowData[col.id].value.icon\">\r\n </p-tag>\r\n </td>\r\n\r\n </ng-container>\r\n\r\n <!-- Deletion -->\r\n <td *ngIf=\"options.rowsDeletable\"\r\n class=\"cellDelete\"\r\n [ngClass]=\"rowData.deletable ? 'paddingCell' : null\">\r\n <button *ngIf=\"rowData.deletable\"\r\n pButton\r\n type=\"button\"\r\n icon=\"pi pi-times\"\r\n class=\"p-button-danger buttonDelete p-button-text\"\r\n [disabled]=\"rowData.readonly\"\r\n (click)=\"onDeleteLine(rowData)\">\r\n </button>\r\n </td>\r\n\r\n </tr>\r\n </ng-template>\r\n</p-table>\r\n",
|
|
241
|
-
styles: ["::ng-deep .p-tooltip .p-tooltip-text{overflow-wrap:break-word!important}:host ::ng-deep .p-datatable-table{width:100%!important}:host ::ng-deep .p-datatable-tbody>tr>td>span,:host ::ng-deep .p-datatable-thead>tr>th>span{overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}:host ::ng-deep .row_grouping{background:#faeada!important}:host ::ng-deep .text_bold{font-weight:700!important}:host ::ng-deep .cellDelete{flex:0 0 50px!important}:host ::ng-deep .p-datatable .p-sortable-column.p-highlight,:host ::ng-deep .p-datatable .p-sortable-column.p-highlight .p-sortable-column-icon{color:#2196f3!important}:host ::ng-deep .p-tooltip .p-tooltip-text{background-color:red!important}:host ::ng-deep .p-datatable-thead>tr>th{background:#dedddd!important;border:1px solid rgba(0,0,0,.12)!important;color:#495057!important;font-weight:600!important;overflow:hidden!important;padding-bottom:8px!important;padding-top:8px!important;text-overflow:ellipsis!important;white-space:nowrap!important}:host ::ng-deep .p-datatable-tbody>tr{height:35px!important}:host ::ng-deep .p-datatable-tbody>tr>td{border:1px solid rgba(0,0,0,.12)!important;min-width:0!important}:host ::ng-deep .centerText{justify-content:center!important}:host ::ng-deep .p-button{padding-bottom:1px;padding-top:1px}:host ::ng-deep .p-button-label{overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important;width:100%!important}:host ::ng-deep .p-calendar,:host ::ng-deep p-calendar,:host ::ng-deep p-dropdown,:host ::ng-deep p-inputNumber,:host ::ng-deep p-multiselect,:host ::ng-deep p-selectButton{width:100%!important}:host ::ng-deep .p-inputtext{height:25px!important;padding:4px 5px!important;width:100%!important}:host ::ng-deep .p-inputnumber{height:25px;padding:0!important;width:100%}:host ::ng-deep .p-inputnumber-input{padding:0 5px!important;width:100%}:host ::ng-deep .p-inputgroup .p-inputtext{height:25px;padding:4px 5px!important;width:100%}:host ::ng-deep .p-dropdown{vertical-align:middle;width:100%}:host ::ng-deep .p-dropdown-label{padding-bottom:2px;padding-top:2px}:host ::ng-deep .p-multiselect{vertical-align:middle;width:100%}:host ::ng-deep .p-multiselect-label{padding-bottom:2px;padding-top:2px}:host ::ng-deep .p-editable-column,:host ::ng-deep .paddingCell{padding:3px 10px!important}:host ::ng-deep .p-selectbutton>.p-button{height:25px;width:50%}:host ::ng-deep .p-inputgroup>.p-button{height:25px}:host ::ng-deep .buttonDelete{height:20px;width:100%}:host ::ng-deep .p-column-title{display:none}:host ::ng-deep .p-datatable-loading-icon{color:#fff}@media screen and (max-width:650px){:host ::ng-deep .p-datatable-tfoot>tr>td,:host ::ng-deep .p-datatable-thead>tr>th{display:none!important;width:inherit!important}:host ::ng-deep .p-datatable-tbody>tr{border:2px solid rgba(0,0,0,.12);flex-direction:column;height:inherit!important;padding-top:12px!important}:host ::ng-deep .p-datatable-tbody>tr>td{border:0!important;flex-basis:auto!important;width:100%!important}:host ::ng-deep td .p-column-title{display:inline-block!important;font-weight:700;margin:-.4rem 1rem -.4rem -.4rem;min-width:35%;padding:.4rem}:host ::ng-deep .centerText{justify-content:inherit!important}}"]
|
|
242
|
-
},] }
|
|
243
|
-
];
|
|
244
|
-
CilogTableComponent.ctorParameters = () => [
|
|
245
|
-
{ type: ConfirmationService },
|
|
246
|
-
{ type: FilterService },
|
|
247
|
-
{ type: ChangeDetectorRef }
|
|
248
|
-
];
|
|
249
|
-
CilogTableComponent.propDecorators = {
|
|
250
|
-
columns: [{ type: Input }],
|
|
251
|
-
values: [{ type: Input }],
|
|
252
|
-
options: [{ type: Input }],
|
|
253
|
-
loading: [{ type: Input }],
|
|
254
|
-
onEdit: [{ type: Output }],
|
|
255
|
-
onEditInit: [{ type: Output }],
|
|
256
|
-
onDelete: [{ type: Output }],
|
|
257
|
-
onSelect: [{ type: Output }],
|
|
258
|
-
onUnselect: [{ type: Output }],
|
|
259
|
-
onFilter: [{ type: Output }],
|
|
260
|
-
onSort: [{ type: Output }],
|
|
261
|
-
onPage: [{ type: Output }],
|
|
262
|
-
table: [{ type: ViewChild, args: ['table', { static: true },] }]
|
|
263
|
-
};
|
|
264
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL3RvbnlfL0Rlc2t0b3AvUHJvamV0cyBDaWxvZy9jaWxvZy1saWItYW5ndWxhci9wcm9qZWN0cy9jaWxvZy1saWIvc3JjLyIsInNvdXJjZXMiOlsibGliL3ZpZXdzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUE4QixNQUFNLGFBQWEsQ0FBQztBQUk3RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFPMUQsTUFBTSxPQUFPLG1CQUFtQjtJQXlCNUIsWUFDWSxtQkFBd0MsRUFDeEMsYUFBNEIsRUFDNUIsS0FBd0I7UUFGeEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQWxCMUIsV0FBTSxHQUEyQixJQUFJLFlBQVksRUFBWSxDQUFDO1FBQzlELGVBQVUsR0FBMkIsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUNsRSxhQUFRLEdBQStCLElBQUksWUFBWSxFQUFnQixDQUFDO1FBQ3hFLGFBQVEsR0FBK0IsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUN0RSxlQUFVLEdBQStCLElBQUksWUFBWSxFQUFjLENBQUM7UUFDeEUsYUFBUSxHQUEwQixJQUFJLFlBQVksRUFBVyxDQUFDO1FBQzlELFdBQU0sR0FBd0IsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUN4RCxXQUFNLEdBQXdCLElBQUksWUFBWSxFQUFTLENBQUM7SUFZOUQsQ0FBQztJQUVMLFFBQVE7UUFDSixPQUFPO1FBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FB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QixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQUs7UUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDckgsQ0FBQzs7O1lBN1FKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsYUFBYTtnQkFDdkIseTEwQkFBcUM7O2FBRXhDOzs7WUFWUSxtQkFBbUI7WUFBRSxhQUFhO1lBRHlCLGlCQUFpQjs7O3NCQWlCaEYsS0FBSztxQkFDTCxLQUFLO3NCQUNMLEtBQUs7c0JBQ0wsS0FBSztxQkFFTCxNQUFNO3lCQUNOLE1BQU07dUJBQ04sTUFBTTt1QkFDTixNQUFNO3lCQUNOLE1BQU07dUJBQ04sTUFBTTtxQkFDTixNQUFNO3FCQUNOLE1BQU07b0JBTU4sU0FBUyxTQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIEZpbHRlclNlcnZpY2UsIEZpbHRlck1hdGNoTW9kZSwgU29ydEV2ZW50IH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBJRWRpdGlvbiwgSVN1cHByZXNzaW9uLCBJU2VsZWN0aW9uLCBJRmlsdGVyLCBJU29ydCwgSVBhZ2UgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2ludGVyZmFjZXMvZWRpdGlvbi5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBJQ29sdW1uLCBJUm93LCBJT3B0aW9uc0dyaWxsZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvaW50ZXJmYWNlcy9ncmlsbGUuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgVGFibGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcclxuaW1wb3J0IHsgQ29sVHlwZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvZW51bXMvZ3JpbGxlLmVudW0nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NpbG9nLXRhYmxlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaWxvZ1RhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgICBmaWx0ZXJDb2w6IElDb2x1bW47XHJcbiAgICBmaWx0ZXJWYWx1ZTogYW55O1xyXG5cclxuICAgIEBJbnB1dCgpIGNvbHVtbnM6IElDb2x1bW5bXTtcclxuICAgIEBJbnB1dCgpIHZhbHVlczogSVJvd1tdO1xyXG4gICAgQElucHV0KCkgb3B0aW9uczogSU9wdGlvbnNHcmlsbGU7XHJcbiAgICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuO1xyXG5cclxuICAgIEBPdXRwdXQoKSBvbkVkaXQ6IEV2ZW50RW1pdHRlcjxJRWRpdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPElFZGl0aW9uPigpO1xyXG4gICAgQE91dHB1dCgpIG9uRWRpdEluaXQ6IEV2ZW50RW1pdHRlcjxJRWRpdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPElFZGl0aW9uPigpO1xyXG4gICAgQE91dHB1dCgpIG9uRGVsZXRlOiBFdmVudEVtaXR0ZXI8SVN1cHByZXNzaW9uPiA9IG5ldyBFdmVudEVtaXR0ZXI8SVN1cHByZXNzaW9uPigpO1xyXG4gICAgQE91dHB1dCgpIG9uU2VsZWN0OiBFdmVudEVtaXR0ZXI8SVN1cHByZXNzaW9uPiA9IG5ldyBFdmVudEVtaXR0ZXI8SVNlbGVjdGlvbj4oKTtcclxuICAgIEBPdXRwdXQoKSBvblVuc2VsZWN0OiBFdmVudEVtaXR0ZXI8SVN1cHByZXNzaW9uPiA9IG5ldyBFdmVudEVtaXR0ZXI8SVNlbGVjdGlvbj4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkZpbHRlcjogRXZlbnRFbWl0dGVyPElGaWx0ZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxJRmlsdGVyPigpO1xyXG4gICAgQE91dHB1dCgpIG9uU29ydDogRXZlbnRFbWl0dGVyPElTb3J0PiA9IG5ldyBFdmVudEVtaXR0ZXI8SVNvcnQ+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25QYWdlOiBFdmVudEVtaXR0ZXI8SVBhZ2U+ID0gbmV3IEV2ZW50RW1pdHRlcjxJUGFnZT4oKTtcclxuXHJcbiAgICBzZWxlY3RlZFJvdzogSVJvdztcclxuXHJcbiAgICBmaWx0ZXJEYXRlc1JhbmdlOiBEYXRlW107XHJcblxyXG4gICAgQFZpZXdDaGlsZCgndGFibGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0YWJsZTogVGFibGU7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZmlsdGVyU2VydmljZTogRmlsdGVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICAvLyBEYXRlXHJcbiAgICAgICAgdGhpcy5maWx0ZXJTZXJ2aWNlLnJlZ2lzdGVyKCdkYXRlUmFuZ2VGaWx0ZXInLCAoY2VsbCwgZmlsdGVyKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHN0YXJ0OiBudW1iZXIgPSBmaWx0ZXJbMF0uZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICBsZXQgZW5kOiBudW1iZXI7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXJbMV0pIHtcclxuICAgICAgICAgICAgICAgIGVuZCA9IGZpbHRlclsxXS5nZXRUaW1lKCkgKyA4NjQwMDAwMDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVuZCA9IHN0YXJ0ICsgODY0MDAwMDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNlbGwudmFsdWUgPT0gbnVsbCA/IGZhbHNlIDogY2VsbC52YWx1ZS5nZXRUaW1lKCkgPj0gc3RhcnQgJiYgY2VsbC52YWx1ZS5nZXRUaW1lKCkgPD0gZW5kO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIFRleHRcclxuICAgICAgICB0aGlzLmZpbHRlclNlcnZpY2UucmVnaXN0ZXIoJ3RleHRGaWx0ZXInLCAoY2VsbCwgZmlsdGVyKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgPT0gbnVsbCB8fCBmaWx0ZXIudHJpbSgpID09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY2VsbC52YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNlbGwudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXIudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gTnVtYmVyXHJcbiAgICAgICAgdGhpcy5maWx0ZXJTZXJ2aWNlLnJlZ2lzdGVyKCdudW1iZXJGaWx0ZXInLCAoY2VsbCwgZmlsdGVyKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNlbGwudmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjZWxsLnZhbHVlID09IGZpbHRlcjtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBPYmpldFxyXG4gICAgICAgIHRoaXMuZmlsdGVyU2VydmljZS5yZWdpc3Rlcignb2JqZXRGaWx0ZXInLCAoY2VsbCwgZmlsdGVyKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAoZmlsdGVyLmluZGV4T2YoY2VsbC52YWx1ZSkgIT0gLTEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIExpc3RlXHJcbiAgICAgICAgdGhpcy5maWx0ZXJTZXJ2aWNlLnJlZ2lzdGVyKCdsaXN0ZUZpbHRlcicsIChjZWxsLCBmaWx0ZXIpID0+IHtcclxuICAgICAgICAgICAgbGV0IG9rOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGZpbHRlci5mb3JFYWNoKHZhbCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2VsbC52YWx1ZS5pbmRleE9mKHZhbCkgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBvayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gb2s7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb2wub3B0aW9ucyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjb2wub3B0aW9ucyA9IHsgZGVmYXVsdEZpbHRlcnM6IG51bGwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY29sLm9wdGlvbnMuZGVmYXVsdEZpbHRlcnMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXIoY29sLCBjb2wub3B0aW9ucy5kZWZhdWx0RmlsdGVycywgdGhpcy5nZXRGaWx0ZXJCeUNvbChjb2wpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNvcnRcclxuICAgIGN1c3RvbVNvcnQoZXZlbnQ6IFNvcnRFdmVudCkge1xyXG4gICAgICAgIGxldCBjb2w6IElDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLmlkID09IGV2ZW50LmZpZWxkKTtcclxuICAgICAgICB0aGlzLm9uU29ydC5lbWl0KHsgY29sdW1uOiBjb2wsIG9yZGVyOiBldmVudC5vcmRlciB9KVxyXG4gICAgICAgIGxldCB0eXBlQ29sOiBDb2xUeXBlID0gY29sLnR5cGU7XHJcbiAgICAgICAgZXZlbnQuZGF0YS5zb3J0KChkYXRhMSwgZGF0YTIpID0+IHtcclxuICAgICAgICAgICAgbGV0IHZhbHVlMSA9IGRhdGExW2V2ZW50LmZpZWxkXS52YWx1ZTtcclxuICAgICAgICAgICAgbGV0IHZhbHVlMiA9IGRhdGEyW2V2ZW50LmZpZWxkXS52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUxID09IG51bGwgJiYgdmFsdWUyICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSAtMTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUxICE9IG51bGwgJiYgdmFsdWUyID09IG51bGwpXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSAxO1xyXG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZTEgPT0gbnVsbCAmJiB2YWx1ZTIgPT0gbnVsbClcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IDA7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVDb2wgPT0gQ29sVHlwZS5UZXh0IHx8IHR5cGVDb2wgPT0gQ29sVHlwZS5GaWxlKVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWUxLmxvY2FsZUNvbXBhcmUodmFsdWUyKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZUNvbCA9PSBDb2xUeXBlLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLmdldE11bHRpU2VsZWN0Q29uY2F0KHZhbHVlMSwgdGhpcy5nZXRPcHRpb24oY29sLCBkYXRhMSwgJ29wdGlvbkxhYmVsJykpLmxvY2FsZUNvbXBhcmUodGhpcy5nZXRNdWx0aVNlbGVjdENvbmNhdCh2YWx1ZTIsIHRoaXMuZ2V0T3B0aW9uKGNvbCwgZGF0YTIsICdvcHRpb25MYWJlbCcpKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZUNvbCA9PSBDb2xUeXBlLkRyb3Bkb3duIHx8IHR5cGVDb2wgPT0gQ29sVHlwZS5TZWxlY3RCdXR0b24gfHwgdHlwZUNvbCA9PSBDb2xUeXBlLlN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZTFbdGhpcy5nZXRPcHRpb24oY29sLCBkYXRhMSwgJ29wdGlvbkxhYmVsJyldLmxvY2FsZUNvbXBhcmUodmFsdWUyW3RoaXMuZ2V0T3B0aW9uKGNvbCwgZGF0YTIsICdvcHRpb25MYWJlbCcpXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZUNvbCA9PSBDb2xUeXBlLk51bWJlciB8fCB0eXBlQ29sID09IENvbFR5cGUuRGF0ZSlcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9ICh2YWx1ZTEgPCB2YWx1ZTIpID8gLTEgOiAodmFsdWUxID4gdmFsdWUyKSA/IDEgOiAwO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPT0gMDtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiAoZXZlbnQub3JkZXIgKiByZXN1bHQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrVHlwZSh0eXBlQ29sOiBzdHJpbmcsIGNvbDogSUNvbHVtbikge1xyXG4gICAgICAgIHJldHVybiBjb2xbJ3R5cGUnXSA9PSB0eXBlQ29sO1xyXG4gICAgfVxyXG5cclxuICAgIGNsaWNrQnlJZChpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNsaWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25FZGl0Q2VsbChyb3c6IElSb3csIGNvbHVtbjogSUNvbHVtbiwgdmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMub25FZGl0LmVtaXQoeyByb3c6IHJvdywgY29sdW1uOiBjb2x1bW4sIHZhbHVlOiB2YWx1ZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblNlbGVjdFJvdyhyb3c6IElSb3cpIHtcclxuICAgICAgICB0aGlzLm9uU2VsZWN0LmVtaXQoeyByb3c6IHJvdyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblBhZ2VUYWJsZShldmVudDogSVBhZ2UpIHtcclxuICAgICAgICB0aGlzLm9uUGFnZS5lbWl0KGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBvblVuc2VsZWN0Um93KHJvdzogSVJvdykge1xyXG4gICAgICAgIHRoaXMub25VbnNlbGVjdC5lbWl0KHsgcm93OiByb3cgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25EZWxldGVMaW5lKHJvdzogSVJvdykge1xyXG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcclxuICAgICAgICAgICAga2V5OiAnY29uZmlybScsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6ICfDinRlcy12b3VzIHPDu3IgZGUgdm91bG9pciBzdXBwcmltZXIgY2V0dGUgbGlnbmUgPycsXHJcbiAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMuc3BsaWNlKHRoaXMudmFsdWVzLmluZGV4T2Yocm93KSwgMSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IFsuLi50aGlzLnZhbHVlc107XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uRGVsZXRlLmVtaXQoeyByb3c6IHJvdyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRWRpdEluaXRDZWxsKHJvdzogSVJvdywgY29sdW1uOiBJQ29sdW1uLCB2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5vbkVkaXRJbml0LmVtaXQoeyByb3c6IHJvdywgY29sdW1uOiBjb2x1bW4sIHZhbHVlOiB2YWx1ZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpc01vZGVFZGl0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZWRpdGFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T3B0aW9uKGNvbCwgcm93LCBvcHRpb246IHN0cmluZykge1xyXG4gICAgICAgIGlmIChyb3dbY29sLmlkXS5vcHRpb25zICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKHJvd1tjb2wuaWRdLm9wdGlvbnNbb3B0aW9uXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcm93W2NvbC5pZF0ub3B0aW9uc1tvcHRpb25dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb2wub3B0aW9ucyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChjb2wub3B0aW9uc1tvcHRpb25dICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb2wub3B0aW9uc1tvcHRpb25dXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TXVsdGlTZWxlY3RDb25jYXQodmFsdWUsIGxhYmVsOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKHZhbCA9PiB7IHJldHVybiB2YWxbbGFiZWxdOyB9KS5qb2luKCcsICcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2VsZWN0TGliZWxsZUJ5VmFsdWUocm93LCBjb2wpIHtcclxuICAgICAgICBsZXQgbGFiZWw6IHN0cmluZyA9ICcnO1xyXG4gICAgICAgIGlmIChyb3dbY29sLmlkXS52YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsYWJlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJvd1tjb2wuaWRdLm9wdGlvbnMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBsYWJlbCA9IHJvd1tjb2wuaWRdLm9wdGlvbnNbJ29wdGlvbnMnXS5maW5kKG9wdCA9PiBvcHQudmFsdWUgPT0gcm93W2NvbC5pZF0udmFsdWUpW3Jvd1tjb2wuaWRdLm9wdGlvbnMub3B0aW9uTGFiZWxdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChjb2wub3B0aW9ucyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBsYWJlbCA9IGNvbC5vcHRpb25zWydvcHRpb25zJ10uZmluZChvcHQgPT4gb3B0LnZhbHVlID09IHJvd1tjb2wuaWRdLnZhbHVlKVtjb2wub3B0aW9ucy5vcHRpb25MYWJlbF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxhYmVsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZpbHRlckJ5Q29sKGNvbDogSUNvbHVtbikge1xyXG4gICAgICAgIC8vIERhdGVzIChyYW5nZSlcclxuICAgICAgICBpZiAoY29sLnR5cGUgPT0gQ29sVHlwZS5EYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnZGF0ZVJhbmdlRmlsdGVyJztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gTnVtYmVyXHJcbiAgICAgICAgaWYgKGNvbC50eXBlID09IENvbFR5cGUuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnbnVtYmVyRmlsdGVyJztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gT2JqZXRcclxuICAgICAgICBpZiAoY29sLnR5cGUgPT0gQ29sVHlwZS5Ecm9wZG93biB8fCBjb2wudHlwZSA9PSBDb2xUeXBlLlN0YXRlIHx8IGNvbC50eXBlID09IENvbFR5cGUuU2VsZWN0QnV0dG9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2JqZXRGaWx0ZXInO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBMaXN0ZVxyXG4gICAgICAgIGlmIChjb2wudHlwZSA9PSBDb2xUeXBlLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnbGlzdGVGaWx0ZXInO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUZXh0ZVxyXG4gICAgICAgIGlmIChjb2wudHlwZSA9PSBDb2xUeXBlLkZpbGUgfHwgY29sLnR5cGUgPT0gQ29sVHlwZS5UZXh0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAndGV4dEZpbHRlcic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRmlsdGVyQ29sKGV2ZW50LCBjb2w6IElDb2x1bW4pIHtcclxuICAgICAgICAvLyBEYXRlcyAocmFuZ2UpXHJcbiAgICAgICAgaWYgKGNvbC50eXBlID09IENvbFR5cGUuRGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcihjb2wsIGNvbC5vcHRpb25zLmRlZmF1bHRGaWx0ZXJzLCAnZGF0ZVJhbmdlRmlsdGVyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE51bWJlclxyXG4gICAgICAgIGlmIChjb2wudHlwZSA9PSBDb2xUeXBlLk51bWJlcikge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcihjb2wsIGV2ZW50LnZhbHVlLCAnbnVtYmVyRmlsdGVyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE9iamV0XHJcbiAgICAgICAgaWYgKGNvbC50eXBlID09IENvbFR5cGUuRHJvcGRvd24gfHwgY29sLnR5cGUgPT0gQ29sVHlwZS5TdGF0ZSB8fCBjb2wudHlwZSA9PSBDb2xUeXBlLlNlbGVjdEJ1dHRvbikge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcihjb2wsIGV2ZW50LnZhbHVlLCAnb2JqZXRGaWx0ZXInKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gTGlzdGVcclxuICAgICAgICBpZiAoY29sLnR5cGUgPT0gQ29sVHlwZS5NdWx0aVNlbGVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcihjb2wsIGV2ZW50LnZhbHVlLCAnbGlzdGVGaWx0ZXInKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVGV4dGVcclxuICAgICAgICBpZiAoY29sLnR5cGUgPT0gQ29sVHlwZS5GaWxlIHx8IGNvbC50eXBlID09IENvbFR5cGUuVGV4dCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcihjb2wsIGV2ZW50LnRhcmdldC52YWx1ZSwgJ3RleHRGaWx0ZXInKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyKGNvbDogSUNvbHVtbiwgdmFsOiBhbnksIGZpbHRlcjogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJDb2wgPSBjb2w7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZSA9IHZhbDtcclxuICAgICAgICB0aGlzLnRhYmxlLmZpbHRlcih2YWwsIGNvbC5pZCwgZmlsdGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkZpbHRlclRhYmxlKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5vbkZpbHRlci5lbWl0KHsgY29sdW1uOiB0aGlzLmZpbHRlckNvbCwgdmFsdWU6IHRoaXMuZmlsdGVyVmFsdWUsIGZpbHRlcmVkVmFsdWU6IHRoaXMudGFibGUuZmlsdGVyZWRWYWx1ZSB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
package/esm2015/public-api.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Public API Surface of cilog-lib
|
|
3
|
-
*/
|
|
4
|
-
// Modules
|
|
5
|
-
export * from './lib/cilog-lib.module';
|
|
6
|
-
// Components
|
|
7
|
-
export * from './lib/cilog-lib.component';
|
|
8
|
-
// Services
|
|
9
|
-
export * from './lib/cilog-lib.service';
|
|
10
|
-
export * from './lib/services/message.service';
|
|
11
|
-
export * from './lib/services/table.service';
|
|
12
|
-
// Interfaces
|
|
13
|
-
export * from './lib/helpers/interfaces/grille.interface';
|
|
14
|
-
export * from './lib/helpers/interfaces/message.interface';
|
|
15
|
-
export * from './lib/helpers/interfaces/edition.interface';
|
|
16
|
-
// Enums
|
|
17
|
-
export * from './lib/helpers/enums/grille.enum';
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy90b255Xy9EZXNrdG9wL1Byb2pldHMgQ2lsb2cvY2lsb2ctbGliLWFuZ3VsYXIvcHJvamVjdHMvY2lsb2ctbGliL3NyYy8iLCJzb3VyY2VzIjpbInB1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxVQUFVO0FBQ1YsY0FBYyx3QkFBd0IsQ0FBQztBQUV2QyxhQUFhO0FBQ2IsY0FBYywyQkFBMkIsQ0FBQztBQUUxQyxXQUFXO0FBQ1gsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsOEJBQThCLENBQUM7QUFFN0MsYUFBYTtBQUNiLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDRDQUE0QyxDQUFDO0FBRTNELFFBQVE7QUFDUixjQUFjLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGNpbG9nLWxpYlxyXG4gKi9cclxuXHJcbi8vIE1vZHVsZXNcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY2lsb2ctbGliLm1vZHVsZSc7XHJcblxyXG4vLyBDb21wb25lbnRzXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NpbG9nLWxpYi5jb21wb25lbnQnO1xyXG5cclxuLy8gU2VydmljZXNcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY2lsb2ctbGliLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy90YWJsZS5zZXJ2aWNlJztcclxuXHJcbi8vIEludGVyZmFjZXNcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvaGVscGVycy9pbnRlcmZhY2VzL2dyaWxsZS5pbnRlcmZhY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9oZWxwZXJzL2ludGVyZmFjZXMvbWVzc2FnZS5pbnRlcmZhY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9oZWxwZXJzL2ludGVyZmFjZXMvZWRpdGlvbi5pbnRlcmZhY2UnO1xyXG5cclxuLy8gRW51bXNcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvaGVscGVycy9lbnVtcy9ncmlsbGUuZW51bSc7XHJcbiJdfQ==
|