@sumaris-net/ngx-components 1.20.3 → 1.20.4
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/bundles/sumaris-net.ngx-components.umd.js +203 -23
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
- package/doc/changelog.md +5 -0
- package/esm2015/public_api.js +7 -3
- package/esm2015/src/app/core/install/install-upgrade-card.component.js +3 -2
- package/esm2015/src/app/core/services/platform.service.js +3 -2
- package/esm2015/src/app/shared/directives/autotitle.directive.js +27 -0
- package/esm2015/src/app/shared/directives/directives.module.js +6 -3
- package/esm2015/src/app/shared/file/csv.utils.js +90 -0
- package/esm2015/src/app/shared/file/file.utils.js +63 -0
- package/esm2015/src/app/shared/file/uri.utils.js +23 -0
- package/esm2015/src/app/shared/functions.js +3 -1
- package/esm2015/src/app/shared/pipes/pipes.module.js +7 -4
- package/esm2015/src/app/shared/pipes/property.pipes.js +74 -0
- package/esm2015/src/app/shared/upload-file/testing/upload-file.testing.js +2 -2
- package/fesm2015/sumaris-net.ngx-components.js +193 -21
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +6 -2
- package/src/app/shared/directives/autotitle.directive.d.ts +7 -0
- package/src/app/shared/file/csv.utils.d.ts +18 -0
- package/src/app/shared/{files.d.ts → file/file.utils.d.ts} +3 -9
- package/src/app/shared/file/uri.utils.d.ts +7 -0
- package/src/app/shared/pipes/property.pipes.d.ts +14 -0
- package/sumaris-net.ngx-components.metadata.json +1 -1
- package/esm2015/src/app/shared/files.js +0 -84
- package/esm2015/src/app/shared/pipes/properties.pipe.js +0 -20
- package/src/app/shared/pipes/properties.pipe.d.ts +0 -7
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Injectable, Pipe } from '@angular/core';
|
|
2
|
+
import { getPropertyByPath, isNil, isNotNil, joinPropertiesPath } from '../functions';
|
|
3
|
+
import { DateFormatPipe } from './date-format.pipe';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./date-format.pipe";
|
|
6
|
+
export class PropertyGetPipe {
|
|
7
|
+
transform(obj, args) {
|
|
8
|
+
return getPropertyByPath(obj,
|
|
9
|
+
// Path
|
|
10
|
+
args && (typeof args === 'string' ? args : args.key),
|
|
11
|
+
// Default value
|
|
12
|
+
args && args.defaultValue);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
PropertyGetPipe.decorators = [
|
|
16
|
+
{ type: Pipe, args: [{
|
|
17
|
+
name: 'propertyGet'
|
|
18
|
+
},] }
|
|
19
|
+
];
|
|
20
|
+
export class PropertyFormatPipe {
|
|
21
|
+
constructor(dateFormat) {
|
|
22
|
+
this.dateFormat = dateFormat;
|
|
23
|
+
}
|
|
24
|
+
transform(obj, keyOrDefinition) {
|
|
25
|
+
var _a, _b;
|
|
26
|
+
if (!obj)
|
|
27
|
+
return '';
|
|
28
|
+
const definition = keyOrDefinition && (typeof keyOrDefinition === 'object') && keyOrDefinition;
|
|
29
|
+
const key = (definition === null || definition === void 0 ? void 0 : definition.key) || keyOrDefinition;
|
|
30
|
+
if (!key) {
|
|
31
|
+
// Should never occur
|
|
32
|
+
console.warn('Invalid use of pipe \'formatProperty\': missing key or definition');
|
|
33
|
+
return '';
|
|
34
|
+
}
|
|
35
|
+
const value = obj[key];
|
|
36
|
+
if (isNil(value))
|
|
37
|
+
return value;
|
|
38
|
+
const type = (definition === null || definition === void 0 ? void 0 : definition.type) || typeof value;
|
|
39
|
+
switch (type) {
|
|
40
|
+
case 'date':
|
|
41
|
+
return this.dateFormat.transform(value);
|
|
42
|
+
case 'dateTime':
|
|
43
|
+
return this.dateFormat.transform(value, { time: true });
|
|
44
|
+
case 'enum':
|
|
45
|
+
{
|
|
46
|
+
// DEBUG
|
|
47
|
+
// console.debug('formatProperty by definition (type='enum', key=' +definition.key+ '):', value );
|
|
48
|
+
const item = (definition.values || [value]).find(item => (isNotNil(item.key) ? item.key : item) === value);
|
|
49
|
+
return item.value || item;
|
|
50
|
+
}
|
|
51
|
+
case 'entity':
|
|
52
|
+
{
|
|
53
|
+
if ((_a = definition.autocomplete) === null || _a === void 0 ? void 0 : _a.displayWith) {
|
|
54
|
+
return definition.autocomplete.displayWith(value);
|
|
55
|
+
}
|
|
56
|
+
return joinPropertiesPath(obj, ((_b = definition.autocomplete) === null || _b === void 0 ? void 0 : _b.attributes) || ['label', 'name']) || undefined;
|
|
57
|
+
}
|
|
58
|
+
case 'string':
|
|
59
|
+
default:
|
|
60
|
+
return value;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
PropertyFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PropertyFormatPipe_Factory() { return new PropertyFormatPipe(i0.ɵɵinject(i1.DateFormatPipe)); }, token: PropertyFormatPipe, providedIn: "root" });
|
|
65
|
+
PropertyFormatPipe.decorators = [
|
|
66
|
+
{ type: Pipe, args: [{
|
|
67
|
+
name: 'propertyFormat'
|
|
68
|
+
},] },
|
|
69
|
+
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
70
|
+
];
|
|
71
|
+
PropertyFormatPipe.ctorParameters = () => [
|
|
72
|
+
{ type: DateFormatPipe }
|
|
73
|
+
];
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHkucGlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9waXBlcy9wcm9wZXJ0eS5waXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFDLGlCQUFpQixFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEYsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG9CQUFvQixDQUFDOzs7QUFNbEQsTUFBTSxPQUFPLGVBQWU7SUFFeEIsU0FBUyxDQUFDLEdBQVEsRUFBRSxJQUFpRDtRQUNuRSxPQUFPLGlCQUFpQixDQUFDLEdBQUc7UUFDMUIsT0FBTztRQUNQLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3BELGdCQUFnQjtRQUNoQixJQUFJLElBQUssSUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7OztZQVhKLElBQUksU0FBQztnQkFDRixJQUFJLEVBQUUsYUFBYTthQUN0Qjs7QUFpQkQsTUFBTSxPQUFPLGtCQUFrQjtJQUU3QixZQUFvQixVQUEwQjtRQUExQixlQUFVLEdBQVYsVUFBVSxDQUFnQjtJQUM5QyxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQVEsRUFBRSxlQUEyQzs7UUFDN0QsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNwQixNQUFNLFVBQVUsR0FBRyxlQUFlLElBQUksQ0FBQyxPQUFPLGVBQWUsS0FBSyxRQUFRLENBQUMsSUFBSSxlQUFlLENBQUM7UUFDL0YsTUFBTSxHQUFHLEdBQUcsQ0FBQSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsR0FBRyxLQUFJLGVBQXlCLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLHFCQUFxQjtZQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLG1FQUFtRSxDQUFDLENBQUM7WUFDbEYsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMvQixNQUFNLElBQUksR0FBRyxDQUFBLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxJQUFJLEtBQUksT0FBTyxLQUFLLENBQUM7UUFDOUMsUUFBUSxJQUFJLEVBQUU7WUFDWixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQVcsQ0FBQztZQUNwRCxLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFDLENBQVcsQ0FBQztZQUNsRSxLQUFLLE1BQU07Z0JBQ1g7b0JBQ0UsUUFBUTtvQkFDUixrR0FBa0c7b0JBQ2xHLE1BQU0sSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQWUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztvQkFDcEgsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztpQkFDM0I7WUFDRCxLQUFLLFFBQVE7Z0JBQ2I7b0JBQ0UsVUFBSSxVQUFVLENBQUMsWUFBWSwwQ0FBRSxXQUFXLEVBQUU7d0JBQ3hDLE9BQU8sVUFBVSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7cUJBQ2xEO29CQUNELE9BQU8sa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQUEsVUFBVSxDQUFDLFlBQVksMENBQUUsVUFBVSxLQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO2lCQUN2RztZQUNELEtBQUssUUFBUSxDQUFDO1lBQ2Q7Z0JBQ0UsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDSCxDQUFDOzs7O1lBNUNGLElBQUksU0FBQztnQkFDSixJQUFJLEVBQUUsZ0JBQWdCO2FBQ3ZCO1lBQ0EsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7O1lBckJ4QixjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Z2V0UHJvcGVydHlCeVBhdGgsIGlzTmlsLCBpc05vdE5pbCwgam9pblByb3BlcnRpZXNQYXRofSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHtEYXRlRm9ybWF0UGlwZX0gZnJvbSAnLi9kYXRlLWZvcm1hdC5waXBlJztcbmltcG9ydCB7Rm9ybUZpZWxkRGVmaW5pdGlvbn0gZnJvbSAnLi4vZm9ybS9maWVsZC5tb2RlbCc7XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAncHJvcGVydHlHZXQnXG59KVxuZXhwb3J0IGNsYXNzIFByb3BlcnR5R2V0UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgdHJhbnNmb3JtKG9iajogYW55LCBhcmdzOiBzdHJpbmcgfCB7a2V5OiBzdHJpbmc7IGRlZmF1bHRWYWx1ZT86IGFueSB9ICk6IGFueSB7XG4gICAgICByZXR1cm4gZ2V0UHJvcGVydHlCeVBhdGgob2JqLFxuICAgICAgICAvLyBQYXRoXG4gICAgICAgIGFyZ3MgJiYgKHR5cGVvZiBhcmdzID09PSAnc3RyaW5nJyA/IGFyZ3MgOiBhcmdzLmtleSksXG4gICAgICAgIC8vIERlZmF1bHQgdmFsdWVcbiAgICAgICAgYXJncyAmJiAoYXJncyBhcyBhbnkpLmRlZmF1bHRWYWx1ZSk7XG4gICAgfVxufVxuXG5cbkBQaXBlKHtcbiAgbmFtZTogJ3Byb3BlcnR5Rm9ybWF0J1xufSlcbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFByb3BlcnR5Rm9ybWF0UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0ZUZvcm1hdDogRGF0ZUZvcm1hdFBpcGUpIHtcbiAgfVxuXG4gIHRyYW5zZm9ybShvYmo6IGFueSwga2V5T3JEZWZpbml0aW9uOiBzdHJpbmd8Rm9ybUZpZWxkRGVmaW5pdGlvbik6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFvYmopIHJldHVybiAnJztcbiAgICBjb25zdCBkZWZpbml0aW9uID0ga2V5T3JEZWZpbml0aW9uICYmICh0eXBlb2Yga2V5T3JEZWZpbml0aW9uID09PSAnb2JqZWN0JykgJiYga2V5T3JEZWZpbml0aW9uO1xuICAgIGNvbnN0IGtleSA9IGRlZmluaXRpb24/LmtleSB8fCBrZXlPckRlZmluaXRpb24gYXMgc3RyaW5nO1xuICAgIGlmICgha2V5KSB7XG4gICAgICAvLyBTaG91bGQgbmV2ZXIgb2NjdXJcbiAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCB1c2Ugb2YgcGlwZSBcXCdmb3JtYXRQcm9wZXJ0eVxcJzogbWlzc2luZyBrZXkgb3IgZGVmaW5pdGlvbicpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgIGlmIChpc05pbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICBjb25zdCB0eXBlID0gZGVmaW5pdGlvbj8udHlwZSB8fCB0eXBlb2YgdmFsdWU7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZUZvcm1hdC50cmFuc2Zvcm0odmFsdWUpIGFzIHN0cmluZztcbiAgICAgIGNhc2UgJ2RhdGVUaW1lJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZUZvcm1hdC50cmFuc2Zvcm0odmFsdWUsIHt0aW1lOiB0cnVlfSkgYXMgc3RyaW5nO1xuICAgICAgY2FzZSAnZW51bSc6XG4gICAgICB7XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vIGNvbnNvbGUuZGVidWcoJ2Zvcm1hdFByb3BlcnR5IGJ5IGRlZmluaXRpb24gKHR5cGU9J2VudW0nLCBrZXk9JyArZGVmaW5pdGlvbi5rZXkrICcpOicsIHZhbHVlICk7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSAoZGVmaW5pdGlvbi52YWx1ZXMgYXMgYW55W10gfHwgW3ZhbHVlXSkuZmluZChpdGVtID0+IChpc05vdE5pbChpdGVtLmtleSkgPyBpdGVtLmtleSA6IGl0ZW0pID09PSB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBpdGVtLnZhbHVlIHx8IGl0ZW07XG4gICAgICB9XG4gICAgICBjYXNlICdlbnRpdHknOlxuICAgICAge1xuICAgICAgICBpZiAoZGVmaW5pdGlvbi5hdXRvY29tcGxldGU/LmRpc3BsYXlXaXRoKSB7XG4gICAgICAgICAgcmV0dXJuIGRlZmluaXRpb24uYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoKHZhbHVlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqb2luUHJvcGVydGllc1BhdGgob2JqLCBkZWZpbml0aW9uLmF1dG9jb21wbGV0ZT8uYXR0cmlidXRlcyB8fCBbJ2xhYmVsJywgJ25hbWUnXSkgfHwgdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -5,7 +5,7 @@ import { Subject, timer } from 'rxjs';
|
|
|
5
5
|
import { HttpEventType, HttpResponse } from '@angular/common/http';
|
|
6
6
|
import { map, takeUntil } from 'rxjs/operators';
|
|
7
7
|
import { sleep } from '../../functions';
|
|
8
|
-
import { FilesUtils } from '../../
|
|
8
|
+
import { FilesUtils } from '../../file/file.utils';
|
|
9
9
|
export class UploadFileTestingPage {
|
|
10
10
|
constructor(popoverController) {
|
|
11
11
|
this.popoverController = popoverController;
|
|
@@ -56,4 +56,4 @@ UploadFileTestingPage.decorators = [
|
|
|
56
56
|
UploadFileTestingPage.ctorParameters = () => [
|
|
57
57
|
{ type: PopoverController }
|
|
58
58
|
];
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWZpbGUudGVzdGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3VwbG9hZC1maWxlL3Rlc3RpbmcvdXBsb2FkLWZpbGUudGVzdGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCxPQUFPLEVBQWEsT0FBTyxFQUFFLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUMsYUFBYSxFQUFFLFlBQVksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXRDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQU1qRCxNQUFNLE9BQU8scUJBQXFCO0lBRWhDLFlBQ1UsaUJBQW9DO1FBQXBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7SUFFOUMsQ0FBQztJQUVLLFdBQVcsQ0FBQyxLQUFjLEVBQUUsSUFBNkM7O1lBQzdFLE1BQU0sRUFBQyxJQUFJLEVBQUMsR0FBRyxNQUFNLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxrQkFDM0UsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUN6QyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQ3RDLElBQUksRUFDUCxDQUFDO1lBRUwsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLGtDQUFDLElBQUksQ0FBQyxRQUFRLDBDQUFFLElBQUksMENBQUUsU0FBUyxHQUFBLENBQUMsQ0FBQztZQUMzRSxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLENBQUM7S0FBQTtJQUVEOzs7T0FHRztJQUNILFVBQVUsQ0FBQyxJQUFVO1FBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDaEMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQzthQUNqQixJQUFJLENBQ0gsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUNoQixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsTUFBTSxJQUFJLFFBQVEsQ0FBQztZQUVuQixxQkFBcUI7WUFDckIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDdEIseUVBQXlFO2dCQUN6RSxPQUFPLEVBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDMUQ7WUFFRCxpQkFBaUI7WUFDakIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUVwQyx3QkFBd0I7WUFDeEIsT0FBTyxJQUFJLFlBQVksQ0FBQyxFQUFDLElBQUksRUFBRSxFQUFDLFNBQVMsRUFBRyxJQUFJLENBQUMsSUFBSSxFQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUNILENBQUE7SUFFTCxDQUFDO0lBRUssVUFBVSxDQUFDLElBQVU7O1lBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0RBQW9ELENBQUMsQ0FBQztZQUNuRSxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7S0FBQTs7O1lBeERGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUscUJBQXFCO2dCQUMvQixtN0JBQXVDO2FBQ3hDOzs7WUFaTyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BvcG92ZXJDb250cm9sbGVyfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge1VwbG9hZEZpbGVQb3BvdmVyT3B0aW9uc30gZnJvbSAnLi4vdXBsb2FkLWZpbGUtcG9wb3Zlci5jb21wb25lbnQnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0LCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0h0dHBFdmVudFR5cGUsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHttYXAsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtzbGVlcH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7RmlsZUV2ZW50fSBmcm9tICcuLi91cGxvYWQtZmlsZS5tb2RlbCc7XG5pbXBvcnQge0ZpbGVzVXRpbHN9IGZyb20gJy4uLy4uL2ZpbGUvZmlsZS51dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3VwbG9hZC1maWxlLXRlc3RpbmcnLFxuICB0ZW1wbGF0ZVVybDogJ3VwbG9hZC1maWxlLnRlc3RpbmcuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVXBsb2FkRmlsZVRlc3RpbmdQYWdlICB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBwb3BvdmVyQ29udHJvbGxlcjogUG9wb3ZlckNvbnRyb2xsZXJcbiAgKSB7XG4gIH1cblxuICBhc3luYyBzaG93UG9wb3ZlcihldmVudDogVUlFdmVudCwgb3B0cz86IFBhcnRpYWw8VXBsb2FkRmlsZVBvcG92ZXJPcHRpb25zPGFueT4+KSB7XG4gICAgY29uc3Qge2RhdGF9ID0gYXdhaXQgRmlsZXNVdGlscy5zaG93VXBsb2FkUG9wb3Zlcih0aGlzLnBvcG92ZXJDb250cm9sbGVyLCBldmVudCwge1xuICAgICAgICB1cGxvYWRGbjogKGZpbGUpID0+IHRoaXMudXBsb2FkRmlsZShmaWxlKSxcbiAgICAgICAgZGVsZXRlRm46IChmaWxlKSA9PiB0aGlzLmRlbGV0ZUZpbGUoZmlsZSksXG4gICAgICAgIC4uLm9wdHNcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgZmlsZW5hbWVzID0gKGRhdGEgfHwgW10pLm1hcChmaWxlID0+IGZpbGUucmVzcG9uc2U/LmJvZHk/LmZpbmFsTmFtZSk7XG4gICAgY29uc29sZS5pbmZvKCdQb3BvdmVyIHJlc3VsdDogJywgZmlsZW5hbWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaW11bGF0ZSBhIHVwbG9hZCBmdW5jdGlvbiwgd2l0aCBwcm9ncmVzc2lvblxuICAgKiBAcGFyYW0gZmlsZVxuICAgKi9cbiAgdXBsb2FkRmlsZShmaWxlOiBGaWxlKTogT2JzZXJ2YWJsZTxGaWxlRXZlbnQ8eyBmaW5hbE5hbWU6IHN0cmluZzsgfT4+IHtcbiAgICBjb25zdCAkc3RvcCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgY29uc3QgbG9hZFN0ZXAgPSBmaWxlLnNpemUgLyAxMDtcbiAgICBsZXQgbG9hZGVkID0gMDtcbiAgICByZXR1cm4gdGltZXIoMCwgMjUwKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCgkc3RvcCksXG4gICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgbG9hZGVkICs9IGxvYWRTdGVwO1xuXG4gICAgICAgICAgLy8gUmV0dXJuIHByb2dyZXNzaW9uXG4gICAgICAgICAgaWYgKGxvYWRlZCA8IGZpbGUuc2l6ZSkge1xuICAgICAgICAgICAgLy9yZXR1cm4ge3R5cGU6IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MsIHRvdGFsOiBmaWxlLnNpemUsIGxvYWRlZCB9O1xuICAgICAgICAgICAgcmV0dXJuIHt0eXBlOiBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzLCBsb2FkZWQ6IC0xIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RvcCB0aGUgdGltZXJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+ICRzdG9wLm5leHQoKSwgMTAwKTtcblxuICAgICAgICAgIC8vIFJldHVybiBmaW5hbCByZXNwb25zZVxuICAgICAgICAgIHJldHVybiBuZXcgSHR0cFJlc3BvbnNlKHtib2R5OiB7ZmluYWxOYW1lIDogZmlsZS5uYW1lfX0pO1xuICAgICAgICB9KVxuICAgICAgKVxuXG4gIH1cblxuICBhc3luYyBkZWxldGVGaWxlKGZpbGU6IEZpbGUpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zb2xlLmluZm8oJ1t0ZXN0aW5nXSBTaW11bGF0ZSByZW1vdGUgZGVsZXRpb24uLi4gKHdhaXRpbmcgMnMpJyk7XG4gICAgYXdhaXQgc2xlZXAoMjAwMCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -314,6 +314,8 @@ function suggestFromStringArray(values, value, options) {
|
|
|
314
314
|
function joinPropertiesPath(obj, properties, separator) {
|
|
315
315
|
if (!obj)
|
|
316
316
|
throw new Error('Could not display an undefined entity.');
|
|
317
|
+
if (!properties)
|
|
318
|
+
throw new Error('Missing \'properties\' argument');
|
|
317
319
|
return properties
|
|
318
320
|
.map(path => getPropertyByPath(obj, path))
|
|
319
321
|
.filter(isNotNilOrBlank)
|
|
@@ -2892,23 +2894,6 @@ TranslatablePipe.decorators = [
|
|
|
2892
2894
|
{ type: Injectable }
|
|
2893
2895
|
];
|
|
2894
2896
|
|
|
2895
|
-
class PropertyGetPipe {
|
|
2896
|
-
transform(obj, args) {
|
|
2897
|
-
return getPropertyByPath(obj,
|
|
2898
|
-
// Path
|
|
2899
|
-
args && (typeof args === 'string' ? args : args.key),
|
|
2900
|
-
// Default value
|
|
2901
|
-
args && args.defaultValue);
|
|
2902
|
-
}
|
|
2903
|
-
}
|
|
2904
|
-
PropertyGetPipe.ɵprov = ɵɵdefineInjectable({ factory: function PropertyGetPipe_Factory() { return new PropertyGetPipe(); }, token: PropertyGetPipe, providedIn: "root" });
|
|
2905
|
-
PropertyGetPipe.decorators = [
|
|
2906
|
-
{ type: Pipe, args: [{
|
|
2907
|
-
name: 'propertyGet'
|
|
2908
|
-
},] },
|
|
2909
|
-
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
2910
|
-
];
|
|
2911
|
-
|
|
2912
2897
|
class NgInitDirective {
|
|
2913
2898
|
constructor() {
|
|
2914
2899
|
this.ngInit = new EventEmitter();
|
|
@@ -4312,6 +4297,75 @@ FormGetValuePipe.ctorParameters = () => [
|
|
|
4312
4297
|
{ type: ChangeDetectorRef }
|
|
4313
4298
|
];
|
|
4314
4299
|
|
|
4300
|
+
class PropertyGetPipe {
|
|
4301
|
+
transform(obj, args) {
|
|
4302
|
+
return getPropertyByPath(obj,
|
|
4303
|
+
// Path
|
|
4304
|
+
args && (typeof args === 'string' ? args : args.key),
|
|
4305
|
+
// Default value
|
|
4306
|
+
args && args.defaultValue);
|
|
4307
|
+
}
|
|
4308
|
+
}
|
|
4309
|
+
PropertyGetPipe.decorators = [
|
|
4310
|
+
{ type: Pipe, args: [{
|
|
4311
|
+
name: 'propertyGet'
|
|
4312
|
+
},] }
|
|
4313
|
+
];
|
|
4314
|
+
class PropertyFormatPipe {
|
|
4315
|
+
constructor(dateFormat) {
|
|
4316
|
+
this.dateFormat = dateFormat;
|
|
4317
|
+
}
|
|
4318
|
+
transform(obj, keyOrDefinition) {
|
|
4319
|
+
var _a, _b;
|
|
4320
|
+
if (!obj)
|
|
4321
|
+
return '';
|
|
4322
|
+
const definition = keyOrDefinition && (typeof keyOrDefinition === 'object') && keyOrDefinition;
|
|
4323
|
+
const key = (definition === null || definition === void 0 ? void 0 : definition.key) || keyOrDefinition;
|
|
4324
|
+
if (!key) {
|
|
4325
|
+
// Should never occur
|
|
4326
|
+
console.warn('Invalid use of pipe \'formatProperty\': missing key or definition');
|
|
4327
|
+
return '';
|
|
4328
|
+
}
|
|
4329
|
+
const value = obj[key];
|
|
4330
|
+
if (isNil(value))
|
|
4331
|
+
return value;
|
|
4332
|
+
const type = (definition === null || definition === void 0 ? void 0 : definition.type) || typeof value;
|
|
4333
|
+
switch (type) {
|
|
4334
|
+
case 'date':
|
|
4335
|
+
return this.dateFormat.transform(value);
|
|
4336
|
+
case 'dateTime':
|
|
4337
|
+
return this.dateFormat.transform(value, { time: true });
|
|
4338
|
+
case 'enum':
|
|
4339
|
+
{
|
|
4340
|
+
// DEBUG
|
|
4341
|
+
// console.debug('formatProperty by definition (type='enum', key=' +definition.key+ '):', value );
|
|
4342
|
+
const item = (definition.values || [value]).find(item => (isNotNil(item.key) ? item.key : item) === value);
|
|
4343
|
+
return item.value || item;
|
|
4344
|
+
}
|
|
4345
|
+
case 'entity':
|
|
4346
|
+
{
|
|
4347
|
+
if ((_a = definition.autocomplete) === null || _a === void 0 ? void 0 : _a.displayWith) {
|
|
4348
|
+
return definition.autocomplete.displayWith(value);
|
|
4349
|
+
}
|
|
4350
|
+
return joinPropertiesPath(obj, ((_b = definition.autocomplete) === null || _b === void 0 ? void 0 : _b.attributes) || ['label', 'name']) || undefined;
|
|
4351
|
+
}
|
|
4352
|
+
case 'string':
|
|
4353
|
+
default:
|
|
4354
|
+
return value;
|
|
4355
|
+
}
|
|
4356
|
+
}
|
|
4357
|
+
}
|
|
4358
|
+
PropertyFormatPipe.ɵprov = ɵɵdefineInjectable({ factory: function PropertyFormatPipe_Factory() { return new PropertyFormatPipe(ɵɵinject(DateFormatPipe)); }, token: PropertyFormatPipe, providedIn: "root" });
|
|
4359
|
+
PropertyFormatPipe.decorators = [
|
|
4360
|
+
{ type: Pipe, args: [{
|
|
4361
|
+
name: 'propertyFormat'
|
|
4362
|
+
},] },
|
|
4363
|
+
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
4364
|
+
];
|
|
4365
|
+
PropertyFormatPipe.ctorParameters = () => [
|
|
4366
|
+
{ type: DateFormatPipe }
|
|
4367
|
+
];
|
|
4368
|
+
|
|
4315
4369
|
class SharedPipesModule {
|
|
4316
4370
|
}
|
|
4317
4371
|
SharedPipesModule.decorators = [
|
|
@@ -4323,6 +4377,7 @@ SharedPipesModule.decorators = [
|
|
|
4323
4377
|
],
|
|
4324
4378
|
declarations: [
|
|
4325
4379
|
PropertyGetPipe,
|
|
4380
|
+
PropertyFormatPipe,
|
|
4326
4381
|
DateFormatPipe,
|
|
4327
4382
|
DateDiffDurationPipe,
|
|
4328
4383
|
DurationPipe,
|
|
@@ -4359,10 +4414,12 @@ SharedPipesModule.decorators = [
|
|
|
4359
4414
|
FormGetControlPipe,
|
|
4360
4415
|
FormGetArrayPipe,
|
|
4361
4416
|
FormGetGroupPipe,
|
|
4362
|
-
FormGetValuePipe
|
|
4417
|
+
FormGetValuePipe,
|
|
4418
|
+
PropertyFormatPipe
|
|
4363
4419
|
],
|
|
4364
4420
|
exports: [
|
|
4365
4421
|
PropertyGetPipe,
|
|
4422
|
+
PropertyFormatPipe,
|
|
4366
4423
|
DateFormatPipe,
|
|
4367
4424
|
DateFromNowPipe,
|
|
4368
4425
|
DateDiffDurationPipe,
|
|
@@ -4562,6 +4619,32 @@ DragAndDropDirective.propDecorators = {
|
|
|
4562
4619
|
ondrop: [{ type: HostListener, args: ['drop', ['$event'],] }]
|
|
4563
4620
|
};
|
|
4564
4621
|
|
|
4622
|
+
const compatibleTagNames = ['ion-label', 'mat-label'];
|
|
4623
|
+
class AutoTitleDirective {
|
|
4624
|
+
constructor(elementRef) {
|
|
4625
|
+
var _a;
|
|
4626
|
+
this.elementRef = elementRef;
|
|
4627
|
+
// Check compatible tag
|
|
4628
|
+
if (compatibleTagNames.includes((_a = elementRef.nativeElement.tagName) === null || _a === void 0 ? void 0 : _a.toLowerCase())) {
|
|
4629
|
+
this.element = elementRef.nativeElement;
|
|
4630
|
+
}
|
|
4631
|
+
}
|
|
4632
|
+
ngAfterContentChecked() {
|
|
4633
|
+
// Update title if different
|
|
4634
|
+
if (this.element && this.element.title !== this.element.textContent) {
|
|
4635
|
+
this.element.title = this.element.textContent;
|
|
4636
|
+
}
|
|
4637
|
+
}
|
|
4638
|
+
}
|
|
4639
|
+
AutoTitleDirective.decorators = [
|
|
4640
|
+
{ type: Directive, args: [{
|
|
4641
|
+
selector: '[appAutoTitle]',
|
|
4642
|
+
},] }
|
|
4643
|
+
];
|
|
4644
|
+
AutoTitleDirective.ctorParameters = () => [
|
|
4645
|
+
{ type: ElementRef, decorators: [{ type: Inject, args: [ElementRef,] }] }
|
|
4646
|
+
];
|
|
4647
|
+
|
|
4565
4648
|
class SharedDirectivesModule {
|
|
4566
4649
|
}
|
|
4567
4650
|
SharedDirectivesModule.decorators = [
|
|
@@ -4573,12 +4656,14 @@ SharedDirectivesModule.decorators = [
|
|
|
4573
4656
|
declarations: [
|
|
4574
4657
|
AutofocusDirective,
|
|
4575
4658
|
NgVarDirective,
|
|
4576
|
-
DragAndDropDirective
|
|
4659
|
+
DragAndDropDirective,
|
|
4660
|
+
AutoTitleDirective
|
|
4577
4661
|
],
|
|
4578
4662
|
exports: [
|
|
4579
4663
|
AutofocusDirective,
|
|
4580
4664
|
NgVarDirective,
|
|
4581
|
-
DragAndDropDirective
|
|
4665
|
+
DragAndDropDirective,
|
|
4666
|
+
AutoTitleDirective
|
|
4582
4667
|
]
|
|
4583
4668
|
},] }
|
|
4584
4669
|
];
|
|
@@ -15963,6 +16048,8 @@ class FilesUtils {
|
|
|
15963
16048
|
return $progress.asObservable();
|
|
15964
16049
|
}
|
|
15965
16050
|
}
|
|
16051
|
+
FilesUtils.UTF8_BOM_CHAR = new Uint8Array([0xEF, 0xBB, 0xBF]); // UTF-8 BOM
|
|
16052
|
+
|
|
15966
16053
|
class UriUtils {
|
|
15967
16054
|
/**
|
|
15968
16055
|
* Extract the filename, from an uri (using the last slash)
|
|
@@ -18081,6 +18168,91 @@ class JobUtils {
|
|
|
18081
18168
|
}
|
|
18082
18169
|
}
|
|
18083
18170
|
|
|
18171
|
+
//@dynamic
|
|
18172
|
+
class CsvUtils {
|
|
18173
|
+
static exportToFile(rows, opts) {
|
|
18174
|
+
if (!rows || !rows.length)
|
|
18175
|
+
return; // Skip if empty
|
|
18176
|
+
const filename = (opts === null || opts === void 0 ? void 0 : opts.filename) || 'export.csv';
|
|
18177
|
+
const charset = ((opts === null || opts === void 0 ? void 0 : opts.encoding) || 'utf-8').toLowerCase();
|
|
18178
|
+
const separator = (opts === null || opts === void 0 ? void 0 : opts.separator) || ',';
|
|
18179
|
+
const protectCellRegexp = new RegExp("/(\"|" + separator + "|\n)/g");
|
|
18180
|
+
const keys = Object.keys(rows[0]);
|
|
18181
|
+
const headers = (opts === null || opts === void 0 ? void 0 : opts.headers) || keys;
|
|
18182
|
+
const csvContent =
|
|
18183
|
+
// Header row
|
|
18184
|
+
headers.join(separator) + '\n' +
|
|
18185
|
+
// Data rows
|
|
18186
|
+
rows.map(row => {
|
|
18187
|
+
return keys.map(k => {
|
|
18188
|
+
const cell = row[k] === null || row[k] === undefined ? '' : row[k];
|
|
18189
|
+
let cellStr = cell instanceof Date
|
|
18190
|
+
? cell.toLocaleString()
|
|
18191
|
+
: cell.toString().replace(/"/g, '""');
|
|
18192
|
+
if (protectCellRegexp.test(cellStr)) {
|
|
18193
|
+
cellStr = `"${cellStr}"`;
|
|
18194
|
+
}
|
|
18195
|
+
return cellStr;
|
|
18196
|
+
}).join(separator);
|
|
18197
|
+
}).join('\n');
|
|
18198
|
+
const blob = new Blob((charset === 'utf-8')
|
|
18199
|
+
// Add UTF-8 BOM character
|
|
18200
|
+
? [FilesUtils.UTF8_BOM_CHAR, csvContent]
|
|
18201
|
+
// Non UTF-8 charset
|
|
18202
|
+
: [csvContent], { type: `text/csv;charset=${charset};` });
|
|
18203
|
+
if (navigator.msSaveBlob) { // IE 10+
|
|
18204
|
+
navigator.msSaveBlob(blob, filename);
|
|
18205
|
+
}
|
|
18206
|
+
else {
|
|
18207
|
+
const link = document.createElement('a');
|
|
18208
|
+
if (link.download !== undefined) {
|
|
18209
|
+
// Browsers that support HTML5 download attribute
|
|
18210
|
+
const url = URL.createObjectURL(blob);
|
|
18211
|
+
link.setAttribute('href', url);
|
|
18212
|
+
link.setAttribute('download', filename);
|
|
18213
|
+
link.style.visibility = 'hidden';
|
|
18214
|
+
document.body.appendChild(link);
|
|
18215
|
+
link.click();
|
|
18216
|
+
document.body.removeChild(link);
|
|
18217
|
+
}
|
|
18218
|
+
}
|
|
18219
|
+
}
|
|
18220
|
+
static parseFile(file, opts) {
|
|
18221
|
+
return FilesUtils.readAsText(file, opts === null || opts === void 0 ? void 0 : opts.encoding)
|
|
18222
|
+
.pipe(map(e => {
|
|
18223
|
+
if (e.type === HttpEventType.UploadProgress) {
|
|
18224
|
+
const loaded = Math.round(e.loaded * 0.8);
|
|
18225
|
+
return Object.assign(Object.assign({}, e), { loaded });
|
|
18226
|
+
}
|
|
18227
|
+
else if (e instanceof FileResponse) {
|
|
18228
|
+
const body = e.body;
|
|
18229
|
+
const data = CsvUtils.parseCSV(body, opts);
|
|
18230
|
+
return new FileResponse({ body: data });
|
|
18231
|
+
}
|
|
18232
|
+
}), filter(isNotNil));
|
|
18233
|
+
}
|
|
18234
|
+
static parseCSV(body, opts) {
|
|
18235
|
+
const separator = (opts === null || opts === void 0 ? void 0 : opts.separator) || ',';
|
|
18236
|
+
const skipEmptyLine = !opts || opts.skipEmptyLine !== false;
|
|
18237
|
+
// Protect special characters (quote and /n)
|
|
18238
|
+
body = body.replace('""', '<quote>') // Protect double quote
|
|
18239
|
+
.replace(/("[^\n"]+)\n\r?/gm, '"$1<br>') // Protect \n inside a quoted expression
|
|
18240
|
+
.replace(/\n\r/gm, '\n'); // Windows CR
|
|
18241
|
+
const headerAndRows = body.split('\n', 2);
|
|
18242
|
+
const headers = headerAndRows[0].split(separator);
|
|
18243
|
+
return body.split('\n') // split into rows
|
|
18244
|
+
.filter(line => !skipEmptyLine || line.trim().length > 0) // Skip empty line
|
|
18245
|
+
.map(line => {
|
|
18246
|
+
const cells = line.split(separator, headers.length) // split into cells
|
|
18247
|
+
.map(cell => cell.replace(/^"([^"]*)"$/, '$1')) // Clean trailing quotes
|
|
18248
|
+
.map(cell => cell.replace('<quote>', '"')) // restore protected quote
|
|
18249
|
+
.map(cell => cell.replace('<br>', '\n')) // restore protected br
|
|
18250
|
+
;
|
|
18251
|
+
return cells;
|
|
18252
|
+
});
|
|
18253
|
+
}
|
|
18254
|
+
}
|
|
18255
|
+
|
|
18084
18256
|
/**
|
|
18085
18257
|
* Define here theme colors
|
|
18086
18258
|
*/
|
|
@@ -27792,5 +27964,5 @@ CoreTestingModule.decorators = [
|
|
|
27792
27964
|
* Generated bundle index. Do not edit.
|
|
27793
27965
|
*/
|
|
27794
27966
|
|
|
27795
|
-
export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_TESTING_PAGES, AboutModal, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AndroidOsEnvironment, AnimationState, AppEditor, AppEditorOptions, AppEntityEditor, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppTabEditor, AppTabEditorOptions, AppTable, AppTableDataSourceOptions, AppTableUtils, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AuthForm, AuthGuardService, AuthModal, AutocompleteTestPage, AutofocusDirective, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CellValueChangeListener, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigService, Configuration, CoreModule, CoreTestingModule, CryptoService, DATE_ISO_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_MENU_SHOW_WHEN, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFromNowPipe, DateTimeTestPage, DateUtils, Department, DepartmentToStringPipe, DragAndDropDirective, DurationPipe, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesService, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, EvenPipe, FileResponse, FileService, FileSizePipe, FilesUtils, FormArrayHelper, FormButtonsBarComponent, FormButtonsBarToken, FormErrorTranslatePipe, FormErrorTranslator, FormFieldValuesHolder, FormGetArrayPipe, FormGetControlPipe, FormGetGroupPipe, FormGetPipe, FormGetValuePipe, Fragments$1 as Fragments, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, InMemoryEntitiesService, IsLoginAccountPipe, IsNilOrBlankPipe, IsNotNilOrBlankPipe, IsNotOnFieldModePipe, IsOnFieldModePipe, JobUtils, KEYBOARD_HIDE_DELAY_MS, LAT_LONG_DEFAULT_MAX_DECIMALS, LAT_LONG_PATTERNS, LatLongFormatPipe, LatLongTestPage, LatitudeFormatPipe, LocalSettingsService, LongitudeFormatPipe, MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD, MapGetPipe, MapKeysPipe, MapValuesPipe, MatAutocompleteConfigHolder, MatAutocompleteField, MatBadgeIconDirective, MatBooleanField, MatChipsField, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatNumpadComponent, MatNumpadContainerComponent, MatNumpadContent, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialTestingModule, MathAbsPipe, MenuComponent, MenuItems, MenuService, Message, MessageFilter, MessageForm, MessageModal, MessageService, MessageTypeList, MessageTypes, MimeTypes, ModalToolbarComponent, NetworkService, NgInitDirective, NgVarDirective, NotEmptyArrayPipe, NumberFormatPipe, NumpadDirective, OddPipe, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, ProgressBarService, ProgressInterceptor, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialFilter, ReferentialRef, ReferentialUtils, ReferentialValidatorService, RegisterConfirmPage, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SHARED_MATERIAL_TESTING_PAGES, SHARED_TESTING_PAGES, SPACE_PLACEHOLDER_CHAR, SelectPeerModal, SettingsPage, SharedAsyncValidators, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMatAutocompleteModule, SharedMatBadgeIconModule, SharedMatBooleanModule, SharedMatChipsModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatNumpadModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedTestsPage, SharedValidators, SocialErrorCodes, SocialModule, Software, StartableService, StatusById, StatusIds, StatusList, StrIncludesPipe, StrLengthPipe, SwipeTestPage, TableSelectColumnsComponent, TableTestPage, TableTestingModule, TextForm, TextPopover, TextPopoverTestingModule, TextPopoverTestingPage, ToStringPipe, Toasts, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, UploadFile, UploadFileComponent, UploadFilePopover, UploadFileTestingModule, UploadFileTestingPage, UriUtils, UserEvent, UserEventFilter, UserEventFragments, UserEventService, UserEventTypes, UserEventsTable, UserSettings, UsersPage, accountToString, adaptValueToControl, addValueInArray, arrayDistinct, arrayGroupBy, arraySize, asInputElement, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, copyEntity2Form, createPromiseEvent, createPromiseEventEmitter, departmentToString, departmentsToString, disableControls, emitPromiseEvent, entityToString, equals, equalsOrNil, escapeRegExp, fadeInAnimation, fadeInOutAnimation, filterFalse, filterNotNil, filterNumberInput, filterTrue, firstArrayValue, firstFalse, firstFalsePromise, firstNotNil, firstNotNilPromise, firstTrue, firstTruePromise, focusInput, focusNextInput, focusPreviousInput, formatLatitude, formatLongitude, fromDateISOString, fromScrollEndEvent, fromUnixMsTimestamp, fromUnixTimestamp, getCaretPosition, getColorContrast, getColorShade, getColorTint, getConnectionType, getControlFromPath, getFocusableInputElements, getFormErrors, getFormValueFromEntity, getProperty, getPropertyByPath, getPropertyByPathAsString, getRandomImage, hexToRgb, hexToRgbArray, isAndroid, isBlankString, isControlHasInput, isCordova, isEmptyArray, isIOS, isInputElement, isInstanceOf, isInt, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilBoolean, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isProgressEvent, isResponseEvent, isTouchUi, isWindows, joinProperties, joinPropertiesPath, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, matchMedia, matchUpperCase, mergeLoadResult, mixHex, moment$5 as moment, moveInputCaretToSeparator, noTrailingSlash, notNilOrDefault, nullIfUndefined, parseLatitudeOrLongitude, propertiesPathComparator, propertyComparator, propertyPathComparator, referentialToString, referentialsToString, remove, removeAll, removeDiacritics, removeDuplicatesFromArray, removeEnd, removeValueInArray, replaceAll, resetCalculatedValue, resizeArray, rgbArrayToHex, rgbToHex, round, scrollFactory, selectInputContent, selectInputRange, setCalculatedValue, setTabIndex, sleep, slideInOutAnimation, slideUpDownAnimation, sort, splitById, splitByProperty, startsWithUpperCase, suggestFromArray, suggestFromStringArray, tabindexComparator, testUserAgent, toBoolean, toDateISOString, toDuration, toFloat, toInt, toNotNil, toNumber, trimEmptyToNull, tz, uncapitalizeFirstLetter, updateValueAndValidity, waitFor, waitForTrue, waitIdle, waitWhilePending, ɵ0, CustomReuseStrategy as ɵa, MatNumpadDomService as ɵb, isFocusableElement as ɵc, RegisterForm as ɵd, AccountValidatorService as ɵe, RegisterModal as ɵf, UserSettingsValidatorService as ɵg, LocalSettingsValidatorService as ɵh, AppUpdateOfflineModeCard as ɵi, AppIconComponent as ɵj, DateTestPage as ɵk, NumpadTestPage as ɵl, MatBadgeIconTestPage as ɵm, ToastTestingModule as ɵn, ToastTestingPage as ɵo };
|
|
27967
|
+
export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_TESTING_PAGES, AboutModal, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AndroidOsEnvironment, AnimationState, AppEditor, AppEditorOptions, AppEntityEditor, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppTabEditor, AppTabEditorOptions, AppTable, AppTableDataSourceOptions, AppTableUtils, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AuthForm, AuthGuardService, AuthModal, AutoTitleDirective, AutocompleteTestPage, AutofocusDirective, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CellValueChangeListener, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigService, Configuration, CoreModule, CoreTestingModule, CryptoService, CsvUtils, DATE_ISO_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_MENU_SHOW_WHEN, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFromNowPipe, DateTimeTestPage, DateUtils, Department, DepartmentToStringPipe, DragAndDropDirective, DurationPipe, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesService, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, EvenPipe, FileResponse, FileService, FileSizePipe, FilesUtils, FormArrayHelper, FormButtonsBarComponent, FormButtonsBarToken, FormErrorTranslatePipe, FormErrorTranslator, FormFieldValuesHolder, FormGetArrayPipe, FormGetControlPipe, FormGetGroupPipe, FormGetPipe, FormGetValuePipe, Fragments$1 as Fragments, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, InMemoryEntitiesService, IsLoginAccountPipe, IsNilOrBlankPipe, IsNotNilOrBlankPipe, IsNotOnFieldModePipe, IsOnFieldModePipe, JobUtils, KEYBOARD_HIDE_DELAY_MS, LAT_LONG_DEFAULT_MAX_DECIMALS, LAT_LONG_PATTERNS, LatLongFormatPipe, LatLongTestPage, LatitudeFormatPipe, LocalSettingsService, LongitudeFormatPipe, MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD, MapGetPipe, MapKeysPipe, MapValuesPipe, MatAutocompleteConfigHolder, MatAutocompleteField, MatBadgeIconDirective, MatBooleanField, MatChipsField, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatNumpadComponent, MatNumpadContainerComponent, MatNumpadContent, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialTestingModule, MathAbsPipe, MenuComponent, MenuItems, MenuService, Message, MessageFilter, MessageForm, MessageModal, MessageService, MessageTypeList, MessageTypes, MimeTypes, ModalToolbarComponent, NetworkService, NgInitDirective, NgVarDirective, NotEmptyArrayPipe, NumberFormatPipe, NumpadDirective, OddPipe, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, ProgressBarService, ProgressInterceptor, PropertyFormatPipe, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialFilter, ReferentialRef, ReferentialUtils, ReferentialValidatorService, RegisterConfirmPage, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SHARED_MATERIAL_TESTING_PAGES, SHARED_TESTING_PAGES, SPACE_PLACEHOLDER_CHAR, SelectPeerModal, SettingsPage, SharedAsyncValidators, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMatAutocompleteModule, SharedMatBadgeIconModule, SharedMatBooleanModule, SharedMatChipsModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatNumpadModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedTestsPage, SharedValidators, SocialErrorCodes, SocialModule, Software, StartableService, StatusById, StatusIds, StatusList, StrIncludesPipe, StrLengthPipe, SwipeTestPage, TableSelectColumnsComponent, TableTestPage, TableTestingModule, TextForm, TextPopover, TextPopoverTestingModule, TextPopoverTestingPage, ToStringPipe, Toasts, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, UploadFile, UploadFileComponent, UploadFilePopover, UploadFileTestingModule, UploadFileTestingPage, UriUtils, UserEvent, UserEventFilter, UserEventFragments, UserEventService, UserEventTypes, UserEventsTable, UserSettings, UsersPage, accountToString, adaptValueToControl, addValueInArray, arrayDistinct, arrayGroupBy, arraySize, asInputElement, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, copyEntity2Form, createPromiseEvent, createPromiseEventEmitter, departmentToString, departmentsToString, disableControls, emitPromiseEvent, entityToString, equals, equalsOrNil, escapeRegExp, fadeInAnimation, fadeInOutAnimation, filterFalse, filterNotNil, filterNumberInput, filterTrue, firstArrayValue, firstFalse, firstFalsePromise, firstNotNil, firstNotNilPromise, firstTrue, firstTruePromise, focusInput, focusNextInput, focusPreviousInput, formatLatitude, formatLongitude, fromDateISOString, fromScrollEndEvent, fromUnixMsTimestamp, fromUnixTimestamp, getCaretPosition, getColorContrast, getColorShade, getColorTint, getConnectionType, getControlFromPath, getFocusableInputElements, getFormErrors, getFormValueFromEntity, getProperty, getPropertyByPath, getPropertyByPathAsString, getRandomImage, hexToRgb, hexToRgbArray, isAndroid, isBlankString, isControlHasInput, isCordova, isEmptyArray, isIOS, isInputElement, isInstanceOf, isInt, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilBoolean, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isProgressEvent, isResponseEvent, isTouchUi, isWindows, joinProperties, joinPropertiesPath, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, matchMedia, matchUpperCase, mergeLoadResult, mixHex, moment$5 as moment, moveInputCaretToSeparator, noTrailingSlash, notNilOrDefault, nullIfUndefined, parseLatitudeOrLongitude, propertiesPathComparator, propertyComparator, propertyPathComparator, referentialToString, referentialsToString, remove, removeAll, removeDiacritics, removeDuplicatesFromArray, removeEnd, removeValueInArray, replaceAll, resetCalculatedValue, resizeArray, rgbArrayToHex, rgbToHex, round, scrollFactory, selectInputContent, selectInputRange, setCalculatedValue, setTabIndex, sleep, slideInOutAnimation, slideUpDownAnimation, sort, splitById, splitByProperty, startsWithUpperCase, suggestFromArray, suggestFromStringArray, tabindexComparator, testUserAgent, toBoolean, toDateISOString, toDuration, toFloat, toInt, toNotNil, toNumber, trimEmptyToNull, tz, uncapitalizeFirstLetter, updateValueAndValidity, waitFor, waitForTrue, waitIdle, waitWhilePending, ɵ0, CustomReuseStrategy as ɵa, MatNumpadDomService as ɵb, isFocusableElement as ɵc, RegisterForm as ɵd, AccountValidatorService as ɵe, RegisterModal as ɵf, UserSettingsValidatorService as ɵg, LocalSettingsValidatorService as ɵh, AppUpdateOfflineModeCard as ɵi, AppIconComponent as ɵj, DateTestPage as ɵk, NumpadTestPage as ɵl, MatBadgeIconTestPage as ɵm, ToastTestingModule as ɵn, ToastTestingPage as ɵo };
|
|
27796
27968
|
//# sourceMappingURL=sumaris-net.ngx-components.js.map
|