@rosoftlab/ionic 1.0.0-alpha-4 → 1.0.0-alpha-6
Sign up to get free protection for your applications and to get access to all the features.
- package/esm2022/lib/components/rsl-ionic-crud.component/rsl-ionic-crud.component.mjs +4 -4
- package/esm2022/lib/components/rsl-ionic-data-table/rsl-ionic-data-table.component.mjs +4 -4
- package/esm2022/lib/components/rsl-ionic-grid/rsl-ionic-grid.component.mjs +4 -4
- package/esm2022/lib/components/rsl-ionic-sm-buttons/ionic-sm-buttons.component.mjs +4 -4
- package/esm2022/lib/ionic-dialog.service.mjs +4 -4
- package/esm2022/lib/rsl-ionic-module.module.mjs +8 -5
- package/esm2022/lib/types/repeat/repeat-section.type.mjs +4 -4
- package/esm2022/lib/types/repeat-datatable/repeat-datatable.component.mjs +190 -0
- package/esm2022/lib/wrappers/accordion-wrapper.component.mjs +4 -4
- package/esm2022/lib/wrappers/panel-wrapper.component.mjs +4 -4
- package/esm2022/lib/wrappers/wrappers.module.mjs +5 -5
- package/fesm2022/rosoftlab-ionic.mjs +212 -36
- package/fesm2022/rosoftlab-ionic.mjs.map +1 -1
- package/lib/types/repeat-datatable/repeat-datatable.component.d.ts +60 -0
- package/package.json +7 -7
@@ -13,16 +13,16 @@ import * as _ from 'lodash';
|
|
13
13
|
import { Observable, from } from 'rxjs';
|
14
14
|
import * as i4 from '@ionic/angular';
|
15
15
|
import { IonicModule } from '@ionic/angular';
|
16
|
-
import * as
|
16
|
+
import * as i7 from '@ngx-formly/core';
|
17
17
|
import { FormlyModule, FORMLY_CONFIG, FieldType, FieldArrayType, FieldWrapper } from '@ngx-formly/core';
|
18
18
|
import { FormlyIonicModule } from '@ngx-formly/ionic';
|
19
|
-
import * as i6
|
19
|
+
import * as i6 from '@swimlane/ngx-datatable';
|
20
20
|
import { NgxDatatableModule, ColumnMode, SelectionType } from '@swimlane/ngx-datatable';
|
21
21
|
import * as i1 from '@rosoftlab/statemachine';
|
22
22
|
import { SmActionService } from '@rosoftlab/statemachine';
|
23
|
-
import { readFileAsync, getValueFromJsonData, GridLayoutFormat } from '@rosoftlab/core';
|
24
23
|
import * as i3$1 from 'ngx-filesaver';
|
25
24
|
import * as XLSX from 'xlsx';
|
25
|
+
import { readFileAsync, getValueFromJsonData, GridLayoutFormat } from '@rosoftlab/core';
|
26
26
|
import * as jsonLogic from 'json-logic-js/logic.js';
|
27
27
|
|
28
28
|
class IonicDialogService {
|
@@ -62,10 +62,10 @@ class IonicDialogService {
|
|
62
62
|
});
|
63
63
|
await alert.present();
|
64
64
|
}
|
65
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
66
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.
|
65
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: IonicDialogService, deps: [{ token: i4.AlertController }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
66
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: IonicDialogService, providedIn: 'root' }); }
|
67
67
|
}
|
68
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
68
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: IonicDialogService, decorators: [{
|
69
69
|
type: Injectable,
|
70
70
|
args: [{
|
71
71
|
providedIn: 'root'
|
@@ -128,8 +128,8 @@ const COMMON_MODULES$1 = [
|
|
128
128
|
NgxDatatableModule
|
129
129
|
];
|
130
130
|
class WrappersModule {
|
131
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
132
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.
|
131
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: WrappersModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
132
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.10", ngImport: i0, type: WrappersModule, imports: [CommonModule,
|
133
133
|
IonicModule,
|
134
134
|
ReactiveFormsModule,
|
135
135
|
FormlyIonicModule,
|
@@ -139,7 +139,7 @@ class WrappersModule {
|
|
139
139
|
FormlyIonicModule,
|
140
140
|
NgxDatatableModule, FormlyModule,
|
141
141
|
TranslateModule] }); }
|
142
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.
|
142
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: WrappersModule, providers: [
|
143
143
|
{ provide: FORMLY_CONFIG, multi: true, useFactory: registerTranslateExtension, deps: [TranslateService] },
|
144
144
|
SmActionService
|
145
145
|
], imports: [COMMON_MODULES$1, TranslateModule, CommonModule,
|
@@ -149,7 +149,7 @@ class WrappersModule {
|
|
149
149
|
NgxDatatableModule, FormlyModule,
|
150
150
|
TranslateModule] }); }
|
151
151
|
}
|
152
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
152
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: WrappersModule, decorators: [{
|
153
153
|
type: NgModule,
|
154
154
|
args: [{
|
155
155
|
imports: [
|
@@ -213,16 +213,190 @@ class RslIonicSmButtonsComponent extends FieldType {
|
|
213
213
|
getCurrentState() {
|
214
214
|
return this.translate.instant('General.State.CurrentState', { field: this.currentState.name });
|
215
215
|
}
|
216
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
217
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.
|
216
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: RslIonicSmButtonsComponent, deps: [{ token: i1.SmActionService }, { token: i1.StateService }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
217
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.10", type: RslIonicSmButtonsComponent, isStandalone: true, selector: "app-ionic-sm-buttons", usesInheritance: true, ngImport: i0, template: "<!-- <ion-input [type]=\"props.type || 'text'\" [formControl]=\"formControl\" [ionFormlyAttributes]=\"field\"></ion-input> -->\n\n<!-- <p>Sync</p>\n<ion-list>\n <ion-button *ngFor=\"let action of smActions\" color=\"{{getColor(action)}}\" (click)=\"executeAction(action)\">\n {{action.buttonTranslationKey |translate}}\n </ion-button>\n</ion-list> -->\n<ion-label *ngIf=\"currentState\">{{ getCurrentState() }}</ion-label>\n<ion-list>\n <ion-button *ngFor=\"let action of smActions$ | async \" color=\"{{getColor(action)}}\" (click)=\"executeAction(action)\">\n {{action.buttonTranslationKey |translate}}\n <!-- - {{action.actionID}} -->\n </ion-button>\n</ion-list>", styles: [""], dependencies: [{ kind: "ngmodule", type: WrappersModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i4.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i4.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
|
218
218
|
}
|
219
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
219
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: RslIonicSmButtonsComponent, decorators: [{
|
220
220
|
type: Component,
|
221
221
|
args: [{ standalone: true, selector: 'app-ionic-sm-buttons', imports: [
|
222
222
|
WrappersModule
|
223
223
|
], template: "<!-- <ion-input [type]=\"props.type || 'text'\" [formControl]=\"formControl\" [ionFormlyAttributes]=\"field\"></ion-input> -->\n\n<!-- <p>Sync</p>\n<ion-list>\n <ion-button *ngFor=\"let action of smActions\" color=\"{{getColor(action)}}\" (click)=\"executeAction(action)\">\n {{action.buttonTranslationKey |translate}}\n </ion-button>\n</ion-list> -->\n<ion-label *ngIf=\"currentState\">{{ getCurrentState() }}</ion-label>\n<ion-list>\n <ion-button *ngFor=\"let action of smActions$ | async \" color=\"{{getColor(action)}}\" (click)=\"executeAction(action)\">\n {{action.buttonTranslationKey |translate}}\n <!-- - {{action.actionID}} -->\n </ion-button>\n</ion-list>" }]
|
224
224
|
}], ctorParameters: function () { return [{ type: i1.SmActionService }, { type: i1.StateService }, { type: i2.TranslateService }]; } });
|
225
225
|
|
226
|
+
class RepeatDatatableComponent extends FieldArrayType {
|
227
|
+
constructor(dialogService, translate, fileSaverService) {
|
228
|
+
super();
|
229
|
+
this.dialogService = dialogService;
|
230
|
+
this.translate = translate;
|
231
|
+
this.fileSaverService = fileSaverService;
|
232
|
+
this.data = null;
|
233
|
+
this.serach = null;
|
234
|
+
this.showSerach = false;
|
235
|
+
this.filterValue = null;
|
236
|
+
this.importDataProp = null;
|
237
|
+
this.exportDataProp = null;
|
238
|
+
this.ColumnMode = ColumnMode;
|
239
|
+
this.SelectionType = SelectionType;
|
240
|
+
this.deleteMessage = this.translate.instant("General.Delete.Question");
|
241
|
+
this.deleteButton = this.translate.instant("General.Delete.Button");
|
242
|
+
this.cancelButton = this.translate.instant("General.Cancel.Button");
|
243
|
+
}
|
244
|
+
add(i, initialModel) {
|
245
|
+
initialModel = {};
|
246
|
+
this.props['columns'].forEach(column => initialModel[column.prop] = null);
|
247
|
+
super.add(i, initialModel);
|
248
|
+
}
|
249
|
+
remove(i, { markAsDirty } = { markAsDirty: true }) {
|
250
|
+
this.dialogService.confirm(this.deleteMessage, null, this.deleteButton, this.cancelButton).then((value) => {
|
251
|
+
if (value.data) {
|
252
|
+
var onDelete = this.field.props['onDelete'];
|
253
|
+
if (onDelete) {
|
254
|
+
onDelete(this.field.fieldGroup[i].model).subscribe(() => {
|
255
|
+
super.remove(i);
|
256
|
+
});
|
257
|
+
}
|
258
|
+
super.remove(i);
|
259
|
+
}
|
260
|
+
});
|
261
|
+
}
|
262
|
+
ngOnInit() {
|
263
|
+
this.props['columns'].forEach(column => column.cellTemplate = this.defaultColumn);
|
264
|
+
this.props['columns'].push({
|
265
|
+
cellTemplate: this.actionsTmpl,
|
266
|
+
name: '',
|
267
|
+
cellClass: 'actions-cell',
|
268
|
+
draggable: false,
|
269
|
+
sortable: false,
|
270
|
+
visible: true,
|
271
|
+
width: 75,
|
272
|
+
maxWidth: 75,
|
273
|
+
minWidth: 75
|
274
|
+
});
|
275
|
+
this.typeKey = this.field.key;
|
276
|
+
this.serach = this.props['search'];
|
277
|
+
this.exportDataProp = this.props['export'] || null;
|
278
|
+
this.importDataProp = this.props['import'] || null;
|
279
|
+
if (this.serach) {
|
280
|
+
this.showSerach = this.serach.showSerach;
|
281
|
+
}
|
282
|
+
}
|
283
|
+
getField(field, column, rowIndex) {
|
284
|
+
return field.fieldGroup[rowIndex].fieldGroup.find(f => f.key === column.prop);
|
285
|
+
}
|
286
|
+
postPopulate(field) {
|
287
|
+
if (this.showSerach) {
|
288
|
+
this.data = field.fieldGroup;
|
289
|
+
if (this.filterValue) {
|
290
|
+
this.field.fieldGroup = this.data.filter(f => f.formControl.value[this.serach.searchProp].toLowerCase().includes(this.filterValue));
|
291
|
+
}
|
292
|
+
}
|
293
|
+
}
|
294
|
+
handleChange(event) {
|
295
|
+
if (this.showSerach) {
|
296
|
+
if (this.data == null && this.field.fieldGroup !== null) {
|
297
|
+
this.data = this.field.fieldGroup;
|
298
|
+
}
|
299
|
+
this.filterValue = event.target.value.toLowerCase();
|
300
|
+
this.field.fieldGroup = this.data.filter(f => f.formControl.value[this.serach.searchProp].toLowerCase().includes(this.filterValue));
|
301
|
+
}
|
302
|
+
}
|
303
|
+
importData() {
|
304
|
+
this.fileInput.nativeElement.click();
|
305
|
+
}
|
306
|
+
async handleImportFile(event) {
|
307
|
+
const file = event.target.files[0];
|
308
|
+
if (file) {
|
309
|
+
try {
|
310
|
+
const fileContents = await this.readFileAsync(file);
|
311
|
+
// Handle the file contents here (e.g., display or process the data)
|
312
|
+
const wb = XLSX.read(fileContents); //, { type: 'binary' });
|
313
|
+
const wsname = wb.SheetNames[0];
|
314
|
+
const ws = wb.Sheets[wsname];
|
315
|
+
const excelData = XLSX.utils.sheet_to_json(ws); //, { header: 1 });
|
316
|
+
excelData.forEach(element => {
|
317
|
+
const jsonX = this.getValueFromJsonData(element, this.importDataProp.keyProp);
|
318
|
+
const idx = this.field.parent.model[this.typeKey].findIndex(f => f[this.importDataProp.keyProp] === jsonX);
|
319
|
+
if (idx >= 0) {
|
320
|
+
const existingdata = this.field.parent.model[this.typeKey][idx];
|
321
|
+
for (const prop of this.importDataProp.propertiesToImport) {
|
322
|
+
const jsonVal = this.getValueFromJsonData(element, prop);
|
323
|
+
if (existingdata[prop] !== jsonVal) {
|
324
|
+
var fieldControl = this.field.fieldGroup[idx].formControl;
|
325
|
+
fieldControl.controls[prop].setValue(jsonVal);
|
326
|
+
}
|
327
|
+
}
|
328
|
+
}
|
329
|
+
else {
|
330
|
+
super.add(null, element);
|
331
|
+
}
|
332
|
+
});
|
333
|
+
}
|
334
|
+
catch (error) {
|
335
|
+
console.error('Error reading the file:', error);
|
336
|
+
}
|
337
|
+
}
|
338
|
+
}
|
339
|
+
exportData() {
|
340
|
+
// Filter the data to include only the specified properties
|
341
|
+
const filteredData = this.field.parent.model[this.typeKey].map(item => {
|
342
|
+
const filteredItem = {};
|
343
|
+
for (const prop of this.exportDataProp.propertiesToExport) {
|
344
|
+
filteredItem[prop] = item[prop];
|
345
|
+
}
|
346
|
+
return filteredItem;
|
347
|
+
});
|
348
|
+
const ws = XLSX.utils.json_to_sheet(filteredData);
|
349
|
+
const wb = XLSX.utils.book_new();
|
350
|
+
XLSX.utils.book_append_sheet(wb, ws, this.exportDataProp.sheetName);
|
351
|
+
const excelBuffer = XLSX.write(wb, { bookType: 'xlsx', type: 'array' });
|
352
|
+
const blob = new Blob([excelBuffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
|
353
|
+
this.fileSaverService.save(blob, this.exportDataProp.fileName);
|
354
|
+
}
|
355
|
+
getValueFromJsonData(jsonData, key) {
|
356
|
+
// Convert the key and all JSON keys to lowercase
|
357
|
+
const lowercaseKey = key.toLowerCase();
|
358
|
+
const lowercaseKeys = Object.keys(jsonData).map(k => k.toLowerCase());
|
359
|
+
// Find the lowercase key in the lowercase keys array
|
360
|
+
const index = lowercaseKeys.indexOf(lowercaseKey);
|
361
|
+
// If found, use the original (proper case) key to access the value
|
362
|
+
if (index !== -1) {
|
363
|
+
const originalKey = Object.keys(jsonData)[index];
|
364
|
+
return jsonData[originalKey];
|
365
|
+
}
|
366
|
+
// Key not found
|
367
|
+
return undefined;
|
368
|
+
}
|
369
|
+
readFileAsync(file) {
|
370
|
+
return new Promise((resolve, reject) => {
|
371
|
+
const reader = new FileReader();
|
372
|
+
reader.onload = (event) => {
|
373
|
+
resolve(event.target.result);
|
374
|
+
};
|
375
|
+
reader.onerror = (event) => {
|
376
|
+
reject(event.target.error);
|
377
|
+
};
|
378
|
+
reader.readAsArrayBuffer(file);
|
379
|
+
});
|
380
|
+
}
|
381
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: RepeatDatatableComponent, deps: [{ token: IonicDialogService }, { token: i2.TranslateService }, { token: i3$1.FileSaverService }], target: i0.ɵɵFactoryTarget.Component }); }
|
382
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.10", type: RepeatDatatableComponent, isStandalone: true, selector: "app-repeat-datatable", viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "defaultColumn", first: true, predicate: ["defaultColumn"], descendants: true, static: true }, { propertyName: "actionsTmpl", first: true, predicate: ["actionsTmpl"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ion-header [translucent]=\"true\">\n <ion-toolbar>\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\n </ion-toolbar>\n <ng-container [ngTemplateOutlet]=\"search\"></ng-container>\n</ion-header>\n\n<ng-template #header>\n <ion-title class=\"ion-text-left\">{{props.label}}</ion-title>\n\n <ion-button slot=\"end\" (click)=\"exportData()\" fill=\"clear\" [disabled]=\"props.disabled\" *ngIf=\"exportDataProp\">\n <ion-icon name=\"cloud-download-outline\"></ion-icon>\n </ion-button>\n\n <ion-button slot=\"end\" (click)=\"importData()\" fill=\"clear\" [disabled]=\"props.disabled\" *ngIf=\"importDataProp\">\n <ion-icon name=\"cloud-upload-outline\"></ion-icon>\n </ion-button>\n <input #fileInput type=\"file\" style=\"display: none\" accept=\".xlsx,.xls,.csv\" (change)=\"handleImportFile($event)\">\n\n <ion-button slot=\"end\" (click)=\"add()\" fill=\"clear\" [disabled]=\"props.disabled\">\n <ion-icon size=\"large\" name=\"add\"></ion-icon>\n </ion-button>\n</ng-template>\n\n<ngx-datatable #table class=\"material fullscreen rls-server-scrolling\" [rows]=\"model\" [columns]=\"props['columns']\" [columnMode]=\"props['columnMode']\"\n [rowHeight]=\"props['rowHeight']\" [headerHeight]=\"props['headerHeight']\" [footerHeight]=\"props['footerHeight']\" [limit]=\"props['limit']\"\n [scrollbarH]=\"props['scrollbarH']\" [reorderable]=\"props['reorderable']\" [externalSorting]=\"true\">\n <ng-template #defaultColumn ngx-datatable-cell-template let-rowIndex=\"rowIndex\" let-value=\"value\" let-row=\"row\"\n let-column=\"column\">\n <formly-field class=\"formly-ion-list-item\" [field]=\"getField(field, column, rowIndex)\"></formly-field>\n </ng-template>\n</ngx-datatable>\n\n<ng-template #actionsTmpl let-row=\"row\" let-value=\"value\" let-rowIndex=\"rowIndex\">\n <ion-button style=\"height: 100%;\" fill=\"clear\"[disabled]=\"props.disabled\" (click)='remove(rowIndex)'>\n <ion-icon color=\"danger\" slot=\"icon-only\" name=\"trash\" (click)='remove(rowIndex)'></ion-icon>\n </ion-button>\n</ng-template>\n\n<ng-template #search>\n <ion-toolbar *ngIf=\"showSerach\">\n <ion-searchbar [debounce]=\"1000\" (ionChange)=\"handleChange($event)\"></ion-searchbar>\n </ion-toolbar>\n</ng-template>", styles: [".rls-server-scrolling{height:calc(100vh - 110px);position:relative!important}::ng-deep .datatable-body-cell{padding:0!important}::ng-deep .datatable-body-cell-label{height:100%!important}::ng-deep .progress-linear{position:fixed!important;bottom:0}::ng-deep .actions-cell{padding:5px 0 0 .9rem!important}::ng-deep .align-right{text-align:right!important}\n"], dependencies: [{ kind: "ngmodule", type: WrappersModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i4.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i4.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i4.IonSearchbar, selector: "ion-searchbar", inputs: ["animated", "autocomplete", "autocorrect", "cancelButtonIcon", "cancelButtonText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "mode", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value"] }, { kind: "component", type: i4.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i4.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i4.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }, { kind: "component", type: i6.DatatableComponent, selector: "ngx-datatable", inputs: ["targetMarkerTemplate", "rows", "groupRowsBy", "groupedRows", "columns", "selected", "scrollbarV", "scrollbarH", "rowHeight", "columnMode", "headerHeight", "footerHeight", "externalPaging", "externalSorting", "limit", "count", "offset", "loadingIndicator", "selectionType", "reorderable", "swapColumns", "sortType", "sorts", "cssClasses", "messages", "rowClass", "selectCheck", "displayCheck", "groupExpansionDefault", "trackByProp", "selectAllRowsOnPage", "virtualization", "treeFromRelation", "treeToRelation", "summaryRow", "summaryHeight", "summaryPosition", "rowIdentity"], outputs: ["scroll", "activate", "select", "sort", "page", "reorder", "resize", "tableContextmenu", "treeAction"] }, { kind: "directive", type: i6.DataTableColumnCellDirective, selector: "[ngx-datatable-cell-template]" }, { kind: "component", type: i7.FormlyField, selector: "formly-field", inputs: ["field"] }] }); }
|
383
|
+
}
|
384
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: RepeatDatatableComponent, decorators: [{
|
385
|
+
type: Component,
|
386
|
+
args: [{ standalone: true, selector: 'app-repeat-datatable', imports: [
|
387
|
+
WrappersModule
|
388
|
+
], template: "<ion-header [translucent]=\"true\">\n <ion-toolbar>\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\n </ion-toolbar>\n <ng-container [ngTemplateOutlet]=\"search\"></ng-container>\n</ion-header>\n\n<ng-template #header>\n <ion-title class=\"ion-text-left\">{{props.label}}</ion-title>\n\n <ion-button slot=\"end\" (click)=\"exportData()\" fill=\"clear\" [disabled]=\"props.disabled\" *ngIf=\"exportDataProp\">\n <ion-icon name=\"cloud-download-outline\"></ion-icon>\n </ion-button>\n\n <ion-button slot=\"end\" (click)=\"importData()\" fill=\"clear\" [disabled]=\"props.disabled\" *ngIf=\"importDataProp\">\n <ion-icon name=\"cloud-upload-outline\"></ion-icon>\n </ion-button>\n <input #fileInput type=\"file\" style=\"display: none\" accept=\".xlsx,.xls,.csv\" (change)=\"handleImportFile($event)\">\n\n <ion-button slot=\"end\" (click)=\"add()\" fill=\"clear\" [disabled]=\"props.disabled\">\n <ion-icon size=\"large\" name=\"add\"></ion-icon>\n </ion-button>\n</ng-template>\n\n<ngx-datatable #table class=\"material fullscreen rls-server-scrolling\" [rows]=\"model\" [columns]=\"props['columns']\" [columnMode]=\"props['columnMode']\"\n [rowHeight]=\"props['rowHeight']\" [headerHeight]=\"props['headerHeight']\" [footerHeight]=\"props['footerHeight']\" [limit]=\"props['limit']\"\n [scrollbarH]=\"props['scrollbarH']\" [reorderable]=\"props['reorderable']\" [externalSorting]=\"true\">\n <ng-template #defaultColumn ngx-datatable-cell-template let-rowIndex=\"rowIndex\" let-value=\"value\" let-row=\"row\"\n let-column=\"column\">\n <formly-field class=\"formly-ion-list-item\" [field]=\"getField(field, column, rowIndex)\"></formly-field>\n </ng-template>\n</ngx-datatable>\n\n<ng-template #actionsTmpl let-row=\"row\" let-value=\"value\" let-rowIndex=\"rowIndex\">\n <ion-button style=\"height: 100%;\" fill=\"clear\"[disabled]=\"props.disabled\" (click)='remove(rowIndex)'>\n <ion-icon color=\"danger\" slot=\"icon-only\" name=\"trash\" (click)='remove(rowIndex)'></ion-icon>\n </ion-button>\n</ng-template>\n\n<ng-template #search>\n <ion-toolbar *ngIf=\"showSerach\">\n <ion-searchbar [debounce]=\"1000\" (ionChange)=\"handleChange($event)\"></ion-searchbar>\n </ion-toolbar>\n</ng-template>", styles: [".rls-server-scrolling{height:calc(100vh - 110px);position:relative!important}::ng-deep .datatable-body-cell{padding:0!important}::ng-deep .datatable-body-cell-label{height:100%!important}::ng-deep .progress-linear{position:fixed!important;bottom:0}::ng-deep .actions-cell{padding:5px 0 0 .9rem!important}::ng-deep .align-right{text-align:right!important}\n"] }]
|
389
|
+
}], ctorParameters: function () { return [{ type: IonicDialogService }, { type: i2.TranslateService }, { type: i3$1.FileSaverService }]; }, propDecorators: { fileInput: [{
|
390
|
+
type: ViewChild,
|
391
|
+
args: ['fileInput']
|
392
|
+
}], defaultColumn: [{
|
393
|
+
type: ViewChild,
|
394
|
+
args: ['defaultColumn', { static: true }]
|
395
|
+
}], actionsTmpl: [{
|
396
|
+
type: ViewChild,
|
397
|
+
args: ['actionsTmpl', { static: true }]
|
398
|
+
}] } });
|
399
|
+
|
226
400
|
class RepeatTypeComponent extends FieldArrayType {
|
227
401
|
constructor(dialogService, translate, fileSaverService) {
|
228
402
|
super();
|
@@ -330,10 +504,10 @@ class RepeatTypeComponent extends FieldArrayType {
|
|
330
504
|
const blob = new Blob([excelBuffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
|
331
505
|
this.fileSaverService.save(blob, this.exportDataProp.fileName);
|
332
506
|
}
|
333
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
334
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.
|
507
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: RepeatTypeComponent, deps: [{ token: IonicDialogService }, { token: i2.TranslateService }, { token: i3$1.FileSaverService }], target: i0.ɵɵFactoryTarget.Component }); }
|
508
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.10", type: RepeatTypeComponent, isStandalone: true, selector: "formly-repeat-section", viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ion-header [translucent]=\"true\">\r\n <ion-toolbar>\r\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\r\n </ion-toolbar>\r\n <ng-container [ngTemplateOutlet]=\"search\"></ng-container>\r\n</ion-header>\r\n\r\n<ng-template #header>\r\n <ion-title class=\"ion-text-left\">{{props.label}}</ion-title>\r\n\r\n <ion-button slot=\"end\" (click)=\"exportData()\" fill=\"clear\" [disabled]=\"props.disabled\" *ngIf=\"exportDataProp\">\r\n <ion-icon name=\"cloud-download-outline\"></ion-icon>\r\n </ion-button>\r\n\r\n <ion-button slot=\"end\" (click)=\"importData()\" fill=\"clear\" [disabled]=\"props.disabled\" *ngIf=\"importDataProp\">\r\n <ion-icon name=\"cloud-upload-outline\"></ion-icon>\r\n </ion-button>\r\n <input #fileInput type=\"file\" style=\"display: none\" accept=\".xlsx,.xls,.csv\" (change)=\"handleImportFile($event)\">\r\n\r\n <ion-button slot=\"end\" (click)=\"add()\" fill=\"clear\" [disabled]=\"props.disabled\">\r\n <ion-icon size=\"large\" name=\"add\"></ion-icon>\r\n </ion-button>\r\n</ng-template>\r\n\r\n\r\n<ion-list lines=\"full\">\r\n <ion-item *ngFor=\"let field of field.fieldGroup; let i = index\" class=\"row align-items-baseline\">\r\n <formly-field class=\"formly-ion-list-item\" [field]=\"field\"></formly-field>\r\n <ion-button [disabled]=\"props.disabled\" color=\"danger\" slot=\"end\" (click)='remove(i)'>\r\n <ion-icon slot=\"icon-only\" name=\"trash\"></ion-icon>\r\n </ion-button>\r\n </ion-item>\r\n</ion-list>\r\n\r\n\r\n<ng-template #search>\r\n <ion-toolbar *ngIf=\"showSerach\">\r\n <ion-searchbar [debounce]=\"1000\" (ionChange)=\"handleChange($event)\"></ion-searchbar>\r\n </ion-toolbar>\r\n</ng-template>", styles: [".formly-ion-list-item{display:inline;width:100%}\n"], dependencies: [{ kind: "ngmodule", type: WrappersModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i4.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i4.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i4.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i4.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i4.IonSearchbar, selector: "ion-searchbar", inputs: ["animated", "autocomplete", "autocorrect", "cancelButtonIcon", "cancelButtonText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "mode", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value"] }, { kind: "component", type: i4.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i4.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i4.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }, { kind: "component", type: i7.FormlyField, selector: "formly-field", inputs: ["field"] }] }); }
|
335
509
|
}
|
336
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
510
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: RepeatTypeComponent, decorators: [{
|
337
511
|
type: Component,
|
338
512
|
args: [{ standalone: true, selector: 'formly-repeat-section', imports: [
|
339
513
|
WrappersModule
|
@@ -356,8 +530,8 @@ function fieldMatchValidator(control) {
|
|
356
530
|
}
|
357
531
|
|
358
532
|
class AccordionWrapperComponent extends FieldWrapper {
|
359
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
360
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.
|
533
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: AccordionWrapperComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
534
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.10", type: AccordionWrapperComponent, isStandalone: true, selector: "formly-accordion-panel", usesInheritance: true, ngImport: i0, template: `
|
361
535
|
|
362
536
|
<ion-accordion-group [value]="['first']">
|
363
537
|
<ion-accordion value="first">
|
@@ -374,7 +548,7 @@ class AccordionWrapperComponent extends FieldWrapper {
|
|
374
548
|
|
375
549
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: WrappersModule }, { kind: "component", type: i4.IonAccordion, selector: "ion-accordion", inputs: ["disabled", "mode", "readonly", "toggleIcon", "toggleIconSlot", "value"] }, { kind: "component", type: i4.IonAccordionGroup, selector: "ion-accordion-group", inputs: ["animated", "disabled", "expand", "mode", "multiple", "readonly", "value"] }, { kind: "component", type: i4.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i4.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }] }); }
|
376
550
|
}
|
377
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
551
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: AccordionWrapperComponent, decorators: [{
|
378
552
|
type: Component,
|
379
553
|
args: [{
|
380
554
|
standalone: true,
|
@@ -401,8 +575,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
|
|
401
575
|
}] });
|
402
576
|
|
403
577
|
class PanelWrapperComponent extends FieldWrapper {
|
404
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
405
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.
|
578
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: PanelWrapperComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
579
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.10", type: PanelWrapperComponent, isStandalone: true, selector: "formly-wrapper-panel", usesInheritance: true, ngImport: i0, template: `
|
406
580
|
<ion-card>
|
407
581
|
<ion-card-header>
|
408
582
|
<ion-card-title>{{ props.label}}</ion-card-title>
|
@@ -413,7 +587,7 @@ class PanelWrapperComponent extends FieldWrapper {
|
|
413
587
|
</ion-card>
|
414
588
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: WrappersModule }, { kind: "component", type: i4.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i4.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i4.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i4.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }] }); }
|
415
589
|
}
|
416
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
590
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: PanelWrapperComponent, decorators: [{
|
417
591
|
type: Component,
|
418
592
|
args: [{
|
419
593
|
standalone: true,
|
@@ -440,24 +614,25 @@ const COMMON_MODULES = [
|
|
440
614
|
NgxDatatableModule
|
441
615
|
];
|
442
616
|
class RslIonicModuleModule {
|
443
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
444
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.
|
617
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: RslIonicModuleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
618
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.10", ngImport: i0, type: RslIonicModuleModule, imports: [CommonModule,
|
445
619
|
IonicModule,
|
446
620
|
ReactiveFormsModule,
|
447
621
|
FormlyIonicModule,
|
448
|
-
NgxDatatableModule, TranslateModule,
|
622
|
+
NgxDatatableModule, TranslateModule, i7.FormlyModule], exports: [CommonModule,
|
449
623
|
IonicModule,
|
450
624
|
ReactiveFormsModule,
|
451
625
|
FormlyIonicModule,
|
452
626
|
NgxDatatableModule, FormlyModule,
|
453
627
|
TranslateModule] }); }
|
454
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.
|
628
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: RslIonicModuleModule, providers: [
|
455
629
|
IonicDialogService,
|
456
630
|
{ provide: FORMLY_CONFIG, multi: true, useFactory: registerTranslateExtension, deps: [TranslateService] },
|
457
631
|
], imports: [COMMON_MODULES, TranslateModule,
|
458
632
|
FormlyModule.forRoot({
|
459
633
|
types: [
|
460
634
|
{ name: 'repeat', component: RepeatTypeComponent },
|
635
|
+
{ name: 'repeat-data-table', component: RepeatDatatableComponent },
|
461
636
|
{ name: 'sm-buttons', component: RslIonicSmButtonsComponent }
|
462
637
|
],
|
463
638
|
validators: [{ name: 'fieldMatch', validation: fieldMatchValidator }],
|
@@ -475,7 +650,7 @@ class RslIonicModuleModule {
|
|
475
650
|
NgxDatatableModule, FormlyModule,
|
476
651
|
TranslateModule] }); }
|
477
652
|
}
|
478
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
653
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: RslIonicModuleModule, decorators: [{
|
479
654
|
type: NgModule,
|
480
655
|
args: [{
|
481
656
|
imports: [
|
@@ -484,6 +659,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
|
|
484
659
|
FormlyModule.forRoot({
|
485
660
|
types: [
|
486
661
|
{ name: 'repeat', component: RepeatTypeComponent },
|
662
|
+
{ name: 'repeat-data-table', component: RepeatDatatableComponent },
|
487
663
|
{ name: 'sm-buttons', component: RslIonicSmButtonsComponent }
|
488
664
|
],
|
489
665
|
validators: [{ name: 'fieldMatch', validation: fieldMatchValidator }],
|
@@ -747,10 +923,10 @@ class GenericIonicCrudComponent {
|
|
747
923
|
}
|
748
924
|
return rvalue;
|
749
925
|
}
|
750
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
751
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.
|
926
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: GenericIonicCrudComponent, deps: [{ token: i1$1.UntypedFormBuilder }, { token: i1$2.Router }, { token: i1$2.ActivatedRoute }, { token: IonicDialogService }, { token: i2.TranslateService }, { token: i3.Location }, { token: i0.Injector }, { token: i6$1.FormlyJsonschema }], target: i0.ɵɵFactoryTarget.Component }); }
|
927
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.10", type: GenericIonicCrudComponent, isStandalone: true, selector: "rslc-ionic-crud", ngImport: i0, template: "<ion-header [translucent]=\"true\">\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-menu-button></ion-menu-button>\n <ion-back-button></ion-back-button>\n </ion-buttons>\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\n </ion-toolbar>\n</ion-header>\n\n<ion-content [fullscreen]=\"true\">\n <ng-container *ngIf=\"!isLoading\">\n <form [formGroup]=\"baseForm\" (ngSubmit)=\"onSubmit(model)\">\n <formly-form [form]=\"baseForm\" [fields]=\"fields\" [model]=\"model\" [options]=\"options\"></formly-form>\n </form>\n </ng-container>\n</ion-content>\n\n<ng-template #header>\n <ion-title class=\"ion-text-center\">{{title |translate}}</ion-title>\n <ion-button *ngIf=\"!isLoading\" slot=\"end\" fill=\"clear\" (click)=\"onSave()\"\n [disabled]=\"baseForm.invalid || !baseForm.dirty\">\n <ion-icon size=\"large\" name=\"save\"></ion-icon>\n </ion-button>\n</ng-template>", styles: [""], dependencies: [{ kind: "ngmodule", type: RslIonicModuleModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.IonBackButton, selector: "ion-back-button", inputs: ["color", "defaultHref", "disabled", "icon", "mode", "routerAnimation", "text", "type"] }, { kind: "component", type: i4.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i4.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i4.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i4.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i4.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i4.IonMenuButton, selector: "ion-menu-button", inputs: ["autoHide", "color", "disabled", "menu", "mode", "type"] }, { kind: "component", type: i4.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i4.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i4.IonBackButtonDelegate, selector: "ion-back-button", inputs: ["defaultHref", "routerAnimation"] }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i7.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
|
752
928
|
}
|
753
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
929
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: GenericIonicCrudComponent, decorators: [{
|
754
930
|
type: Component,
|
755
931
|
args: [{ standalone: true, selector: 'rslc-ionic-crud', imports: [RslIonicModuleModule], template: "<ion-header [translucent]=\"true\">\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-menu-button></ion-menu-button>\n <ion-back-button></ion-back-button>\n </ion-buttons>\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\n </ion-toolbar>\n</ion-header>\n\n<ion-content [fullscreen]=\"true\">\n <ng-container *ngIf=\"!isLoading\">\n <form [formGroup]=\"baseForm\" (ngSubmit)=\"onSubmit(model)\">\n <formly-form [form]=\"baseForm\" [fields]=\"fields\" [model]=\"model\" [options]=\"options\"></formly-form>\n </form>\n </ng-container>\n</ion-content>\n\n<ng-template #header>\n <ion-title class=\"ion-text-center\">{{title |translate}}</ion-title>\n <ion-button *ngIf=\"!isLoading\" slot=\"end\" fill=\"clear\" (click)=\"onSave()\"\n [disabled]=\"baseForm.invalid || !baseForm.dirty\">\n <ion-icon size=\"large\" name=\"save\"></ion-icon>\n </ion-button>\n</ng-template>" }]
|
756
932
|
}], ctorParameters: function () { return [{ type: i1$1.UntypedFormBuilder }, { type: i1$2.Router }, { type: i1$2.ActivatedRoute }, { type: IonicDialogService }, { type: i2.TranslateService }, { type: i3.Location }, { type: i0.Injector }, { type: i6$1.FormlyJsonschema }]; } });
|
@@ -992,10 +1168,10 @@ class RslIonicDataTableComponent {
|
|
992
1168
|
});
|
993
1169
|
return result;
|
994
1170
|
}
|
995
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
996
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.
|
1171
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: RslIonicDataTableComponent, deps: [{ token: i1$2.Router }, { token: i1$2.ActivatedRoute }, { token: i2.TranslateService }, { token: i3.Location }, { token: i0.Injector }, { token: i4.NavController }, { token: IonicDialogService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
1172
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.10", type: RslIonicDataTableComponent, isStandalone: true, selector: "app-rsl-ionic-data-table", inputs: { showSerach: "showSerach", searchFields: "searchFields", customInclude: "customInclude", defaultSort: "defaultSort", defaultSortDirection: "defaultSortDirection", deletePropertyName: "deletePropertyName", defaultFilter: "defaultFilter", showHeader: "showHeader", deleteDisableRule: "deleteDisableRule", hasAdd: "hasAdd", canDelete: "canDelete", canEdit: "canEdit", model: "model", modelService: "modelService" }, viewQueries: [{ propertyName: "actionsTmpl", first: true, predicate: ["actionsTmpl"], descendants: true, static: true }], ngImport: i0, template: "<ion-header *ngIf=\"showHeader\">\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-menu-button></ion-menu-button>\n <ion-back-button></ion-back-button>\n </ion-buttons>\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\n </ion-toolbar>\n <ng-container [ngTemplateOutlet]=\"search\"></ng-container>\n</ion-header>\n\n<ion-content [fullscreen]=\"true\">\n\n <ion-refresher slot=\"fixed\" (ionRefresh)=\"handleRefresh($event)\">\n <ion-refresher-content></ion-refresher-content>\n </ion-refresher>\n\n <ngx-datatable class=\"material fullscreen rls-server-scrolling\" style=\"top: 115px\" [rows]=\"data\" [columns]=\"columns\"\n [columnMode]=\"ColumnMode.standard\" [headerHeight]=\"headerHeight\" [rowHeight]=\"rowHeight\" [scrollbarV]=\"true\"\n [loadingIndicator]=\"isLoading\" [scrollbarH]=\"true\" (scroll)=\"onScroll($event.offsetY)\"\n >\n </ngx-datatable>\n \n <ng-template #actionsTmpl let-row=\"row\" let-value=\"value\">\n <ion-button fill=\"clear\" *ngIf=\"canEdit\" (click)='editModel(row)'>\n <ion-icon slot=\"icon-only\" name=\"create\" (click)='editModel(row)'></ion-icon>\n </ion-button>\n <ion-button fill=\"clear\" *ngIf=\"deleteEnabled(row)\" (click)='deleteModel(row)'>\n <ion-icon color=\"danger\" slot=\"icon-only\" name=\"trash\" (click)='deleteModel(row)'></ion-icon>\n </ion-button>\n </ng-template>\n\n</ion-content>\n\n<ng-template #header>\n <ion-title class=\"ion-text-center\">{{title}}</ion-title>\n <ion-button slot=\"end\" (click)=\"onAdd()\" fill=\"clear\" *ngIf=\"hasAdd\">\n <ion-icon size=\"large\" name=\"add\"></ion-icon>\n </ion-button>\n</ng-template>\n\n<ng-template #search>\n <ion-toolbar *ngIf=\"showSerach\">\n <ion-searchbar [debounce]=\"1000\" (ionChange)=\"handleChange($event)\"></ion-searchbar>\n </ion-toolbar>\n</ng-template>", styles: [".rls-server-scrolling{height:calc(100vh - 110px)}::ng-deep .progress-linear{position:fixed!important;bottom:0}::ng-deep .actions-cell{padding:5px 0 0 .9rem!important}::ng-deep .align-right{text-align:right!important}\n"], dependencies: [{ kind: "ngmodule", type: RslIonicModuleModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.IonBackButton, selector: "ion-back-button", inputs: ["color", "defaultHref", "disabled", "icon", "mode", "routerAnimation", "text", "type"] }, { kind: "component", type: i4.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i4.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i4.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i4.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i4.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i4.IonMenuButton, selector: "ion-menu-button", inputs: ["autoHide", "color", "disabled", "menu", "mode", "type"] }, { kind: "component", type: i4.IonRefresher, selector: "ion-refresher", inputs: ["closeDuration", "disabled", "pullFactor", "pullMax", "pullMin", "snapbackDuration"] }, { kind: "component", type: i4.IonRefresherContent, selector: "ion-refresher-content", inputs: ["pullingIcon", "pullingText", "refreshingSpinner", "refreshingText"] }, { kind: "component", type: i4.IonSearchbar, selector: "ion-searchbar", inputs: ["animated", "autocomplete", "autocorrect", "cancelButtonIcon", "cancelButtonText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "mode", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value"] }, { kind: "component", type: i4.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i4.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i4.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }, { kind: "directive", type: i4.IonBackButtonDelegate, selector: "ion-back-button", inputs: ["defaultHref", "routerAnimation"] }, { kind: "component", type: i6.DatatableComponent, selector: "ngx-datatable", inputs: ["targetMarkerTemplate", "rows", "groupRowsBy", "groupedRows", "columns", "selected", "scrollbarV", "scrollbarH", "rowHeight", "columnMode", "headerHeight", "footerHeight", "externalPaging", "externalSorting", "limit", "count", "offset", "loadingIndicator", "selectionType", "reorderable", "swapColumns", "sortType", "sorts", "cssClasses", "messages", "rowClass", "selectCheck", "displayCheck", "groupExpansionDefault", "trackByProp", "selectAllRowsOnPage", "virtualization", "treeFromRelation", "treeToRelation", "summaryRow", "summaryHeight", "summaryPosition", "rowIdentity"], outputs: ["scroll", "activate", "select", "sort", "page", "reorder", "resize", "tableContextmenu", "treeAction"] }] }); }
|
997
1173
|
}
|
998
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
1174
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: RslIonicDataTableComponent, decorators: [{
|
999
1175
|
type: Component,
|
1000
1176
|
args: [{ standalone: true, selector: 'app-rsl-ionic-data-table', imports: [RslIonicModuleModule], template: "<ion-header *ngIf=\"showHeader\">\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-menu-button></ion-menu-button>\n <ion-back-button></ion-back-button>\n </ion-buttons>\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\n </ion-toolbar>\n <ng-container [ngTemplateOutlet]=\"search\"></ng-container>\n</ion-header>\n\n<ion-content [fullscreen]=\"true\">\n\n <ion-refresher slot=\"fixed\" (ionRefresh)=\"handleRefresh($event)\">\n <ion-refresher-content></ion-refresher-content>\n </ion-refresher>\n\n <ngx-datatable class=\"material fullscreen rls-server-scrolling\" style=\"top: 115px\" [rows]=\"data\" [columns]=\"columns\"\n [columnMode]=\"ColumnMode.standard\" [headerHeight]=\"headerHeight\" [rowHeight]=\"rowHeight\" [scrollbarV]=\"true\"\n [loadingIndicator]=\"isLoading\" [scrollbarH]=\"true\" (scroll)=\"onScroll($event.offsetY)\"\n >\n </ngx-datatable>\n \n <ng-template #actionsTmpl let-row=\"row\" let-value=\"value\">\n <ion-button fill=\"clear\" *ngIf=\"canEdit\" (click)='editModel(row)'>\n <ion-icon slot=\"icon-only\" name=\"create\" (click)='editModel(row)'></ion-icon>\n </ion-button>\n <ion-button fill=\"clear\" *ngIf=\"deleteEnabled(row)\" (click)='deleteModel(row)'>\n <ion-icon color=\"danger\" slot=\"icon-only\" name=\"trash\" (click)='deleteModel(row)'></ion-icon>\n </ion-button>\n </ng-template>\n\n</ion-content>\n\n<ng-template #header>\n <ion-title class=\"ion-text-center\">{{title}}</ion-title>\n <ion-button slot=\"end\" (click)=\"onAdd()\" fill=\"clear\" *ngIf=\"hasAdd\">\n <ion-icon size=\"large\" name=\"add\"></ion-icon>\n </ion-button>\n</ng-template>\n\n<ng-template #search>\n <ion-toolbar *ngIf=\"showSerach\">\n <ion-searchbar [debounce]=\"1000\" (ionChange)=\"handleChange($event)\"></ion-searchbar>\n </ion-toolbar>\n</ng-template>", styles: [".rls-server-scrolling{height:calc(100vh - 110px)}::ng-deep .progress-linear{position:fixed!important;bottom:0}::ng-deep .actions-cell{padding:5px 0 0 .9rem!important}::ng-deep .align-right{text-align:right!important}\n"] }]
|
1001
1177
|
}], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i1$2.ActivatedRoute }, { type: i2.TranslateService }, { type: i3.Location }, { type: i0.Injector }, { type: i4.NavController }, { type: IonicDialogService }, { type: i0.ElementRef }]; }, propDecorators: { actionsTmpl: [{
|
@@ -1255,10 +1431,10 @@ class RslIonicGridComponent {
|
|
1255
1431
|
});
|
1256
1432
|
return result;
|
1257
1433
|
}
|
1258
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.
|
1259
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.
|
1434
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: RslIonicGridComponent, deps: [{ token: i1$2.Router }, { token: i1$2.ActivatedRoute }, { token: i2.TranslateService }, { token: i3.Location }, { token: i0.Injector }, { token: i4.LoadingController }, { token: i4.NavController }, { token: IonicDialogService }, { token: i3.DatePipe }, { token: i3.DecimalPipe }, { token: i3.PercentPipe }], target: i0.ɵɵFactoryTarget.Component }); }
|
1435
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.10", type: RslIonicGridComponent, isStandalone: true, selector: "rsl-ionic-grid", inputs: { showSerach: "showSerach", searchFields: "searchFields", customInclude: "customInclude", defaultSort: "defaultSort", defaultSortDirection: "defaultSortDirection", deletePropertyName: "deletePropertyName", defaultFilter: "defaultFilter", showHeader: "showHeader", deleteDisableRule: "deleteDisableRule", model: "model", modelService: "modelService" }, ngImport: i0, template: "<ion-header *ngIf=\"showHeader\">\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-menu-button></ion-menu-button>\n <ion-back-button></ion-back-button>\n </ion-buttons>\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\n </ion-toolbar>\n <ng-container [ngTemplateOutlet]=\"search\"></ng-container>\n</ion-header>\n\n<ion-content [fullscreen]=\"true\">\n\n <ion-refresher slot=\"fixed\" (ionRefresh)=\"handleRefresh($event)\">\n <ion-refresher-content></ion-refresher-content>\n </ion-refresher>\n\n <ion-list>\n <ng-container *ngFor=\"let item of data\">\n <ion-item-sliding>\n <ng-container [ngTemplateOutlet]=\"listItem\" [ngTemplateOutletContext]=\"{item}\"></ng-container>\n <ion-item-options *ngIf=\"deleteEnabled(item)\" side=\"end\">\n <ion-item-option color=\"danger\">\n <ion-icon slot=\"icon-only\" name=\"trash\" (click)='deleteModel(item)'></ion-icon>\n </ion-item-option>\n </ion-item-options>\n </ion-item-sliding>\n </ng-container>\n </ion-list>\n <ion-infinite-scroll threshold=\"100px\" (ionInfinite)=\"loadData($event)\">\n <ion-infinite-scroll-content loadingSpinner=\"bubbles\" loadingText=\"Loading more data...\">\n </ion-infinite-scroll-content>\n </ion-infinite-scroll>\n\n</ion-content>\n\n<ng-template #header>\n <ion-title class=\"ion-text-center\">{{title |translate}}</ion-title>\n <ion-button slot=\"end\" (click)=\"onAdd()\" fill=\"clear\">\n <ion-icon size=\"large\" name=\"add\"></ion-icon>\n </ion-button>\n</ng-template>\n\n<ng-template #search>\n <ion-toolbar *ngIf=\"showSerach\">\n <ion-searchbar [debounce]=\"1000\" (ionChange)=\"handleChange($event)\"></ion-searchbar>\n </ion-toolbar>\n</ng-template>\n\n<ng-template #listItem let-item='item'>\n <ion-item button (click)='editModel(item)'>\n <ion-label>\n <ng-container *ngFor=\"let row of gridLayout\">\n <h2 *ngIf=\"row.primary\"> {{getCelValue(item,row.key)}} </h2>\n <h3 *ngIf=\"!row.primary\">{{getCelValue(item,row.key)}} </h3>\n </ng-container>\n </ion-label>\n </ion-item>\n</ng-template>", dependencies: [{ kind: "ngmodule", type: RslIonicModuleModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.IonBackButton, selector: "ion-back-button", inputs: ["color", "defaultHref", "disabled", "icon", "mode", "routerAnimation", "text", "type"] }, { kind: "component", type: i4.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i4.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i4.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i4.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i4.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i4.IonInfiniteScroll, selector: "ion-infinite-scroll", inputs: ["disabled", "position", "threshold"] }, { kind: "component", type: i4.IonInfiniteScrollContent, selector: "ion-infinite-scroll-content", inputs: ["loadingSpinner", "loadingText"] }, { kind: "component", type: i4.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i4.IonItemOption, selector: "ion-item-option", inputs: ["color", "disabled", "download", "expandable", "href", "mode", "rel", "target", "type"] }, { kind: "component", type: i4.IonItemOptions, selector: "ion-item-options", inputs: ["side"] }, { kind: "component", type: i4.IonItemSliding, selector: "ion-item-sliding", inputs: ["disabled"] }, { kind: "component", type: i4.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i4.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i4.IonMenuButton, selector: "ion-menu-button", inputs: ["autoHide", "color", "disabled", "menu", "mode", "type"] }, { kind: "component", type: i4.IonRefresher, selector: "ion-refresher", inputs: ["closeDuration", "disabled", "pullFactor", "pullMax", "pullMin", "snapbackDuration"] }, { kind: "component", type: i4.IonRefresherContent, selector: "ion-refresher-content", inputs: ["pullingIcon", "pullingText", "refreshingSpinner", "refreshingText"] }, { kind: "component", type: i4.IonSearchbar, selector: "ion-searchbar", inputs: ["animated", "autocomplete", "autocorrect", "cancelButtonIcon", "cancelButtonText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "mode", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value"] }, { kind: "component", type: i4.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i4.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i4.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }, { kind: "directive", type: i4.IonBackButtonDelegate, selector: "ion-back-button", inputs: ["defaultHref", "routerAnimation"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
|
1260
1436
|
}
|
1261
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.
|
1437
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: RslIonicGridComponent, decorators: [{
|
1262
1438
|
type: Component,
|
1263
1439
|
args: [{ standalone: true, selector: 'rsl-ionic-grid', imports: [RslIonicModuleModule], template: "<ion-header *ngIf=\"showHeader\">\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-menu-button></ion-menu-button>\n <ion-back-button></ion-back-button>\n </ion-buttons>\n <ng-container [ngTemplateOutlet]=\"header\"></ng-container>\n </ion-toolbar>\n <ng-container [ngTemplateOutlet]=\"search\"></ng-container>\n</ion-header>\n\n<ion-content [fullscreen]=\"true\">\n\n <ion-refresher slot=\"fixed\" (ionRefresh)=\"handleRefresh($event)\">\n <ion-refresher-content></ion-refresher-content>\n </ion-refresher>\n\n <ion-list>\n <ng-container *ngFor=\"let item of data\">\n <ion-item-sliding>\n <ng-container [ngTemplateOutlet]=\"listItem\" [ngTemplateOutletContext]=\"{item}\"></ng-container>\n <ion-item-options *ngIf=\"deleteEnabled(item)\" side=\"end\">\n <ion-item-option color=\"danger\">\n <ion-icon slot=\"icon-only\" name=\"trash\" (click)='deleteModel(item)'></ion-icon>\n </ion-item-option>\n </ion-item-options>\n </ion-item-sliding>\n </ng-container>\n </ion-list>\n <ion-infinite-scroll threshold=\"100px\" (ionInfinite)=\"loadData($event)\">\n <ion-infinite-scroll-content loadingSpinner=\"bubbles\" loadingText=\"Loading more data...\">\n </ion-infinite-scroll-content>\n </ion-infinite-scroll>\n\n</ion-content>\n\n<ng-template #header>\n <ion-title class=\"ion-text-center\">{{title |translate}}</ion-title>\n <ion-button slot=\"end\" (click)=\"onAdd()\" fill=\"clear\">\n <ion-icon size=\"large\" name=\"add\"></ion-icon>\n </ion-button>\n</ng-template>\n\n<ng-template #search>\n <ion-toolbar *ngIf=\"showSerach\">\n <ion-searchbar [debounce]=\"1000\" (ionChange)=\"handleChange($event)\"></ion-searchbar>\n </ion-toolbar>\n</ng-template>\n\n<ng-template #listItem let-item='item'>\n <ion-item button (click)='editModel(item)'>\n <ion-label>\n <ng-container *ngFor=\"let row of gridLayout\">\n <h2 *ngIf=\"row.primary\"> {{getCelValue(item,row.key)}} </h2>\n <h3 *ngIf=\"!row.primary\">{{getCelValue(item,row.key)}} </h3>\n </ng-container>\n </ion-label>\n </ion-item>\n</ng-template>" }]
|
1264
1440
|
}], ctorParameters: function () { return [{ type: i1$2.Router }, { type: i1$2.ActivatedRoute }, { type: i2.TranslateService }, { type: i3.Location }, { type: i0.Injector }, { type: i4.LoadingController }, { type: i4.NavController }, { type: IonicDialogService }, { type: i3.DatePipe }, { type: i3.DecimalPipe }, { type: i3.PercentPipe }]; }, propDecorators: { showSerach: [{
|