ng-prime-tools 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -0
- package/esm2022/lib/advanced-table/advanced-table.component.mjs +288 -0
- package/esm2022/lib/enums/table-type-enum.mjs +12 -0
- package/esm2022/lib/models/index.mjs +2 -0
- package/esm2022/lib/models/table-column.model.mjs +2 -0
- package/esm2022/lib/ng-prime-tools.component.mjs +11 -0
- package/esm2022/lib/ng-prime-tools.service.mjs +14 -0
- package/esm2022/lib/pipes/custom-currency.mjs +38 -0
- package/esm2022/ng-prime-tools.mjs +5 -0
- package/esm2022/public-api.mjs +9 -0
- package/fesm2022/ng-prime-tools.mjs +365 -0
- package/fesm2022/ng-prime-tools.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/advanced-table/advanced-table.component.d.ts +54 -0
- package/lib/enums/table-type-enum.d.ts +10 -0
- package/lib/models/index.d.ts +1 -0
- package/lib/models/table-column.model.d.ts +14 -0
- package/lib/ng-prime-tools.component.d.ts +5 -0
- package/lib/ng-prime-tools.service.d.ts +6 -0
- package/lib/pipes/custom-currency.d.ts +7 -0
- package/package.json +31 -0
- package/public-api.d.ts +5 -0
@@ -0,0 +1,365 @@
|
|
1
|
+
import * as i0 from '@angular/core';
|
2
|
+
import { Injectable, Component, Pipe, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
3
|
+
import * as i2 from 'primeng/table';
|
4
|
+
import { TableModule } from 'primeng/table';
|
5
|
+
import * as i1 from '@angular/common';
|
6
|
+
import { CommonModule } from '@angular/common';
|
7
|
+
import * as i7 from '@angular/forms';
|
8
|
+
import { FormsModule } from '@angular/forms';
|
9
|
+
import * as i5 from 'primeng/button';
|
10
|
+
import { ButtonModule } from 'primeng/button';
|
11
|
+
import * as i6 from 'primeng/calendar';
|
12
|
+
import { CalendarModule } from 'primeng/calendar';
|
13
|
+
import * as i4 from 'primeng/inputtext';
|
14
|
+
import { InputTextModule } from 'primeng/inputtext';
|
15
|
+
import * as i8 from 'primeng/multiselect';
|
16
|
+
import { MultiSelectModule } from 'primeng/multiselect';
|
17
|
+
import * as i9 from 'primeng/iconfield';
|
18
|
+
import { IconFieldModule } from 'primeng/iconfield';
|
19
|
+
import * as i10 from 'primeng/inputicon';
|
20
|
+
import { InputIconModule } from 'primeng/inputicon';
|
21
|
+
import * as i11 from 'primeng/tag';
|
22
|
+
import { TagModule } from 'primeng/tag';
|
23
|
+
import * as i3 from 'primeng/api';
|
24
|
+
|
25
|
+
class AdvancedPrimeToolsService {
|
26
|
+
constructor() { }
|
27
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AdvancedPrimeToolsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
28
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AdvancedPrimeToolsService, providedIn: 'root' }); }
|
29
|
+
}
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AdvancedPrimeToolsService, decorators: [{
|
31
|
+
type: Injectable,
|
32
|
+
args: [{
|
33
|
+
providedIn: 'root'
|
34
|
+
}]
|
35
|
+
}], ctorParameters: () => [] });
|
36
|
+
|
37
|
+
class AdvancedPrimeToolsComponent {
|
38
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AdvancedPrimeToolsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
39
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.3", type: AdvancedPrimeToolsComponent, isStandalone: true, selector: "lib-ng-prime-tools", ngImport: i0, template: ` <p>ng-prime-tools works!</p> `, isInline: true, styles: [""] }); }
|
40
|
+
}
|
41
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AdvancedPrimeToolsComponent, decorators: [{
|
42
|
+
type: Component,
|
43
|
+
args: [{ selector: 'lib-ng-prime-tools', standalone: true, imports: [], template: ` <p>ng-prime-tools works!</p> ` }]
|
44
|
+
}] });
|
45
|
+
|
46
|
+
var TableTypeEnum;
|
47
|
+
(function (TableTypeEnum) {
|
48
|
+
TableTypeEnum["DATE"] = "DATE";
|
49
|
+
TableTypeEnum["STRING"] = "STRING";
|
50
|
+
TableTypeEnum["AMOUNT"] = "AMOUNT";
|
51
|
+
TableTypeEnum["NUMBER"] = "NUMBER";
|
52
|
+
TableTypeEnum["MULTISELECT"] = "MULTISELECT";
|
53
|
+
TableTypeEnum["CURRENCY"] = "CURRENCY";
|
54
|
+
TableTypeEnum["BOOLEAN"] = "BOOLEAN";
|
55
|
+
TableTypeEnum["ACTION"] = "ACTION";
|
56
|
+
})(TableTypeEnum || (TableTypeEnum = {}));
|
57
|
+
|
58
|
+
class CustomCurrencyPipe {
|
59
|
+
transform(value, currency = 'MAD', decimalPlaces) {
|
60
|
+
let formattedValue;
|
61
|
+
if (decimalPlaces !== undefined) {
|
62
|
+
formattedValue = new Intl.NumberFormat('en-US', {
|
63
|
+
minimumFractionDigits: decimalPlaces,
|
64
|
+
maximumFractionDigits: decimalPlaces,
|
65
|
+
}).format(value);
|
66
|
+
}
|
67
|
+
else {
|
68
|
+
formattedValue = new Intl.NumberFormat('en-US').format(value);
|
69
|
+
}
|
70
|
+
let formattedCurrency;
|
71
|
+
switch (currency) {
|
72
|
+
case 'MAD':
|
73
|
+
formattedCurrency = `${formattedValue} DH`;
|
74
|
+
break;
|
75
|
+
case 'USD':
|
76
|
+
formattedCurrency = `$${formattedValue}`;
|
77
|
+
break;
|
78
|
+
default:
|
79
|
+
formattedCurrency = `${formattedValue} ${currency}`;
|
80
|
+
}
|
81
|
+
return formattedCurrency;
|
82
|
+
}
|
83
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: CustomCurrencyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
84
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.3", ngImport: i0, type: CustomCurrencyPipe, isStandalone: true, name: "customCurrency" }); }
|
85
|
+
}
|
86
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: CustomCurrencyPipe, decorators: [{
|
87
|
+
type: Pipe,
|
88
|
+
args: [{
|
89
|
+
name: 'customCurrency',
|
90
|
+
standalone: true,
|
91
|
+
}]
|
92
|
+
}] });
|
93
|
+
|
94
|
+
class AdvancedTableComponent {
|
95
|
+
constructor() {
|
96
|
+
// Inputs
|
97
|
+
this.data = [];
|
98
|
+
this.columns = [];
|
99
|
+
this.totalRecords = 0;
|
100
|
+
this.rowsPerPage = [];
|
101
|
+
this.hasSearchFilter = false;
|
102
|
+
this.hasColumnFilter = false;
|
103
|
+
this.isPaginated = false;
|
104
|
+
this.actions = [];
|
105
|
+
this.isSortable = false;
|
106
|
+
// Outputs: Events emitted to the parent component
|
107
|
+
this.filter = new EventEmitter();
|
108
|
+
this.search = new EventEmitter();
|
109
|
+
this.searchValue = '';
|
110
|
+
this.validCurrencyCodes = ['USD', 'EUR', 'MAD'];
|
111
|
+
// Component state properties
|
112
|
+
this.isDelete = false;
|
113
|
+
this.isEdit = false;
|
114
|
+
this.rows = 0;
|
115
|
+
// Data management properties
|
116
|
+
this.dataMap = new Map();
|
117
|
+
this.map = new Map();
|
118
|
+
this.optionEntries = new Map();
|
119
|
+
this.optionValues = [];
|
120
|
+
this.globalFilterFields = [];
|
121
|
+
// CRUD operation handlers
|
122
|
+
this.Delete = () => { };
|
123
|
+
this.initEditableRow = () => { };
|
124
|
+
this.saveEditableRow = () => { };
|
125
|
+
this.cancelEditableRow = () => { };
|
126
|
+
}
|
127
|
+
ngOnInit() {
|
128
|
+
// Transform the date fields based on column metadata
|
129
|
+
this.data = this.formatingDateFields();
|
130
|
+
this.globalFilterFields = this.columns
|
131
|
+
.map((col) => col.code)
|
132
|
+
.filter((code) => code !== undefined);
|
133
|
+
this.initializePagination();
|
134
|
+
this.initializeActions();
|
135
|
+
// Set default value for isSortable
|
136
|
+
this.columns.forEach((col) => {
|
137
|
+
if (col.type === TableTypeEnum.ACTION) {
|
138
|
+
col.isEditable = false;
|
139
|
+
col.isFilter = false;
|
140
|
+
col.isSortable = false;
|
141
|
+
}
|
142
|
+
if (col.isSortable === undefined) {
|
143
|
+
col.isSortable = true;
|
144
|
+
}
|
145
|
+
if (col.isEditable === undefined) {
|
146
|
+
col.isEditable = true;
|
147
|
+
}
|
148
|
+
if (col.isFilter !== false && col.code !== undefined) {
|
149
|
+
this.globalFilterFields.push(col.code);
|
150
|
+
}
|
151
|
+
});
|
152
|
+
}
|
153
|
+
// Initialization Methods
|
154
|
+
formatingDateFields() {
|
155
|
+
return this.data.map((item) => {
|
156
|
+
const transformedItem = { ...item };
|
157
|
+
this.columns.forEach((column) => {
|
158
|
+
if (column.type === TableTypeEnum.DATE &&
|
159
|
+
column.code !== undefined &&
|
160
|
+
transformedItem[column.code] !== undefined) {
|
161
|
+
const dateValue = this.parseDate(transformedItem[column.code]);
|
162
|
+
transformedItem[column.code] = dateValue ? dateValue : null;
|
163
|
+
}
|
164
|
+
});
|
165
|
+
return transformedItem;
|
166
|
+
});
|
167
|
+
}
|
168
|
+
clear(table) {
|
169
|
+
table.clear();
|
170
|
+
this.searchValue = '';
|
171
|
+
}
|
172
|
+
parseDate(dateString) {
|
173
|
+
const parts = dateString.split('/');
|
174
|
+
if (parts.length === 3) {
|
175
|
+
// Assuming date format is DD/MM/YYYY
|
176
|
+
const day = parseInt(parts[0], 10);
|
177
|
+
const month = parseInt(parts[1], 10) - 1;
|
178
|
+
const year = parseInt(parts[2], 10);
|
179
|
+
const date = new Date(year, month, day);
|
180
|
+
return isNaN(date.getTime()) ? null : date;
|
181
|
+
}
|
182
|
+
return null;
|
183
|
+
}
|
184
|
+
initializePagination() {
|
185
|
+
if (this.isPaginated) {
|
186
|
+
this.rowsPerPage = this.rowsPerPage || [20, 30, 40];
|
187
|
+
this.rows = this.rowsPerPage[0];
|
188
|
+
}
|
189
|
+
}
|
190
|
+
initializeActions() {
|
191
|
+
if (this.actions) {
|
192
|
+
this.actions.forEach((action) => {
|
193
|
+
switch (action.code) {
|
194
|
+
case 'delete':
|
195
|
+
this.isDelete = true;
|
196
|
+
this.Delete = (value) => action.action(value);
|
197
|
+
break;
|
198
|
+
case 'edit':
|
199
|
+
this.initializeEditActions(action);
|
200
|
+
break;
|
201
|
+
default:
|
202
|
+
this.isDelete = false;
|
203
|
+
this.isEdit = false;
|
204
|
+
}
|
205
|
+
});
|
206
|
+
}
|
207
|
+
}
|
208
|
+
initializeEditActions(action) {
|
209
|
+
this.isEdit = true;
|
210
|
+
this.initEditableRow = (data) => action.action.init(data);
|
211
|
+
this.saveEditableRow = (data) => {
|
212
|
+
const record = this.map.get(data.id);
|
213
|
+
action.action.save(data, record);
|
214
|
+
this.dataMap.clear();
|
215
|
+
};
|
216
|
+
this.cancelEditableRow = (item) => console.log(item);
|
217
|
+
}
|
218
|
+
onChange(event, id, key) {
|
219
|
+
const target = event.target;
|
220
|
+
this.changeHandler(id, key, target.value);
|
221
|
+
}
|
222
|
+
changeHandler(id, key, value) {
|
223
|
+
let column = this.columns.find((item) => item.code === key);
|
224
|
+
if (!this.map.get(id)) {
|
225
|
+
if (column?.type === TableTypeEnum.DATE) {
|
226
|
+
let date = this.parseDate(value);
|
227
|
+
this.dataMap.set(key, date);
|
228
|
+
}
|
229
|
+
else {
|
230
|
+
this.dataMap.set(key, value);
|
231
|
+
}
|
232
|
+
this.map.set(id, new Map(this.dataMap));
|
233
|
+
}
|
234
|
+
else {
|
235
|
+
let mapItem = this.map.get(id);
|
236
|
+
if (column?.type === TableTypeEnum.DATE) {
|
237
|
+
let date = this.parseDate(value);
|
238
|
+
mapItem.set(key, date);
|
239
|
+
}
|
240
|
+
else {
|
241
|
+
mapItem.set(key, value);
|
242
|
+
}
|
243
|
+
}
|
244
|
+
}
|
245
|
+
getColumnFilterType(column) {
|
246
|
+
switch (column.type) {
|
247
|
+
case TableTypeEnum.STRING:
|
248
|
+
return 'text';
|
249
|
+
case TableTypeEnum.AMOUNT:
|
250
|
+
return 'numeric';
|
251
|
+
case TableTypeEnum.NUMBER:
|
252
|
+
return 'numeric';
|
253
|
+
case TableTypeEnum.DATE:
|
254
|
+
return 'date';
|
255
|
+
case TableTypeEnum.MULTISELECT:
|
256
|
+
return 'multiSelect';
|
257
|
+
case TableTypeEnum.BOOLEAN:
|
258
|
+
return 'boolean';
|
259
|
+
default:
|
260
|
+
return 'text';
|
261
|
+
}
|
262
|
+
}
|
263
|
+
// State Check Methods
|
264
|
+
isEditable(key) {
|
265
|
+
let column = this.columns.find((item) => item.code === key);
|
266
|
+
return column?.isEditable !== false;
|
267
|
+
}
|
268
|
+
isMultiSelect(key) {
|
269
|
+
let column = this.columns.find((item) => item.code === key);
|
270
|
+
if (column?.type === TableTypeEnum.MULTISELECT &&
|
271
|
+
column.options &&
|
272
|
+
column.code !== undefined) {
|
273
|
+
this.optionEntries = new Map([
|
274
|
+
[column.code, Object.values(column.options)],
|
275
|
+
]);
|
276
|
+
this.optionValues = this.optionEntries.get(key) || [];
|
277
|
+
return true;
|
278
|
+
}
|
279
|
+
return false;
|
280
|
+
}
|
281
|
+
isDatePicker(key) {
|
282
|
+
return (this.columns.find((item) => item.code === key)?.type ===
|
283
|
+
TableTypeEnum.DATE);
|
284
|
+
}
|
285
|
+
// Utility Methods
|
286
|
+
dateConverter(value) {
|
287
|
+
return new Date(value).toLocaleDateString('en-US');
|
288
|
+
}
|
289
|
+
getCurrencySymbol(column) {
|
290
|
+
return column.type === TableTypeEnum.AMOUNT &&
|
291
|
+
column.currency &&
|
292
|
+
this.isValidCurrencyCode(column.currency)
|
293
|
+
? column.currency
|
294
|
+
: undefined;
|
295
|
+
}
|
296
|
+
isValidCurrencyCode(currencyCode) {
|
297
|
+
return this.validCurrencyCodes.includes(currencyCode);
|
298
|
+
}
|
299
|
+
customDateFilter(value, filter) {
|
300
|
+
if (!filter || !value) {
|
301
|
+
return true;
|
302
|
+
}
|
303
|
+
const filterDate = new Date(filter);
|
304
|
+
const valueDate = new Date(value);
|
305
|
+
return valueDate.toDateString() === filterDate.toDateString();
|
306
|
+
}
|
307
|
+
filterGlobal(event) {
|
308
|
+
const target = event.target;
|
309
|
+
this.dt.filterGlobal(target.value, 'contains');
|
310
|
+
}
|
311
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AdvancedTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
312
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.3", type: AdvancedTableComponent, isStandalone: true, selector: "advanced-table", inputs: { data: "data", columns: "columns", totalRecords: "totalRecords", rowsPerPage: "rowsPerPage", hasSearchFilter: "hasSearchFilter", hasColumnFilter: "hasColumnFilter", isPaginated: "isPaginated", actions: "actions", isSortable: "isSortable" }, outputs: { filter: "filter", search: "search" }, viewQueries: [{ propertyName: "dt", first: true, predicate: ["dt"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"table-container\">\n <div>\n <p-table\n #dt\n [value]=\"data\"\n dataKey=\"id\"\n [rows]=\"rows\"\n [paginator]=\"isPaginated\"\n [globalFilterFields]=\"globalFilterFields\"\n styleClass=\"p-datatable-gridlines\"\n [rowsPerPageOptions]=\"rowsPerPage\"\n styleClass=\"p-datatable-striped\"\n editMode=\"row\"\n [globalFilterFields]=\"globalFilterFields\"\n >\n <ng-template pTemplate=\"caption\">\n <div class=\"flex\">\n <div>\n <h3>Total: {{ totalRecords }}</h3>\n </div>\n\n <div>\n <p-button\n label=\"Clear\"\n [outlined]=\"true\"\n icon=\"pi pi-filter-slash\"\n (click)=\"clear(dt)\"\n class=\"bt-filter-btn\"\n />\n </div>\n <div class=\"ml-auto\" *ngIf=\"hasSearchFilter\">\n <!-- Add this wrapper div with ml-auto class -->\n <p-iconField iconPosition=\"left\" class=\"ml-auto\">\n <p-inputIcon>\n <i class=\"pi pi-search\"></i>\n </p-inputIcon>\n <input\n pInputText\n type=\"text\"\n [(ngModel)]=\"searchValue\"\n (input)=\"filterGlobal($event)\"\n placeholder=\"Search keyword\"\n />\n </p-iconField>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"header\">\n <tr>\n <th *ngFor=\"let col of columns\">\n <ng-container\n *ngIf=\"isSortable && col.isSortable !== false; else noSortHeader\"\n >\n <th pSortableColumn=\"{{ col.code }}\" style=\"width: 20%\">\n <div class=\"header-container\">\n <span>{{ col.title }}</span>\n <p-sortIcon field=\"{{ col.code }}\" />\n <ng-container *ngIf=\"col.isFilter !== false\">\n <p-columnFilter\n *ngIf=\"col.type === 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n [currency]=\"getCurrencySymbol(col)\"\n ></p-columnFilter>\n\n <p-columnFilter\n *ngIf=\"col.type !== 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n display=\"menu\"\n [type]=\"getColumnFilterType(col)\"\n [type]=\"getColumnFilterType(col)\"\n >\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'date'\"\n >\n <p-calendar\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n >\n <p-multiSelect\n [options]=\"col.filterOptions\"\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n class=\"custom-multiselect\"\n ></p-multiSelect>\n </ng-template>\n </p-columnFilter>\n </ng-container>\n </div>\n </th>\n </ng-container>\n <ng-template #noSortHeader>\n <th>\n <div class=\"header-container\">\n <span>{{ col.title }}</span>\n <ng-container *ngIf=\"col.isFilter !== false\">\n <p-columnFilter\n *ngIf=\"col.type === 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n [currency]=\"getCurrencySymbol(col)\"\n ></p-columnFilter>\n\n <p-columnFilter\n *ngIf=\"col.type !== 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n >\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'date'\"\n >\n <p-calendar\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n >\n <p-multiSelect\n [options]=\"col.filterOptions\"\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n class=\"custom-multiselect\"\n ></p-multiSelect>\n </ng-template>\n </p-columnFilter>\n </ng-container>\n </div>\n </th>\n </ng-template>\n </th>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-data\n let-editing=\"editing\"\n let-ri=\"rowIndex\"\n >\n <!-- Render a table row and make it editable if `isEdit` is true -->\n <tr [pEditableRow]=\"isEdit ? data : null\">\n <!-- Loop through each column and render corresponding table cells -->\n <ng-container *ngFor=\"let col of columns\">\n <ng-container *ngIf=\"col.code !== undefined\">\n <!-- Check if the data for the column exists -->\n <ng-container *ngIf=\"data[col.code] !== undefined\">\n <!-- Render an editable cell if the column is editable -->\n <td *ngIf=\"isEditable(col.code); else normalTD\">\n <!-- Multi-select input for columns that are multi-selectable -->\n <ng-container\n *ngIf=\"isMultiSelect(col.code); else datePicker\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-multiSelect\n appendTo=\"body\"\n [ngModel]=\"data[col.code]\"\n [style]=\"{ width: '100%' }\"\n (ngModelChange)=\"\n changeHandler(data.id, col.code, $event)\n \"\n [options]=\"optionValues\"\n ></p-multiSelect>\n </ng-template>\n <ng-template pTemplate=\"output\">\n <div class=\"multi-select-container\">\n <ng-container *ngFor=\"let rec of data[col.code]\">\n <p-tag [value]=\"rec\"></p-tag>\n </ng-container>\n </div>\n </ng-template>\n </p-cellEditor>\n </ng-container>\n\n <!-- Date picker input for columns that require date selection -->\n <ng-template #datePicker>\n <ng-container\n *ngIf=\"isDatePicker(col.code); else normalInput\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-calendar\n [inputId]=\"data[col.code]\"\n [ngModel]=\"data[col.code]\"\n (ngModelChange)=\"\n changeHandler(data.id, col.code, $event)\n \"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n <ng-template pTemplate=\"output\">\n {{ data[col.code] | date : \"dd/MM/yyyy\" }}\n </ng-template>\n </p-cellEditor>\n </ng-container>\n </ng-template>\n\n <!-- Normal text input for other columns -->\n <ng-template #normalInput>\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <input\n pInputText\n type=\"text\"\n [ngModel]=\"data[col.code]\"\n (change)=\"onChange($event, data.id, col.code)\"\n />\n </ng-template>\n <ng-template pTemplate=\"output\">\n <!-- Use currency pipe to format the output for AMOUNT type -->\n <ng-container\n *ngIf=\"col.type === 'AMOUNT'; else normalOutput\"\n >\n {{\n data[col.code]\n | customCurrency\n : getCurrencySymbol(col)\n : col.decimalPlaces\n }}\n </ng-container>\n <ng-template #normalOutput>\n {{ data[col.code] }}\n </ng-template>\n </ng-template>\n </p-cellEditor>\n </ng-template>\n </td>\n\n <!-- Render a normal table cell if the column is not editable -->\n <ng-template #normalTD>\n <td>\n <!-- Use customCurrency pipe to format the output for AMOUNT type with optional decimal places -->\n <ng-container\n *ngIf=\"col.type === 'AMOUNT'; else normalText\"\n >\n >\n {{\n data[col.code]\n | customCurrency\n : getCurrencySymbol(col)\n : col.decimalPlaces\n }}\n </ng-container>\n <ng-template #normalText>\n {{ data[col.code] }}\n </ng-template>\n </td>\n </ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <!-- Render action buttons if there are any actions defined -->\n <td *ngIf=\"actions?.length\">\n <div class=\"action-buttons-container\">\n <!-- Delete button if deletion is allowed -->\n <div *ngIf=\"isDelete\">\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-trash\"\n (click)=\"Delete(data.id)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n </div>\n <!-- Edit, save, and cancel buttons for row editing -->\n <div>\n <button\n pInitEditableRow\n *ngIf=\"!editing\"\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-pencil\"\n (click)=\"initEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <button\n *ngIf=\"editing\"\n pSaveEditableRow\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-check\"\n (click)=\"saveEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <button\n *ngIf=\"editing\"\n pCancelEditableRow\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-times\"\n (click)=\"cancelEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n </div>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n</div>\n", styles: [".date{width:100%;height:5rem;display:grid;justify-items:start;align-items:center}.filter-container{width:100%;display:flex;justify-content:space-between;align-items:center}.settings{display:flex;gap:1rem}.multi-select-container{display:flex;justify-content:center;align-items:center;gap:.3rem}::ng-deep p-table{min-width:50rem}.table-container{display:flex;flex-direction:column;gap:.5rem}::ng-deep .custom-multiselect .p-hidden-accessible input{display:none}::ng-deep .p-datatable .p-sortable-column.p-highlight:hover{background:none}::ng-deep .p-datatable .p-sortable-column:focus{box-shadow:none;outline:0 none}::ng-deep .header-container{display:flex;align-items:center}::ng-deep .header-container span{margin-right:.5em}::ng-deep p-columnfilter.p-element.ng-star-inserted{margin-top:4px}.flex{display:flex;justify-content:space-between;align-items:center}.ml-auto{margin-left:auto}::ng-deep p-inputicon{margin-right:-1.5rem;z-index:2;position:relative}::ng-deep .p-inputtext{padding-left:1.7rem}::ng-deep .bt-filter-btn button{cursor:pointer;margin-left:1rem}::ng-deep .p-icon-field-left .p-input-icon:first-of-type{left:-1rem}.table-row{text-align:center;display:flex;gap:1rem;justify-content:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i2.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i2.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i2.CellEditor, selector: "p-cellEditor" }, { kind: "component", type: i2.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "directive", type: i2.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "directive", type: i2.InitEditableRow, selector: "[pInitEditableRow]" }, { kind: "directive", type: i2.SaveEditableRow, selector: "[pSaveEditableRow]" }, { kind: "directive", type: i2.CancelEditableRow, selector: "[pCancelEditableRow]" }, { kind: "component", type: i2.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons", "ariaLabel"], outputs: ["onShow", "onHide"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i4.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i5.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: CalendarModule }, { kind: "component", type: i6.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MultiSelectModule }, { kind: "component", type: i8.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "pipe", type: CustomCurrencyPipe, name: "customCurrency" }, { kind: "ngmodule", type: IconFieldModule }, { kind: "component", type: i9.IconField, selector: "p-iconField", inputs: ["iconPosition"] }, { kind: "ngmodule", type: InputIconModule }, { kind: "component", type: i10.InputIcon, selector: "p-inputIcon", inputs: ["styleClass"] }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i11.Tag, selector: "p-tag", inputs: ["style", "styleClass", "severity", "value", "icon", "rounded"] }] }); }
|
313
|
+
}
|
314
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AdvancedTableComponent, decorators: [{
|
315
|
+
type: Component,
|
316
|
+
args: [{ selector: 'advanced-table', standalone: true, imports: [
|
317
|
+
CommonModule,
|
318
|
+
TableModule,
|
319
|
+
InputTextModule,
|
320
|
+
ButtonModule,
|
321
|
+
CalendarModule,
|
322
|
+
FormsModule,
|
323
|
+
MultiSelectModule,
|
324
|
+
CustomCurrencyPipe,
|
325
|
+
IconFieldModule,
|
326
|
+
InputIconModule,
|
327
|
+
TagModule,
|
328
|
+
], template: "<div class=\"table-container\">\n <div>\n <p-table\n #dt\n [value]=\"data\"\n dataKey=\"id\"\n [rows]=\"rows\"\n [paginator]=\"isPaginated\"\n [globalFilterFields]=\"globalFilterFields\"\n styleClass=\"p-datatable-gridlines\"\n [rowsPerPageOptions]=\"rowsPerPage\"\n styleClass=\"p-datatable-striped\"\n editMode=\"row\"\n [globalFilterFields]=\"globalFilterFields\"\n >\n <ng-template pTemplate=\"caption\">\n <div class=\"flex\">\n <div>\n <h3>Total: {{ totalRecords }}</h3>\n </div>\n\n <div>\n <p-button\n label=\"Clear\"\n [outlined]=\"true\"\n icon=\"pi pi-filter-slash\"\n (click)=\"clear(dt)\"\n class=\"bt-filter-btn\"\n />\n </div>\n <div class=\"ml-auto\" *ngIf=\"hasSearchFilter\">\n <!-- Add this wrapper div with ml-auto class -->\n <p-iconField iconPosition=\"left\" class=\"ml-auto\">\n <p-inputIcon>\n <i class=\"pi pi-search\"></i>\n </p-inputIcon>\n <input\n pInputText\n type=\"text\"\n [(ngModel)]=\"searchValue\"\n (input)=\"filterGlobal($event)\"\n placeholder=\"Search keyword\"\n />\n </p-iconField>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"header\">\n <tr>\n <th *ngFor=\"let col of columns\">\n <ng-container\n *ngIf=\"isSortable && col.isSortable !== false; else noSortHeader\"\n >\n <th pSortableColumn=\"{{ col.code }}\" style=\"width: 20%\">\n <div class=\"header-container\">\n <span>{{ col.title }}</span>\n <p-sortIcon field=\"{{ col.code }}\" />\n <ng-container *ngIf=\"col.isFilter !== false\">\n <p-columnFilter\n *ngIf=\"col.type === 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n [currency]=\"getCurrencySymbol(col)\"\n ></p-columnFilter>\n\n <p-columnFilter\n *ngIf=\"col.type !== 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n display=\"menu\"\n [type]=\"getColumnFilterType(col)\"\n [type]=\"getColumnFilterType(col)\"\n >\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'date'\"\n >\n <p-calendar\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n >\n <p-multiSelect\n [options]=\"col.filterOptions\"\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n class=\"custom-multiselect\"\n ></p-multiSelect>\n </ng-template>\n </p-columnFilter>\n </ng-container>\n </div>\n </th>\n </ng-container>\n <ng-template #noSortHeader>\n <th>\n <div class=\"header-container\">\n <span>{{ col.title }}</span>\n <ng-container *ngIf=\"col.isFilter !== false\">\n <p-columnFilter\n *ngIf=\"col.type === 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n [currency]=\"getCurrencySymbol(col)\"\n ></p-columnFilter>\n\n <p-columnFilter\n *ngIf=\"col.type !== 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n >\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'date'\"\n >\n <p-calendar\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n >\n <p-multiSelect\n [options]=\"col.filterOptions\"\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n class=\"custom-multiselect\"\n ></p-multiSelect>\n </ng-template>\n </p-columnFilter>\n </ng-container>\n </div>\n </th>\n </ng-template>\n </th>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-data\n let-editing=\"editing\"\n let-ri=\"rowIndex\"\n >\n <!-- Render a table row and make it editable if `isEdit` is true -->\n <tr [pEditableRow]=\"isEdit ? data : null\">\n <!-- Loop through each column and render corresponding table cells -->\n <ng-container *ngFor=\"let col of columns\">\n <ng-container *ngIf=\"col.code !== undefined\">\n <!-- Check if the data for the column exists -->\n <ng-container *ngIf=\"data[col.code] !== undefined\">\n <!-- Render an editable cell if the column is editable -->\n <td *ngIf=\"isEditable(col.code); else normalTD\">\n <!-- Multi-select input for columns that are multi-selectable -->\n <ng-container\n *ngIf=\"isMultiSelect(col.code); else datePicker\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-multiSelect\n appendTo=\"body\"\n [ngModel]=\"data[col.code]\"\n [style]=\"{ width: '100%' }\"\n (ngModelChange)=\"\n changeHandler(data.id, col.code, $event)\n \"\n [options]=\"optionValues\"\n ></p-multiSelect>\n </ng-template>\n <ng-template pTemplate=\"output\">\n <div class=\"multi-select-container\">\n <ng-container *ngFor=\"let rec of data[col.code]\">\n <p-tag [value]=\"rec\"></p-tag>\n </ng-container>\n </div>\n </ng-template>\n </p-cellEditor>\n </ng-container>\n\n <!-- Date picker input for columns that require date selection -->\n <ng-template #datePicker>\n <ng-container\n *ngIf=\"isDatePicker(col.code); else normalInput\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-calendar\n [inputId]=\"data[col.code]\"\n [ngModel]=\"data[col.code]\"\n (ngModelChange)=\"\n changeHandler(data.id, col.code, $event)\n \"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n <ng-template pTemplate=\"output\">\n {{ data[col.code] | date : \"dd/MM/yyyy\" }}\n </ng-template>\n </p-cellEditor>\n </ng-container>\n </ng-template>\n\n <!-- Normal text input for other columns -->\n <ng-template #normalInput>\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <input\n pInputText\n type=\"text\"\n [ngModel]=\"data[col.code]\"\n (change)=\"onChange($event, data.id, col.code)\"\n />\n </ng-template>\n <ng-template pTemplate=\"output\">\n <!-- Use currency pipe to format the output for AMOUNT type -->\n <ng-container\n *ngIf=\"col.type === 'AMOUNT'; else normalOutput\"\n >\n {{\n data[col.code]\n | customCurrency\n : getCurrencySymbol(col)\n : col.decimalPlaces\n }}\n </ng-container>\n <ng-template #normalOutput>\n {{ data[col.code] }}\n </ng-template>\n </ng-template>\n </p-cellEditor>\n </ng-template>\n </td>\n\n <!-- Render a normal table cell if the column is not editable -->\n <ng-template #normalTD>\n <td>\n <!-- Use customCurrency pipe to format the output for AMOUNT type with optional decimal places -->\n <ng-container\n *ngIf=\"col.type === 'AMOUNT'; else normalText\"\n >\n >\n {{\n data[col.code]\n | customCurrency\n : getCurrencySymbol(col)\n : col.decimalPlaces\n }}\n </ng-container>\n <ng-template #normalText>\n {{ data[col.code] }}\n </ng-template>\n </td>\n </ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <!-- Render action buttons if there are any actions defined -->\n <td *ngIf=\"actions?.length\">\n <div class=\"action-buttons-container\">\n <!-- Delete button if deletion is allowed -->\n <div *ngIf=\"isDelete\">\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-trash\"\n (click)=\"Delete(data.id)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n </div>\n <!-- Edit, save, and cancel buttons for row editing -->\n <div>\n <button\n pInitEditableRow\n *ngIf=\"!editing\"\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-pencil\"\n (click)=\"initEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <button\n *ngIf=\"editing\"\n pSaveEditableRow\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-check\"\n (click)=\"saveEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <button\n *ngIf=\"editing\"\n pCancelEditableRow\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-times\"\n (click)=\"cancelEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n </div>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n</div>\n", styles: [".date{width:100%;height:5rem;display:grid;justify-items:start;align-items:center}.filter-container{width:100%;display:flex;justify-content:space-between;align-items:center}.settings{display:flex;gap:1rem}.multi-select-container{display:flex;justify-content:center;align-items:center;gap:.3rem}::ng-deep p-table{min-width:50rem}.table-container{display:flex;flex-direction:column;gap:.5rem}::ng-deep .custom-multiselect .p-hidden-accessible input{display:none}::ng-deep .p-datatable .p-sortable-column.p-highlight:hover{background:none}::ng-deep .p-datatable .p-sortable-column:focus{box-shadow:none;outline:0 none}::ng-deep .header-container{display:flex;align-items:center}::ng-deep .header-container span{margin-right:.5em}::ng-deep p-columnfilter.p-element.ng-star-inserted{margin-top:4px}.flex{display:flex;justify-content:space-between;align-items:center}.ml-auto{margin-left:auto}::ng-deep p-inputicon{margin-right:-1.5rem;z-index:2;position:relative}::ng-deep .p-inputtext{padding-left:1.7rem}::ng-deep .bt-filter-btn button{cursor:pointer;margin-left:1rem}::ng-deep .p-icon-field-left .p-input-icon:first-of-type{left:-1rem}.table-row{text-align:center;display:flex;gap:1rem;justify-content:center}\n"] }]
|
329
|
+
}], ctorParameters: () => [], propDecorators: { data: [{
|
330
|
+
type: Input
|
331
|
+
}], columns: [{
|
332
|
+
type: Input
|
333
|
+
}], totalRecords: [{
|
334
|
+
type: Input
|
335
|
+
}], rowsPerPage: [{
|
336
|
+
type: Input
|
337
|
+
}], hasSearchFilter: [{
|
338
|
+
type: Input
|
339
|
+
}], hasColumnFilter: [{
|
340
|
+
type: Input
|
341
|
+
}], isPaginated: [{
|
342
|
+
type: Input
|
343
|
+
}], actions: [{
|
344
|
+
type: Input
|
345
|
+
}], isSortable: [{
|
346
|
+
type: Input
|
347
|
+
}], filter: [{
|
348
|
+
type: Output
|
349
|
+
}], search: [{
|
350
|
+
type: Output
|
351
|
+
}], dt: [{
|
352
|
+
type: ViewChild,
|
353
|
+
args: ['dt', { static: true }]
|
354
|
+
}] } });
|
355
|
+
|
356
|
+
/*
|
357
|
+
* Public API Surface of ng-prime-tools
|
358
|
+
*/
|
359
|
+
|
360
|
+
/**
|
361
|
+
* Generated bundle index. Do not edit.
|
362
|
+
*/
|
363
|
+
|
364
|
+
export { AdvancedPrimeToolsComponent, AdvancedPrimeToolsService, AdvancedTableComponent, TableTypeEnum };
|
365
|
+
//# sourceMappingURL=ng-prime-tools.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ng-prime-tools.mjs","sources":["../../../projects/ng-prime-tools/src/lib/ng-prime-tools.service.ts","../../../projects/ng-prime-tools/src/lib/ng-prime-tools.component.ts","../../../projects/ng-prime-tools/src/lib/enums/table-type-enum.ts","../../../projects/ng-prime-tools/src/lib/pipes/custom-currency.ts","../../../projects/ng-prime-tools/src/lib/advanced-table/advanced-table.component.ts","../../../projects/ng-prime-tools/src/lib/advanced-table/advanced-table.component.html","../../../projects/ng-prime-tools/src/public-api.ts","../../../projects/ng-prime-tools/src/ng-prime-tools.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AdvancedPrimeToolsService {\n\n constructor() { }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-ng-prime-tools',\n standalone: true,\n imports: [],\n template: ` <p>ng-prime-tools works!</p> `,\n styles: ``,\n})\nexport class AdvancedPrimeToolsComponent {}\n","export enum TableTypeEnum {\n DATE = 'DATE',\n STRING = 'STRING',\n AMOUNT = 'AMOUNT',\n NUMBER = 'NUMBER',\n MULTISELECT = 'MULTISELECT',\n CURRENCY = 'CURRENCY',\n BOOLEAN = 'BOOLEAN',\n ACTION = 'ACTION',\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'customCurrency',\n standalone: true,\n})\nexport class CustomCurrencyPipe implements PipeTransform {\n transform(\n value: number,\n currency: string = 'MAD',\n decimalPlaces?: number\n ): string {\n let formattedValue: string;\n\n if (decimalPlaces !== undefined) {\n formattedValue = new Intl.NumberFormat('en-US', {\n minimumFractionDigits: decimalPlaces,\n maximumFractionDigits: decimalPlaces,\n }).format(value);\n } else {\n formattedValue = new Intl.NumberFormat('en-US').format(value);\n }\n\n let formattedCurrency: string;\n\n switch (currency) {\n case 'MAD':\n formattedCurrency = `${formattedValue} DH`;\n break;\n case 'USD':\n formattedCurrency = `$${formattedValue}`;\n break;\n default:\n formattedCurrency = `${formattedValue} ${currency}`;\n }\n\n return formattedCurrency;\n }\n}\n","import { Component, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { EventEmitter } from '@angular/core';\nimport { Table, TableModule } from 'primeng/table';\nimport { TableColumn } from '../models/table-column.model';\nimport { TableTypeEnum } from '../enums/table-type-enum';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { CalendarModule } from 'primeng/calendar';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { CustomCurrencyPipe } from '../pipes/custom-currency';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { TagModule } from 'primeng/tag';\n\n@Component({\n selector: 'advanced-table',\n standalone: true,\n imports: [\n CommonModule,\n TableModule,\n InputTextModule,\n ButtonModule,\n CalendarModule,\n FormsModule,\n MultiSelectModule,\n CustomCurrencyPipe,\n IconFieldModule,\n InputIconModule,\n TagModule,\n ],\n templateUrl: './advanced-table.component.html',\n styleUrl: './advanced-table.component.css',\n})\nexport class AdvancedTableComponent implements OnInit {\n // Inputs\n @Input() data: any[] = [];\n @Input() columns: TableColumn[] = [];\n @Input() totalRecords: number = 0;\n @Input() rowsPerPage: number[] = [];\n @Input() hasSearchFilter: boolean = false;\n @Input() hasColumnFilter: boolean = false;\n @Input() isPaginated: boolean = false;\n @Input() actions: any[] = [];\n @Input() isSortable: boolean = false;\n\n // Outputs: Events emitted to the parent component\n @Output() filter = new EventEmitter();\n @Output() search = new EventEmitter<any>();\n\n @ViewChild('dt', { static: true }) dt!: Table;\n\n searchValue: string = '';\n\n private validCurrencyCodes = ['USD', 'EUR', 'MAD'];\n\n // Component state properties\n isDelete: boolean = false;\n isEdit: boolean = false;\n rows: number = 0;\n\n // Data management properties\n dataMap = new Map();\n map = new Map();\n optionEntries = new Map<string, any[]>();\n optionValues: any[] = [];\n globalFilterFields: string[] = [];\n\n // CRUD operation handlers\n Delete: (value: any) => void = () => {};\n initEditableRow: (data: any) => void = () => {};\n saveEditableRow: (data: any) => void = () => {};\n cancelEditableRow: (item: any) => void = () => {};\n\n constructor() {}\n\n ngOnInit(): void {\n // Transform the date fields based on column metadata\n this.data = this.formatingDateFields();\n this.globalFilterFields = this.columns\n .map((col) => col.code)\n .filter((code): code is string => code !== undefined);\n this.initializePagination();\n this.initializeActions();\n\n // Set default value for isSortable\n this.columns.forEach((col) => {\n if (col.type === TableTypeEnum.ACTION) {\n col.isEditable = false;\n col.isFilter = false;\n col.isSortable = false;\n }\n\n if (col.isSortable === undefined) {\n col.isSortable = true;\n }\n\n if (col.isEditable === undefined) {\n col.isEditable = true;\n }\n\n if (col.isFilter !== false && col.code !== undefined) {\n this.globalFilterFields.push(col.code);\n }\n });\n }\n\n // Initialization Methods\n private formatingDateFields(): any {\n return this.data.map((item) => {\n const transformedItem = { ...item };\n this.columns.forEach((column) => {\n if (\n column.type === TableTypeEnum.DATE &&\n column.code !== undefined &&\n transformedItem[column.code] !== undefined\n ) {\n const dateValue = this.parseDate(transformedItem[column.code]);\n transformedItem[column.code] = dateValue ? dateValue : null;\n }\n });\n return transformedItem;\n });\n }\n\n clear(table: Table) {\n table.clear();\n this.searchValue = '';\n }\n\n private parseDate(dateString: string): Date | null {\n const parts = dateString.split('/');\n if (parts.length === 3) {\n // Assuming date format is DD/MM/YYYY\n const day = parseInt(parts[0], 10);\n const month = parseInt(parts[1], 10) - 1;\n const year = parseInt(parts[2], 10);\n const date = new Date(year, month, day);\n return isNaN(date.getTime()) ? null : date;\n }\n return null;\n }\n\n private initializePagination(): void {\n if (this.isPaginated) {\n this.rowsPerPage = this.rowsPerPage || [20, 30, 40];\n this.rows = this.rowsPerPage[0];\n }\n }\n\n private initializeActions(): void {\n if (this.actions) {\n this.actions.forEach((action) => {\n switch (action.code) {\n case 'delete':\n this.isDelete = true;\n this.Delete = (value: any) => action.action(value);\n break;\n case 'edit':\n this.initializeEditActions(action);\n break;\n default:\n this.isDelete = false;\n this.isEdit = false;\n }\n });\n }\n }\n\n private initializeEditActions(action: any): void {\n this.isEdit = true;\n this.initEditableRow = (data: any) => action.action.init(data);\n this.saveEditableRow = (data: any) => {\n const record = this.map.get(data.id);\n action.action.save(data, record);\n this.dataMap.clear();\n };\n this.cancelEditableRow = (item: any) => console.log(item);\n }\n\n onChange(event: Event, id: number, key: any) {\n const target = event.target as HTMLInputElement;\n this.changeHandler(id, key, target.value);\n }\n\n changeHandler(id: number, key: any, value: any) {\n let column = this.columns.find((item) => item.code === key);\n if (!this.map.get(id)) {\n if (column?.type === TableTypeEnum.DATE) {\n let date = this.parseDate(value);\n this.dataMap.set(key, date);\n } else {\n this.dataMap.set(key, value);\n }\n this.map.set(id, new Map(this.dataMap));\n } else {\n let mapItem = this.map.get(id);\n if (column?.type === TableTypeEnum.DATE) {\n let date = this.parseDate(value);\n mapItem.set(key, date);\n } else {\n mapItem.set(key, value);\n }\n }\n }\n\n getColumnFilterType(column: TableColumn): string {\n switch (column.type) {\n case TableTypeEnum.STRING:\n return 'text';\n case TableTypeEnum.AMOUNT:\n return 'numeric';\n case TableTypeEnum.NUMBER:\n return 'numeric';\n case TableTypeEnum.DATE:\n return 'date';\n case TableTypeEnum.MULTISELECT:\n return 'multiSelect';\n case TableTypeEnum.BOOLEAN:\n return 'boolean';\n default:\n return 'text';\n }\n }\n\n // State Check Methods\n isEditable(key: string): boolean {\n let column = this.columns.find((item) => item.code === key);\n return column?.isEditable !== false;\n }\n\n isMultiSelect(key: any): boolean {\n let column = this.columns.find((item) => item.code === key);\n if (\n column?.type === TableTypeEnum.MULTISELECT &&\n column.options &&\n column.code !== undefined\n ) {\n this.optionEntries = new Map([\n [column.code, Object.values(column.options)],\n ]);\n this.optionValues = this.optionEntries.get(key) || [];\n return true;\n }\n return false;\n }\n\n isDatePicker(key: any): boolean {\n return (\n this.columns.find((item) => item.code === key)?.type ===\n TableTypeEnum.DATE\n );\n }\n\n // Utility Methods\n dateConverter(value: any): string {\n return new Date(value).toLocaleDateString('en-US');\n }\n\n getCurrencySymbol(column: TableColumn): string | undefined {\n return column.type === TableTypeEnum.AMOUNT &&\n column.currency &&\n this.isValidCurrencyCode(column.currency)\n ? column.currency\n : undefined;\n }\n\n private isValidCurrencyCode(currencyCode: string): boolean {\n return this.validCurrencyCodes.includes(currencyCode);\n }\n\n customDateFilter(value: any, filter: any): boolean {\n if (!filter || !value) {\n return true;\n }\n\n const filterDate = new Date(filter);\n const valueDate = new Date(value);\n\n return valueDate.toDateString() === filterDate.toDateString();\n }\n\n filterGlobal(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.dt.filterGlobal(target.value, 'contains');\n }\n}\n","<div class=\"table-container\">\n <div>\n <p-table\n #dt\n [value]=\"data\"\n dataKey=\"id\"\n [rows]=\"rows\"\n [paginator]=\"isPaginated\"\n [globalFilterFields]=\"globalFilterFields\"\n styleClass=\"p-datatable-gridlines\"\n [rowsPerPageOptions]=\"rowsPerPage\"\n styleClass=\"p-datatable-striped\"\n editMode=\"row\"\n [globalFilterFields]=\"globalFilterFields\"\n >\n <ng-template pTemplate=\"caption\">\n <div class=\"flex\">\n <div>\n <h3>Total: {{ totalRecords }}</h3>\n </div>\n\n <div>\n <p-button\n label=\"Clear\"\n [outlined]=\"true\"\n icon=\"pi pi-filter-slash\"\n (click)=\"clear(dt)\"\n class=\"bt-filter-btn\"\n />\n </div>\n <div class=\"ml-auto\" *ngIf=\"hasSearchFilter\">\n <!-- Add this wrapper div with ml-auto class -->\n <p-iconField iconPosition=\"left\" class=\"ml-auto\">\n <p-inputIcon>\n <i class=\"pi pi-search\"></i>\n </p-inputIcon>\n <input\n pInputText\n type=\"text\"\n [(ngModel)]=\"searchValue\"\n (input)=\"filterGlobal($event)\"\n placeholder=\"Search keyword\"\n />\n </p-iconField>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"header\">\n <tr>\n <th *ngFor=\"let col of columns\">\n <ng-container\n *ngIf=\"isSortable && col.isSortable !== false; else noSortHeader\"\n >\n <th pSortableColumn=\"{{ col.code }}\" style=\"width: 20%\">\n <div class=\"header-container\">\n <span>{{ col.title }}</span>\n <p-sortIcon field=\"{{ col.code }}\" />\n <ng-container *ngIf=\"col.isFilter !== false\">\n <p-columnFilter\n *ngIf=\"col.type === 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n [currency]=\"getCurrencySymbol(col)\"\n ></p-columnFilter>\n\n <p-columnFilter\n *ngIf=\"col.type !== 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n display=\"menu\"\n [type]=\"getColumnFilterType(col)\"\n [type]=\"getColumnFilterType(col)\"\n >\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'date'\"\n >\n <p-calendar\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n >\n <p-multiSelect\n [options]=\"col.filterOptions\"\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n class=\"custom-multiselect\"\n ></p-multiSelect>\n </ng-template>\n </p-columnFilter>\n </ng-container>\n </div>\n </th>\n </ng-container>\n <ng-template #noSortHeader>\n <th>\n <div class=\"header-container\">\n <span>{{ col.title }}</span>\n <ng-container *ngIf=\"col.isFilter !== false\">\n <p-columnFilter\n *ngIf=\"col.type === 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n [currency]=\"getCurrencySymbol(col)\"\n ></p-columnFilter>\n\n <p-columnFilter\n *ngIf=\"col.type !== 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n >\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'date'\"\n >\n <p-calendar\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n >\n <p-multiSelect\n [options]=\"col.filterOptions\"\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n class=\"custom-multiselect\"\n ></p-multiSelect>\n </ng-template>\n </p-columnFilter>\n </ng-container>\n </div>\n </th>\n </ng-template>\n </th>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-data\n let-editing=\"editing\"\n let-ri=\"rowIndex\"\n >\n <!-- Render a table row and make it editable if `isEdit` is true -->\n <tr [pEditableRow]=\"isEdit ? data : null\">\n <!-- Loop through each column and render corresponding table cells -->\n <ng-container *ngFor=\"let col of columns\">\n <ng-container *ngIf=\"col.code !== undefined\">\n <!-- Check if the data for the column exists -->\n <ng-container *ngIf=\"data[col.code] !== undefined\">\n <!-- Render an editable cell if the column is editable -->\n <td *ngIf=\"isEditable(col.code); else normalTD\">\n <!-- Multi-select input for columns that are multi-selectable -->\n <ng-container\n *ngIf=\"isMultiSelect(col.code); else datePicker\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-multiSelect\n appendTo=\"body\"\n [ngModel]=\"data[col.code]\"\n [style]=\"{ width: '100%' }\"\n (ngModelChange)=\"\n changeHandler(data.id, col.code, $event)\n \"\n [options]=\"optionValues\"\n ></p-multiSelect>\n </ng-template>\n <ng-template pTemplate=\"output\">\n <div class=\"multi-select-container\">\n <ng-container *ngFor=\"let rec of data[col.code]\">\n <p-tag [value]=\"rec\"></p-tag>\n </ng-container>\n </div>\n </ng-template>\n </p-cellEditor>\n </ng-container>\n\n <!-- Date picker input for columns that require date selection -->\n <ng-template #datePicker>\n <ng-container\n *ngIf=\"isDatePicker(col.code); else normalInput\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-calendar\n [inputId]=\"data[col.code]\"\n [ngModel]=\"data[col.code]\"\n (ngModelChange)=\"\n changeHandler(data.id, col.code, $event)\n \"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n <ng-template pTemplate=\"output\">\n {{ data[col.code] | date : \"dd/MM/yyyy\" }}\n </ng-template>\n </p-cellEditor>\n </ng-container>\n </ng-template>\n\n <!-- Normal text input for other columns -->\n <ng-template #normalInput>\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <input\n pInputText\n type=\"text\"\n [ngModel]=\"data[col.code]\"\n (change)=\"onChange($event, data.id, col.code)\"\n />\n </ng-template>\n <ng-template pTemplate=\"output\">\n <!-- Use currency pipe to format the output for AMOUNT type -->\n <ng-container\n *ngIf=\"col.type === 'AMOUNT'; else normalOutput\"\n >\n {{\n data[col.code]\n | customCurrency\n : getCurrencySymbol(col)\n : col.decimalPlaces\n }}\n </ng-container>\n <ng-template #normalOutput>\n {{ data[col.code] }}\n </ng-template>\n </ng-template>\n </p-cellEditor>\n </ng-template>\n </td>\n\n <!-- Render a normal table cell if the column is not editable -->\n <ng-template #normalTD>\n <td>\n <!-- Use customCurrency pipe to format the output for AMOUNT type with optional decimal places -->\n <ng-container\n *ngIf=\"col.type === 'AMOUNT'; else normalText\"\n >\n >\n {{\n data[col.code]\n | customCurrency\n : getCurrencySymbol(col)\n : col.decimalPlaces\n }}\n </ng-container>\n <ng-template #normalText>\n {{ data[col.code] }}\n </ng-template>\n </td>\n </ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <!-- Render action buttons if there are any actions defined -->\n <td *ngIf=\"actions?.length\">\n <div class=\"action-buttons-container\">\n <!-- Delete button if deletion is allowed -->\n <div *ngIf=\"isDelete\">\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-trash\"\n (click)=\"Delete(data.id)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n </div>\n <!-- Edit, save, and cancel buttons for row editing -->\n <div>\n <button\n pInitEditableRow\n *ngIf=\"!editing\"\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-pencil\"\n (click)=\"initEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <button\n *ngIf=\"editing\"\n pSaveEditableRow\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-check\"\n (click)=\"saveEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <button\n *ngIf=\"editing\"\n pCancelEditableRow\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-times\"\n (click)=\"cancelEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n </div>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n</div>\n","/*\n * Public API Surface of ng-prime-tools\n */\n\nexport * from './lib/ng-prime-tools.service';\nexport * from './lib/ng-prime-tools.component';\nexport * from './lib/advanced-table/advanced-table.component';\nexport * from './lib/enums/table-type-enum';\nexport * from './lib/models/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
import { OnInit } from '@angular/core';
|
2
|
+
import { EventEmitter } from '@angular/core';
|
3
|
+
import { Table } from 'primeng/table';
|
4
|
+
import { TableColumn } from '../models/table-column.model';
|
5
|
+
import * as i0 from "@angular/core";
|
6
|
+
export declare class AdvancedTableComponent implements OnInit {
|
7
|
+
data: any[];
|
8
|
+
columns: TableColumn[];
|
9
|
+
totalRecords: number;
|
10
|
+
rowsPerPage: number[];
|
11
|
+
hasSearchFilter: boolean;
|
12
|
+
hasColumnFilter: boolean;
|
13
|
+
isPaginated: boolean;
|
14
|
+
actions: any[];
|
15
|
+
isSortable: boolean;
|
16
|
+
filter: EventEmitter<any>;
|
17
|
+
search: EventEmitter<any>;
|
18
|
+
dt: Table;
|
19
|
+
searchValue: string;
|
20
|
+
private validCurrencyCodes;
|
21
|
+
isDelete: boolean;
|
22
|
+
isEdit: boolean;
|
23
|
+
rows: number;
|
24
|
+
dataMap: Map<any, any>;
|
25
|
+
map: Map<any, any>;
|
26
|
+
optionEntries: Map<string, any[]>;
|
27
|
+
optionValues: any[];
|
28
|
+
globalFilterFields: string[];
|
29
|
+
Delete: (value: any) => void;
|
30
|
+
initEditableRow: (data: any) => void;
|
31
|
+
saveEditableRow: (data: any) => void;
|
32
|
+
cancelEditableRow: (item: any) => void;
|
33
|
+
constructor();
|
34
|
+
ngOnInit(): void;
|
35
|
+
private formatingDateFields;
|
36
|
+
clear(table: Table): void;
|
37
|
+
private parseDate;
|
38
|
+
private initializePagination;
|
39
|
+
private initializeActions;
|
40
|
+
private initializeEditActions;
|
41
|
+
onChange(event: Event, id: number, key: any): void;
|
42
|
+
changeHandler(id: number, key: any, value: any): void;
|
43
|
+
getColumnFilterType(column: TableColumn): string;
|
44
|
+
isEditable(key: string): boolean;
|
45
|
+
isMultiSelect(key: any): boolean;
|
46
|
+
isDatePicker(key: any): boolean;
|
47
|
+
dateConverter(value: any): string;
|
48
|
+
getCurrencySymbol(column: TableColumn): string | undefined;
|
49
|
+
private isValidCurrencyCode;
|
50
|
+
customDateFilter(value: any, filter: any): boolean;
|
51
|
+
filterGlobal(event: Event): void;
|
52
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AdvancedTableComponent, never>;
|
53
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AdvancedTableComponent, "advanced-table", never, { "data": { "alias": "data"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "totalRecords": { "alias": "totalRecords"; "required": false; }; "rowsPerPage": { "alias": "rowsPerPage"; "required": false; }; "hasSearchFilter": { "alias": "hasSearchFilter"; "required": false; }; "hasColumnFilter": { "alias": "hasColumnFilter"; "required": false; }; "isPaginated": { "alias": "isPaginated"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; "isSortable": { "alias": "isSortable"; "required": false; }; }, { "filter": "filter"; "search": "search"; }, never, never, true, never>;
|
54
|
+
}
|