@dealpos-npm/ng-dealpos-library 3.3.0 → 3.4.0
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/components/uppy-file-upload/src/uppy.component.d.ts +3 -0
- package/esm2022/components/uppy-file-upload/src/uppy.component.mjs +12 -3
- package/esm2022/services/csv-parser/dealpos-npm-ng-dealpos-library-services-csv-parser.mjs +5 -0
- package/esm2022/services/csv-parser/public-api.mjs +2 -0
- package/esm2022/services/csv-parser/src/convert-csv.service.mjs +65 -0
- package/fesm2022/dealpos-npm-ng-dealpos-library-components-uppy-file-upload.mjs +11 -2
- package/fesm2022/dealpos-npm-ng-dealpos-library-components-uppy-file-upload.mjs.map +1 -1
- package/fesm2022/dealpos-npm-ng-dealpos-library-services-csv-parser.mjs +72 -0
- package/fesm2022/dealpos-npm-ng-dealpos-library-services-csv-parser.mjs.map +1 -0
- package/package.json +42 -36
- package/services/csv-parser/index.d.ts +5 -0
- package/services/csv-parser/public-api.d.ts +1 -0
- package/services/csv-parser/src/convert-csv.service.d.ts +14 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { ConvertCsvService } from '@dealpos-npm/ng-dealpos-library/services/csv-parser';
|
|
2
3
|
import { HttpService } from '@dealpos-npm/ng-dealpos-library/services/http';
|
|
3
4
|
import { Uppy } from '@uppy/core';
|
|
4
5
|
import '@uppy/core/dist/style.min.css';
|
|
@@ -12,6 +13,8 @@ export declare class UppyComponent {
|
|
|
12
13
|
fileUploaded: EventEmitter<Blob | File>;
|
|
13
14
|
fileRemoved: EventEmitter<void>;
|
|
14
15
|
http: HttpService;
|
|
16
|
+
csvParser: ConvertCsvService;
|
|
17
|
+
message: string;
|
|
15
18
|
uppy: Uppy;
|
|
16
19
|
dashboardProps: {
|
|
17
20
|
hideUploadButton: boolean;
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
|
2
2
|
import { Component, effect, EventEmitter, inject, input, Input, Output } from '@angular/core';
|
|
3
|
+
import { Constants } from '@dealpos-npm/ng-dealpos-library/constants';
|
|
4
|
+
import { ConvertCsvService } from '@dealpos-npm/ng-dealpos-library/services/csv-parser';
|
|
3
5
|
import { HttpService } from '@dealpos-npm/ng-dealpos-library/services/http';
|
|
4
6
|
import { UppyAngularDashboardModule } from '@uppy/angular';
|
|
5
7
|
import { Uppy } from '@uppy/core';
|
|
6
8
|
import '@uppy/core/dist/style.min.css';
|
|
7
9
|
import '@uppy/dashboard/dist/style.min.css';
|
|
10
|
+
import { map } from 'rxjs';
|
|
8
11
|
import * as i0 from "@angular/core";
|
|
9
12
|
import * as i1 from "@uppy/angular";
|
|
10
13
|
import * as i2 from "@angular/common";
|
|
@@ -17,6 +20,8 @@ export class UppyComponent {
|
|
|
17
20
|
this.fileUploaded = new EventEmitter();
|
|
18
21
|
this.fileRemoved = new EventEmitter();
|
|
19
22
|
this.http = inject(HttpService);
|
|
23
|
+
this.csvParser = inject(ConvertCsvService);
|
|
24
|
+
this.message = '';
|
|
20
25
|
this.uppy = new Uppy({
|
|
21
26
|
debug: true,
|
|
22
27
|
autoProceed: true,
|
|
@@ -36,6 +41,10 @@ export class UppyComponent {
|
|
|
36
41
|
this.uppy.on('upload', (_, uppyFiles) => {
|
|
37
42
|
const file = uppyFiles[0]?.data;
|
|
38
43
|
this.showSample = false;
|
|
44
|
+
const fileExtension = file.name.split(".").pop();
|
|
45
|
+
if (fileExtension == '.csv') {
|
|
46
|
+
this.csvParser.convertFile(file).pipe(map(arr => `${arr.length} rows found - ${arr.filter((r) => Constants.IsEmpty(r)).length} empty in the CSV you uploaded (${file.size / 1000000} MB)`)).subscribe(msg => this.message = msg);
|
|
47
|
+
}
|
|
39
48
|
this.fileUploaded.emit(file);
|
|
40
49
|
});
|
|
41
50
|
this.uppy.on('file-removed', () => {
|
|
@@ -44,11 +53,11 @@ export class UppyComponent {
|
|
|
44
53
|
});
|
|
45
54
|
}
|
|
46
55
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: UppyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
47
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: UppyComponent, isStandalone: true, selector: "POS-uppy", inputs: { sampleUrl: { classPropertyName: "sampleUrl", publicName: "sampleUrl", isSignal: false, isRequired: false, transformFunction: null }, uppyCoreConfiguration: { classPropertyName: "uppyCoreConfiguration", publicName: "uppyCoreConfiguration", isSignal: true, isRequired: false, transformFunction: null }, dashboardPropsConfiguration: { classPropertyName: "dashboardPropsConfiguration", publicName: "dashboardPropsConfiguration", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { fileUploaded: "fileUploaded", fileRemoved: "fileRemoved" }, ngImport: i0, template: "<div class=\"position-relative\">\r\n <uppy-dashboard [uppy]=\"uppy\" [props]=\"dashboardProps\"> </uppy-dashboard>\r\n <a *ngIf=\"sampleUrl && showSample\" class=\"sample position-absolute\" role=\"button\" [href]=\"sampleUrl\">\r\n <i class=\"fa-solid fa-download ms-3\"></i> Download Template\r\n </a>\r\n</div>", styles: ["::ng-deep .uppy-Dashboard-AddFiles-info{display:none!important}.sample{top:53%;left:calc(50% - 63.5px)}\n"], dependencies: [{ kind: "ngmodule", type: UppyAngularDashboardModule }, { kind: "component", type: i1.DashboardComponent, selector: "uppy-dashboard", inputs: ["uppy", "props"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
56
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: UppyComponent, isStandalone: true, selector: "POS-uppy", inputs: { sampleUrl: { classPropertyName: "sampleUrl", publicName: "sampleUrl", isSignal: false, isRequired: false, transformFunction: null }, uppyCoreConfiguration: { classPropertyName: "uppyCoreConfiguration", publicName: "uppyCoreConfiguration", isSignal: true, isRequired: false, transformFunction: null }, dashboardPropsConfiguration: { classPropertyName: "dashboardPropsConfiguration", publicName: "dashboardPropsConfiguration", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { fileUploaded: "fileUploaded", fileRemoved: "fileRemoved" }, ngImport: i0, template: "<div class=\"position-relative\">\r\n <uppy-dashboard [uppy]=\"uppy\" [props]=\"dashboardProps\"> </uppy-dashboard>\r\n <small class=\"text-primary fst-italic\" *ngIf=\"message\">{{message}}</small>\r\n <a *ngIf=\"sampleUrl && showSample\" class=\"sample position-absolute\" role=\"button\" [href]=\"sampleUrl\">\r\n <i class=\"fa-solid fa-download ms-3\"></i> Download Template\r\n </a>\r\n</div>", styles: ["::ng-deep .uppy-Dashboard-AddFiles-info{display:none!important}.sample{top:53%;left:calc(50% - 63.5px)}\n"], dependencies: [{ kind: "ngmodule", type: UppyAngularDashboardModule }, { kind: "component", type: i1.DashboardComponent, selector: "uppy-dashboard", inputs: ["uppy", "props"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
48
57
|
}
|
|
49
58
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: UppyComponent, decorators: [{
|
|
50
59
|
type: Component,
|
|
51
|
-
args: [{ selector: 'POS-uppy', standalone: true, imports: [UppyAngularDashboardModule, CommonModule], template: "<div class=\"position-relative\">\r\n <uppy-dashboard [uppy]=\"uppy\" [props]=\"dashboardProps\"> </uppy-dashboard>\r\n <a *ngIf=\"sampleUrl && showSample\" class=\"sample position-absolute\" role=\"button\" [href]=\"sampleUrl\">\r\n <i class=\"fa-solid fa-download ms-3\"></i> Download Template\r\n </a>\r\n</div>", styles: ["::ng-deep .uppy-Dashboard-AddFiles-info{display:none!important}.sample{top:53%;left:calc(50% - 63.5px)}\n"] }]
|
|
60
|
+
args: [{ selector: 'POS-uppy', standalone: true, imports: [UppyAngularDashboardModule, CommonModule], template: "<div class=\"position-relative\">\r\n <uppy-dashboard [uppy]=\"uppy\" [props]=\"dashboardProps\"> </uppy-dashboard>\r\n <small class=\"text-primary fst-italic\" *ngIf=\"message\">{{message}}</small>\r\n <a *ngIf=\"sampleUrl && showSample\" class=\"sample position-absolute\" role=\"button\" [href]=\"sampleUrl\">\r\n <i class=\"fa-solid fa-download ms-3\"></i> Download Template\r\n </a>\r\n</div>", styles: ["::ng-deep .uppy-Dashboard-AddFiles-info{display:none!important}.sample{top:53%;left:calc(50% - 63.5px)}\n"] }]
|
|
52
61
|
}], ctorParameters: () => [], propDecorators: { sampleUrl: [{
|
|
53
62
|
type: Input
|
|
54
63
|
}], fileUploaded: [{
|
|
@@ -56,4 +65,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
|
|
|
56
65
|
}], fileRemoved: [{
|
|
57
66
|
type: Output
|
|
58
67
|
}] } });
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBweS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZWFscG9zLW5wbS9uZy1kZWFscG9zLWxpYnJhcnkvY29tcG9uZW50cy91cHB5LWZpbGUtdXBsb2FkL3NyYy91cHB5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RlYWxwb3MtbnBtL25nLWRlYWxwb3MtbGlicmFyeS9jb21wb25lbnRzL3VwcHktZmlsZS11cGxvYWQvc3JjL3VwcHkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNsQyxPQUFPLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sb0NBQW9DLENBQUM7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBYSxNQUFNLE1BQU0sQ0FBQzs7OztBQVN0QyxNQUFNLE9BQU8sYUFBYTtJQTZCeEI7UUE1QlMsY0FBUyxHQUFXLEVBQUUsQ0FBQTtRQUMvQixlQUFVLEdBQVksSUFBSSxDQUFBO1FBQzFCLDBCQUFxQixHQUFHLEtBQUssRUFBTyxDQUFDO1FBQ3JDLGdDQUEyQixHQUFHLEtBQUssRUFB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WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIGVmZmVjdCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIGlucHV0LCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJ0BkZWFscG9zLW5wbS9uZy1kZWFscG9zLWxpYnJhcnkvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgQ29udmVydENzdlNlcnZpY2UgfSBmcm9tICdAZGVhbHBvcy1ucG0vbmctZGVhbHBvcy1saWJyYXJ5L3NlcnZpY2VzL2Nzdi1wYXJzZXInO1xyXG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJ0BkZWFscG9zLW5wbS9uZy1kZWFscG9zLWxpYnJhcnkvc2VydmljZXMvaHR0cCc7XHJcbmltcG9ydCB7IFVwcHlBbmd1bGFyRGFzaGJvYXJkTW9kdWxlIH0gZnJvbSAnQHVwcHkvYW5ndWxhcic7XHJcbmltcG9ydCB7IFVwcHkgfSBmcm9tICdAdXBweS9jb3JlJztcclxuaW1wb3J0ICdAdXBweS9jb3JlL2Rpc3Qvc3R5bGUubWluLmNzcyc7XHJcbmltcG9ydCAnQHVwcHkvZGFzaGJvYXJkL2Rpc3Qvc3R5bGUubWluLmNzcyc7XHJcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ1BPUy11cHB5JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtVcHB5QW5ndWxhckRhc2hib2FyZE1vZHVsZSwgQ29tbW9uTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXBweS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3VwcHkuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVcHB5Q29tcG9uZW50IHtcclxuICBASW5wdXQoKSBzYW1wbGVVcmw6IHN0cmluZyA9ICcnXHJcbiAgc2hvd1NhbXBsZTogYm9vbGVhbiA9IHRydWVcclxuICB1cHB5Q29yZUNvbmZpZ3VyYXRpb24gPSBpbnB1dDxhbnk+KCk7XHJcbiAgZGFzaGJvYXJkUHJvcHNDb25maWd1cmF0aW9uID0gaW5wdXQ8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBmaWxlVXBsb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEJsb2IgfCBGaWxlPigpXHJcbiAgQE91dHB1dCgpIGZpbGVSZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpXHJcblxyXG4gIGh0dHAgPSBpbmplY3QoSHR0cFNlcnZpY2UpXHJcbiAgY3N2UGFyc2VyID0gaW5qZWN0KENvbnZlcnRDc3ZTZXJ2aWNlKVxyXG5cclxuICBtZXNzYWdlOiBzdHJpbmcgPSAnJ1xyXG5cclxuICB1cHB5OiBVcHB5ID0gbmV3IFVwcHkoeyBcclxuICAgIGRlYnVnOiB0cnVlLCBcclxuICAgIGF1dG9Qcm9jZWVkOiB0cnVlLCBcclxuICAgIGFsbG93TXVsdGlwbGVVcGxvYWRCYXRjaGVzOiBmYWxzZSxcclxuICAgIHJlc3RyaWN0aW9uczoge1xyXG4gICAgICBhbGxvd2VkRmlsZVR5cGVzOiBbJy5jc3YnXSxcclxuICAgICAgbWF4VG90YWxGaWxlU2l6ZTogMTAwMDAwMFxyXG4gICAgfVxyXG4gIH0pO1xyXG4gIFxyXG4gIGRhc2hib2FyZFByb3BzID0ge1xyXG4gICAgaGlkZVVwbG9hZEJ1dHRvbjogdHJ1ZSxcclxuICAgIHdpZHRoOiA1ODAsXHJcbiAgICBoZWlnaHQ6IDM1MFxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy51cHB5LnNldE9wdGlvbnMoey4uLnRoaXMudXBweUNvcmVDb25maWd1cmF0aW9uKCl9KSlcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLmRhc2hib2FyZFByb3BzID0gKHsuLi50aGlzLmRhc2hib2FyZFByb3BzLCAuLi50aGlzLmRhc2hib2FyZFByb3BzQ29uZmlndXJhdGlvbigpfSkpXHJcblxyXG4gICAgdGhpcy51cHB5Lm9uKCd1cGxvYWQnLCAoXywgdXBweUZpbGVzKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSB1cHB5RmlsZXNbMF0/LmRhdGEgYXMgRmlsZVxyXG4gICAgICB0aGlzLnNob3dTYW1wbGUgPSBmYWxzZVxyXG5cclxuICAgICAgY29uc3QgZmlsZUV4dGVuc2lvbiA9IGZpbGUubmFtZS5zcGxpdChcIi5cIikucG9wKClcclxuICAgICAgaWYgKGZpbGVFeHRlbnNpb24gPT0gJy5jc3YnKSB7XHJcbiAgICAgICAgdGhpcy5jc3ZQYXJzZXIuY29udmVydEZpbGUoZmlsZSkucGlwZShcclxuICAgICAgICAgIG1hcChhcnIgPT4gYCR7YXJyLmxlbmd0aH0gcm93cyBmb3VuZCAtICR7YXJyLmZpbHRlcigocjogYW55KSA9PiBDb25zdGFudHMuSXNFbXB0eShyKSkubGVuZ3RofSBlbXB0eSBpbiB0aGUgQ1NWIHlvdSB1cGxvYWRlZCAoJHtmaWxlLnNpemUgLyAxMDAwMDAwfSBNQilgKVxyXG4gICAgICAgICkuc3Vic2NyaWJlKG1zZyA9PiB0aGlzLm1lc3NhZ2UgPSBtc2cpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZmlsZVVwbG9hZGVkLmVtaXQoZmlsZSlcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy51cHB5Lm9uKCdmaWxlLXJlbW92ZWQnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2hvd1NhbXBsZSA9IHRydWVcclxuICAgICAgdGhpcy5maWxlUmVtb3ZlZC5lbWl0KClcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgIDx1cHB5LWRhc2hib2FyZCBbdXBweV09XCJ1cHB5XCIgW3Byb3BzXT1cImRhc2hib2FyZFByb3BzXCI+IDwvdXBweS1kYXNoYm9hcmQ+XHJcbiAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZnN0LWl0YWxpY1wiICpuZ0lmPVwibWVzc2FnZVwiPnt7bWVzc2FnZX19PC9zbWFsbD5cclxuICAgIDxhICpuZ0lmPVwic2FtcGxlVXJsICYmIHNob3dTYW1wbGVcIiBjbGFzcz1cInNhbXBsZSBwb3NpdGlvbi1hYnNvbHV0ZVwiIHJvbGU9XCJidXR0b25cIiBbaHJlZl09XCJzYW1wbGVVcmxcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWRvd25sb2FkIG1zLTNcIj48L2k+IERvd25sb2FkIFRlbXBsYXRlXHJcbiAgICA8L2E+XHJcbjwvZGl2PiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVhbHBvcy1ucG0tbmctZGVhbHBvcy1saWJyYXJ5LXNlcnZpY2VzLWNzdi1wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZWFscG9zLW5wbS9uZy1kZWFscG9zLWxpYnJhcnkvc2VydmljZXMvY3N2LXBhcnNlci9kZWFscG9zLW5wbS1uZy1kZWFscG9zLWxpYnJhcnktc2VydmljZXMtY3N2LXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from "./src/convert-csv.service";
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RlYWxwb3MtbnBtL25nLWRlYWxwb3MtbGlicmFyeS9zZXJ2aWNlcy9jc3YtcGFyc2VyL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywyQkFBMkIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL3NyYy9jb252ZXJ0LWNzdi5zZXJ2aWNlXCIiXX0=
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class ConvertCsvService {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.subject$ = new Subject();
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Handles the file load event and converts the CSV content into an array of objects.
|
|
10
|
+
* @param fileLoadedEvent - The file load event containing the loaded file data.
|
|
11
|
+
* @returns An array of objects representing the CSV data.
|
|
12
|
+
*/
|
|
13
|
+
onFileLoad(fileLoadedEvent) {
|
|
14
|
+
const textFromFileLoaded = fileLoadedEvent.target.result;
|
|
15
|
+
let csvContent = textFromFileLoaded;
|
|
16
|
+
//Flag is for extracting first line
|
|
17
|
+
let flag = false;
|
|
18
|
+
// Main Data
|
|
19
|
+
let objarray = [];
|
|
20
|
+
//Properties
|
|
21
|
+
let prop = [];
|
|
22
|
+
//Total Length
|
|
23
|
+
let size = 0;
|
|
24
|
+
for (const line of csvContent.split(/[\r\n]+/)) {
|
|
25
|
+
if (flag) {
|
|
26
|
+
let obj = {};
|
|
27
|
+
for (let k = 0; k < size; k++) {
|
|
28
|
+
//Dynamic Object Properties
|
|
29
|
+
obj[prop[k]] = line.split(',')[k];
|
|
30
|
+
}
|
|
31
|
+
objarray.push(obj);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
//First Line of CSV will be having Properties
|
|
35
|
+
for (let k = 0; k < line.split(',').length; k++) {
|
|
36
|
+
size = line.split(',').length;
|
|
37
|
+
//Removing all the spaces to make them usefull
|
|
38
|
+
prop.push(line.split(',')[k].replace(/ /g, ''));
|
|
39
|
+
}
|
|
40
|
+
flag = true;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
objarray.splice(-1);
|
|
44
|
+
return objarray;
|
|
45
|
+
}
|
|
46
|
+
convertFile(file) {
|
|
47
|
+
const fileToRead = file;
|
|
48
|
+
const fileReader = new FileReader();
|
|
49
|
+
fileReader.onload = (fileReader) => {
|
|
50
|
+
const convertedData = this.onFileLoad(fileReader);
|
|
51
|
+
this.subject$.next(convertedData);
|
|
52
|
+
};
|
|
53
|
+
fileReader.readAsText(fileToRead, "UTF-8");
|
|
54
|
+
return this.subject$.asObservable();
|
|
55
|
+
}
|
|
56
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ConvertCsvService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
57
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ConvertCsvService, providedIn: 'root' }); }
|
|
58
|
+
}
|
|
59
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ConvertCsvService, decorators: [{
|
|
60
|
+
type: Injectable,
|
|
61
|
+
args: [{
|
|
62
|
+
providedIn: 'root'
|
|
63
|
+
}]
|
|
64
|
+
}] });
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydC1jc3Yuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RlYWxwb3MtbnBtL25nLWRlYWxwb3MtbGlicmFyeS9zZXJ2aWNlcy9jc3YtcGFyc2VyL3NyYy9jb252ZXJ0LWNzdi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFLM0MsTUFBTSxPQUFPLGlCQUFpQjtJQUg5QjtRQUlVLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0tBdURsQztJQXJEQzs7OztPQUlHO0lBQ0ssVUFBVSxDQUFDLGVBQW9CO1FBQ3JDLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDekQsSUFBSSxVQUFVLEdBQUcsa0JBQWtCLENBQUM7UUFFcEMsbUNBQW1DO1FBQ25DLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQztRQUNqQixZQUFZO1FBQ1osSUFBSSxRQUFRLEdBQWUsRUFBRSxDQUFDO1FBQzlCLFlBQVk7UUFDWixJQUFJLElBQUksR0FBZSxFQUFFLENBQUM7UUFDMUIsY0FBYztRQUNkLElBQUksSUFBSSxHQUFRLENBQUMsQ0FBQztRQUNsQixLQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUUvQyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUVULElBQUksR0FBRyxHQUFHLEVBQVMsQ0FBQztnQkFDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUM5QiwyQkFBMkI7b0JBQzNCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUNuQyxDQUFDO2dCQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFckIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLDZDQUE2QztnQkFDN0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ2hELElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztvQkFDOUIsOENBQThDO29CQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNsRCxDQUFDO2dCQUNELElBQUksR0FBRyxJQUFJLENBQUM7WUFFZCxDQUFDO1FBQ0gsQ0FBQztRQUNELFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU0sV0FBVyxDQUFDLElBQVU7UUFDM0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDcEMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ2pDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDO1FBQ0YsVUFBVSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDM0MsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RDLENBQUM7OEdBdkRVLGlCQUFpQjtrSEFBakIsaUJBQWlCLGNBRmhCLE1BQU07OzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbnZlcnRDc3ZTZXJ2aWNlIHtcclxuICBwcml2YXRlIHN1YmplY3QkID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyB0aGUgZmlsZSBsb2FkIGV2ZW50IGFuZCBjb252ZXJ0cyB0aGUgQ1NWIGNvbnRlbnQgaW50byBhbiBhcnJheSBvZiBvYmplY3RzLlxyXG4gICAqIEBwYXJhbSBmaWxlTG9hZGVkRXZlbnQgLSBUaGUgZmlsZSBsb2FkIGV2ZW50IGNvbnRhaW5pbmcgdGhlIGxvYWRlZCBmaWxlIGRhdGEuXHJcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2Ygb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIENTViBkYXRhLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgb25GaWxlTG9hZChmaWxlTG9hZGVkRXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgdGV4dEZyb21GaWxlTG9hZGVkID0gZmlsZUxvYWRlZEV2ZW50LnRhcmdldC5yZXN1bHQ7XHJcbiAgICBsZXQgY3N2Q29udGVudCA9IHRleHRGcm9tRmlsZUxvYWRlZDtcclxuXHJcbiAgICAvL0ZsYWcgaXMgZm9yIGV4dHJhY3RpbmcgZmlyc3QgbGluZVxyXG4gICAgbGV0IGZsYWcgPSBmYWxzZTtcclxuICAgIC8vIE1haW4gRGF0YVxyXG4gICAgbGV0IG9iamFycmF5OiBBcnJheTxhbnk+ID0gW107XHJcbiAgICAvL1Byb3BlcnRpZXNcclxuICAgIGxldCBwcm9wOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICAvL1RvdGFsIExlbmd0aFxyXG4gICAgbGV0IHNpemU6IGFueSA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgY3N2Q29udGVudC5zcGxpdCgvW1xcclxcbl0rLykpIHtcclxuXHJcbiAgICAgIGlmIChmbGFnKSB7XHJcblxyXG4gICAgICAgIGxldCBvYmogPSB7fSBhcyBhbnk7XHJcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBzaXplOyBrKyspIHtcclxuICAgICAgICAgIC8vRHluYW1pYyBPYmplY3QgUHJvcGVydGllc1xyXG4gICAgICAgICAgb2JqW3Byb3Bba11dID0gbGluZS5zcGxpdCgnLCcpW2tdXHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9iamFycmF5LnB1c2gob2JqKTtcclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy9GaXJzdCBMaW5lIG9mIENTViB3aWxsIGJlIGhhdmluZyBQcm9wZXJ0aWVzXHJcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW5lLnNwbGl0KCcsJykubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgIHNpemUgPSBsaW5lLnNwbGl0KCcsJykubGVuZ3RoO1xyXG4gICAgICAgICAgLy9SZW1vdmluZyBhbGwgdGhlIHNwYWNlcyB0byBtYWtlIHRoZW0gdXNlZnVsbFxyXG4gICAgICAgICAgcHJvcC5wdXNoKGxpbmUuc3BsaXQoJywnKVtrXS5yZXBsYWNlKC8gL2csICcnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZsYWcgPSB0cnVlO1xyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgb2JqYXJyYXkuc3BsaWNlKC0xKTtcclxuICAgIHJldHVybiBvYmphcnJheTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb252ZXJ0RmlsZShmaWxlOiBGaWxlKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IGZpbGVUb1JlYWQgPSBmaWxlO1xyXG4gICAgY29uc3QgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICBmaWxlUmVhZGVyLm9ubG9hZCA9IChmaWxlUmVhZGVyKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbnZlcnRlZERhdGEgPSB0aGlzLm9uRmlsZUxvYWQoZmlsZVJlYWRlcik7XHJcbiAgICAgIHRoaXMuc3ViamVjdCQubmV4dChjb252ZXJ0ZWREYXRhKTtcclxuICAgIH07XHJcbiAgICBmaWxlUmVhZGVyLnJlYWRBc1RleHQoZmlsZVRvUmVhZCwgXCJVVEYtOFwiKTtcclxuICAgIHJldHVybiB0aGlzLnN1YmplY3QkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -2,12 +2,15 @@ import * as i2 from '@angular/common';
|
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { input, EventEmitter, inject, effect, Component, Input, Output } from '@angular/core';
|
|
5
|
+
import { Constants } from '@dealpos-npm/ng-dealpos-library/constants';
|
|
6
|
+
import { ConvertCsvService } from '@dealpos-npm/ng-dealpos-library/services/csv-parser';
|
|
5
7
|
import { HttpService } from '@dealpos-npm/ng-dealpos-library/services/http';
|
|
6
8
|
import * as i1 from '@uppy/angular';
|
|
7
9
|
import { UppyAngularDashboardModule } from '@uppy/angular';
|
|
8
10
|
import { Uppy } from '@uppy/core';
|
|
9
11
|
import '@uppy/core/dist/style.min.css';
|
|
10
12
|
import '@uppy/dashboard/dist/style.min.css';
|
|
13
|
+
import { map } from 'rxjs';
|
|
11
14
|
|
|
12
15
|
class UppyComponent {
|
|
13
16
|
constructor() {
|
|
@@ -18,6 +21,8 @@ class UppyComponent {
|
|
|
18
21
|
this.fileUploaded = new EventEmitter();
|
|
19
22
|
this.fileRemoved = new EventEmitter();
|
|
20
23
|
this.http = inject(HttpService);
|
|
24
|
+
this.csvParser = inject(ConvertCsvService);
|
|
25
|
+
this.message = '';
|
|
21
26
|
this.uppy = new Uppy({
|
|
22
27
|
debug: true,
|
|
23
28
|
autoProceed: true,
|
|
@@ -37,6 +42,10 @@ class UppyComponent {
|
|
|
37
42
|
this.uppy.on('upload', (_, uppyFiles) => {
|
|
38
43
|
const file = uppyFiles[0]?.data;
|
|
39
44
|
this.showSample = false;
|
|
45
|
+
const fileExtension = file.name.split(".").pop();
|
|
46
|
+
if (fileExtension == '.csv') {
|
|
47
|
+
this.csvParser.convertFile(file).pipe(map(arr => `${arr.length} rows found - ${arr.filter((r) => Constants.IsEmpty(r)).length} empty in the CSV you uploaded (${file.size / 1000000} MB)`)).subscribe(msg => this.message = msg);
|
|
48
|
+
}
|
|
40
49
|
this.fileUploaded.emit(file);
|
|
41
50
|
});
|
|
42
51
|
this.uppy.on('file-removed', () => {
|
|
@@ -45,11 +54,11 @@ class UppyComponent {
|
|
|
45
54
|
});
|
|
46
55
|
}
|
|
47
56
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: UppyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
48
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: UppyComponent, isStandalone: true, selector: "POS-uppy", inputs: { sampleUrl: { classPropertyName: "sampleUrl", publicName: "sampleUrl", isSignal: false, isRequired: false, transformFunction: null }, uppyCoreConfiguration: { classPropertyName: "uppyCoreConfiguration", publicName: "uppyCoreConfiguration", isSignal: true, isRequired: false, transformFunction: null }, dashboardPropsConfiguration: { classPropertyName: "dashboardPropsConfiguration", publicName: "dashboardPropsConfiguration", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { fileUploaded: "fileUploaded", fileRemoved: "fileRemoved" }, ngImport: i0, template: "<div class=\"position-relative\">\r\n <uppy-dashboard [uppy]=\"uppy\" [props]=\"dashboardProps\"> </uppy-dashboard>\r\n <a *ngIf=\"sampleUrl && showSample\" class=\"sample position-absolute\" role=\"button\" [href]=\"sampleUrl\">\r\n <i class=\"fa-solid fa-download ms-3\"></i> Download Template\r\n </a>\r\n</div>", styles: ["::ng-deep .uppy-Dashboard-AddFiles-info{display:none!important}.sample{top:53%;left:calc(50% - 63.5px)}\n"], dependencies: [{ kind: "ngmodule", type: UppyAngularDashboardModule }, { kind: "component", type: i1.DashboardComponent, selector: "uppy-dashboard", inputs: ["uppy", "props"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
57
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: UppyComponent, isStandalone: true, selector: "POS-uppy", inputs: { sampleUrl: { classPropertyName: "sampleUrl", publicName: "sampleUrl", isSignal: false, isRequired: false, transformFunction: null }, uppyCoreConfiguration: { classPropertyName: "uppyCoreConfiguration", publicName: "uppyCoreConfiguration", isSignal: true, isRequired: false, transformFunction: null }, dashboardPropsConfiguration: { classPropertyName: "dashboardPropsConfiguration", publicName: "dashboardPropsConfiguration", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { fileUploaded: "fileUploaded", fileRemoved: "fileRemoved" }, ngImport: i0, template: "<div class=\"position-relative\">\r\n <uppy-dashboard [uppy]=\"uppy\" [props]=\"dashboardProps\"> </uppy-dashboard>\r\n <small class=\"text-primary fst-italic\" *ngIf=\"message\">{{message}}</small>\r\n <a *ngIf=\"sampleUrl && showSample\" class=\"sample position-absolute\" role=\"button\" [href]=\"sampleUrl\">\r\n <i class=\"fa-solid fa-download ms-3\"></i> Download Template\r\n </a>\r\n</div>", styles: ["::ng-deep .uppy-Dashboard-AddFiles-info{display:none!important}.sample{top:53%;left:calc(50% - 63.5px)}\n"], dependencies: [{ kind: "ngmodule", type: UppyAngularDashboardModule }, { kind: "component", type: i1.DashboardComponent, selector: "uppy-dashboard", inputs: ["uppy", "props"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
49
58
|
}
|
|
50
59
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: UppyComponent, decorators: [{
|
|
51
60
|
type: Component,
|
|
52
|
-
args: [{ selector: 'POS-uppy', standalone: true, imports: [UppyAngularDashboardModule, CommonModule], template: "<div class=\"position-relative\">\r\n <uppy-dashboard [uppy]=\"uppy\" [props]=\"dashboardProps\"> </uppy-dashboard>\r\n <a *ngIf=\"sampleUrl && showSample\" class=\"sample position-absolute\" role=\"button\" [href]=\"sampleUrl\">\r\n <i class=\"fa-solid fa-download ms-3\"></i> Download Template\r\n </a>\r\n</div>", styles: ["::ng-deep .uppy-Dashboard-AddFiles-info{display:none!important}.sample{top:53%;left:calc(50% - 63.5px)}\n"] }]
|
|
61
|
+
args: [{ selector: 'POS-uppy', standalone: true, imports: [UppyAngularDashboardModule, CommonModule], template: "<div class=\"position-relative\">\r\n <uppy-dashboard [uppy]=\"uppy\" [props]=\"dashboardProps\"> </uppy-dashboard>\r\n <small class=\"text-primary fst-italic\" *ngIf=\"message\">{{message}}</small>\r\n <a *ngIf=\"sampleUrl && showSample\" class=\"sample position-absolute\" role=\"button\" [href]=\"sampleUrl\">\r\n <i class=\"fa-solid fa-download ms-3\"></i> Download Template\r\n </a>\r\n</div>", styles: ["::ng-deep .uppy-Dashboard-AddFiles-info{display:none!important}.sample{top:53%;left:calc(50% - 63.5px)}\n"] }]
|
|
53
62
|
}], ctorParameters: () => [], propDecorators: { sampleUrl: [{
|
|
54
63
|
type: Input
|
|
55
64
|
}], fileUploaded: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dealpos-npm-ng-dealpos-library-components-uppy-file-upload.mjs","sources":["../../../projects/dealpos-npm/ng-dealpos-library/components/uppy-file-upload/src/uppy.component.ts","../../../projects/dealpos-npm/ng-dealpos-library/components/uppy-file-upload/src/uppy.component.html","../../../projects/dealpos-npm/ng-dealpos-library/components/uppy-file-upload/dealpos-npm-ng-dealpos-library-components-uppy-file-upload.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport { Component, effect, EventEmitter, inject, input, Input, Output } from '@angular/core';\r\nimport { HttpService } from '@dealpos-npm/ng-dealpos-library/services/http';\r\nimport { UppyAngularDashboardModule } from '@uppy/angular';\r\nimport { Uppy } from '@uppy/core';\r\nimport '@uppy/core/dist/style.min.css';\r\nimport '@uppy/dashboard/dist/style.min.css';\r\n\r\n@Component({\r\n selector: 'POS-uppy',\r\n standalone: true,\r\n imports: [UppyAngularDashboardModule, CommonModule],\r\n templateUrl: './uppy.component.html',\r\n styleUrl: './uppy.component.scss'\r\n})\r\nexport class UppyComponent {\r\n @Input() sampleUrl: string = ''\r\n showSample: boolean = true\r\n uppyCoreConfiguration = input<any>();\r\n dashboardPropsConfiguration = input<any>();\r\n @Output() fileUploaded = new EventEmitter<Blob | File>()\r\n @Output() fileRemoved = new EventEmitter<void>()\r\n\r\n http = inject(HttpService)\r\n\r\n uppy: Uppy = new Uppy({ \r\n debug: true, \r\n autoProceed: true, \r\n allowMultipleUploadBatches: false,\r\n restrictions: {\r\n allowedFileTypes: ['.csv'],\r\n maxTotalFileSize: 1000000\r\n }\r\n });\r\n \r\n dashboardProps = {\r\n hideUploadButton: true,\r\n width: 580,\r\n height: 350\r\n }\r\n\r\n constructor() {\r\n effect(() => this.uppy.setOptions({...this.uppyCoreConfiguration()}))\r\n effect(() => this.dashboardProps = ({...this.dashboardProps, ...this.dashboardPropsConfiguration()}))\r\n\r\n this.uppy.on('upload', (_, uppyFiles) => {\r\n const file = uppyFiles[0]?.data\r\n this.showSample = false\r\n this.fileUploaded.emit(file)\r\n })\r\n\r\n this.uppy.on('file-removed', () => {\r\n this.showSample = true\r\n this.fileRemoved.emit()\r\n });\r\n }\r\n}\r\n","<div class=\"position-relative\">\r\n <uppy-dashboard [uppy]=\"uppy\" [props]=\"dashboardProps\"> </uppy-dashboard>\r\n <a *ngIf=\"sampleUrl && showSample\" class=\"sample position-absolute\" role=\"button\" [href]=\"sampleUrl\">\r\n <i class=\"fa-solid fa-download ms-3\"></i> Download Template\r\n </a>\r\n</div>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dealpos-npm-ng-dealpos-library-components-uppy-file-upload.mjs","sources":["../../../projects/dealpos-npm/ng-dealpos-library/components/uppy-file-upload/src/uppy.component.ts","../../../projects/dealpos-npm/ng-dealpos-library/components/uppy-file-upload/src/uppy.component.html","../../../projects/dealpos-npm/ng-dealpos-library/components/uppy-file-upload/dealpos-npm-ng-dealpos-library-components-uppy-file-upload.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport { Component, effect, EventEmitter, inject, input, Input, Output } from '@angular/core';\r\nimport { Constants } from '@dealpos-npm/ng-dealpos-library/constants';\r\nimport { ConvertCsvService } from '@dealpos-npm/ng-dealpos-library/services/csv-parser';\r\nimport { HttpService } from '@dealpos-npm/ng-dealpos-library/services/http';\r\nimport { UppyAngularDashboardModule } from '@uppy/angular';\r\nimport { Uppy } from '@uppy/core';\r\nimport '@uppy/core/dist/style.min.css';\r\nimport '@uppy/dashboard/dist/style.min.css';\r\nimport { map, switchMap } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'POS-uppy',\r\n standalone: true,\r\n imports: [UppyAngularDashboardModule, CommonModule],\r\n templateUrl: './uppy.component.html',\r\n styleUrl: './uppy.component.scss'\r\n})\r\nexport class UppyComponent {\r\n @Input() sampleUrl: string = ''\r\n showSample: boolean = true\r\n uppyCoreConfiguration = input<any>();\r\n dashboardPropsConfiguration = input<any>();\r\n @Output() fileUploaded = new EventEmitter<Blob | File>()\r\n @Output() fileRemoved = new EventEmitter<void>()\r\n\r\n http = inject(HttpService)\r\n csvParser = inject(ConvertCsvService)\r\n\r\n message: string = ''\r\n\r\n uppy: Uppy = new Uppy({ \r\n debug: true, \r\n autoProceed: true, \r\n allowMultipleUploadBatches: false,\r\n restrictions: {\r\n allowedFileTypes: ['.csv'],\r\n maxTotalFileSize: 1000000\r\n }\r\n });\r\n \r\n dashboardProps = {\r\n hideUploadButton: true,\r\n width: 580,\r\n height: 350\r\n }\r\n\r\n constructor() {\r\n effect(() => this.uppy.setOptions({...this.uppyCoreConfiguration()}))\r\n effect(() => this.dashboardProps = ({...this.dashboardProps, ...this.dashboardPropsConfiguration()}))\r\n\r\n this.uppy.on('upload', (_, uppyFiles) => {\r\n const file = uppyFiles[0]?.data as File\r\n this.showSample = false\r\n\r\n const fileExtension = file.name.split(\".\").pop()\r\n if (fileExtension == '.csv') {\r\n this.csvParser.convertFile(file).pipe(\r\n map(arr => `${arr.length} rows found - ${arr.filter((r: any) => Constants.IsEmpty(r)).length} empty in the CSV you uploaded (${file.size / 1000000} MB)`)\r\n ).subscribe(msg => this.message = msg)\r\n }\r\n\r\n this.fileUploaded.emit(file)\r\n })\r\n\r\n this.uppy.on('file-removed', () => {\r\n this.showSample = true\r\n this.fileRemoved.emit()\r\n });\r\n }\r\n}\r\n","<div class=\"position-relative\">\r\n <uppy-dashboard [uppy]=\"uppy\" [props]=\"dashboardProps\"> </uppy-dashboard>\r\n <small class=\"text-primary fst-italic\" *ngIf=\"message\">{{message}}</small>\r\n <a *ngIf=\"sampleUrl && showSample\" class=\"sample position-absolute\" role=\"button\" [href]=\"sampleUrl\">\r\n <i class=\"fa-solid fa-download ms-3\"></i> Download Template\r\n </a>\r\n</div>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
|
|
5
|
+
class ConvertCsvService {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.subject$ = new Subject();
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Handles the file load event and converts the CSV content into an array of objects.
|
|
11
|
+
* @param fileLoadedEvent - The file load event containing the loaded file data.
|
|
12
|
+
* @returns An array of objects representing the CSV data.
|
|
13
|
+
*/
|
|
14
|
+
onFileLoad(fileLoadedEvent) {
|
|
15
|
+
const textFromFileLoaded = fileLoadedEvent.target.result;
|
|
16
|
+
let csvContent = textFromFileLoaded;
|
|
17
|
+
//Flag is for extracting first line
|
|
18
|
+
let flag = false;
|
|
19
|
+
// Main Data
|
|
20
|
+
let objarray = [];
|
|
21
|
+
//Properties
|
|
22
|
+
let prop = [];
|
|
23
|
+
//Total Length
|
|
24
|
+
let size = 0;
|
|
25
|
+
for (const line of csvContent.split(/[\r\n]+/)) {
|
|
26
|
+
if (flag) {
|
|
27
|
+
let obj = {};
|
|
28
|
+
for (let k = 0; k < size; k++) {
|
|
29
|
+
//Dynamic Object Properties
|
|
30
|
+
obj[prop[k]] = line.split(',')[k];
|
|
31
|
+
}
|
|
32
|
+
objarray.push(obj);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
//First Line of CSV will be having Properties
|
|
36
|
+
for (let k = 0; k < line.split(',').length; k++) {
|
|
37
|
+
size = line.split(',').length;
|
|
38
|
+
//Removing all the spaces to make them usefull
|
|
39
|
+
prop.push(line.split(',')[k].replace(/ /g, ''));
|
|
40
|
+
}
|
|
41
|
+
flag = true;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
objarray.splice(-1);
|
|
45
|
+
return objarray;
|
|
46
|
+
}
|
|
47
|
+
convertFile(file) {
|
|
48
|
+
const fileToRead = file;
|
|
49
|
+
const fileReader = new FileReader();
|
|
50
|
+
fileReader.onload = (fileReader) => {
|
|
51
|
+
const convertedData = this.onFileLoad(fileReader);
|
|
52
|
+
this.subject$.next(convertedData);
|
|
53
|
+
};
|
|
54
|
+
fileReader.readAsText(fileToRead, "UTF-8");
|
|
55
|
+
return this.subject$.asObservable();
|
|
56
|
+
}
|
|
57
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ConvertCsvService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
58
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ConvertCsvService, providedIn: 'root' }); }
|
|
59
|
+
}
|
|
60
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ConvertCsvService, decorators: [{
|
|
61
|
+
type: Injectable,
|
|
62
|
+
args: [{
|
|
63
|
+
providedIn: 'root'
|
|
64
|
+
}]
|
|
65
|
+
}] });
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Generated bundle index. Do not edit.
|
|
69
|
+
*/
|
|
70
|
+
|
|
71
|
+
export { ConvertCsvService };
|
|
72
|
+
//# sourceMappingURL=dealpos-npm-ng-dealpos-library-services-csv-parser.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dealpos-npm-ng-dealpos-library-services-csv-parser.mjs","sources":["../../../projects/dealpos-npm/ng-dealpos-library/services/csv-parser/src/convert-csv.service.ts","../../../projects/dealpos-npm/ng-dealpos-library/services/csv-parser/dealpos-npm-ng-dealpos-library-services-csv-parser.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ConvertCsvService {\r\n private subject$ = new Subject();\r\n\r\n /**\r\n * Handles the file load event and converts the CSV content into an array of objects.\r\n * @param fileLoadedEvent - The file load event containing the loaded file data.\r\n * @returns An array of objects representing the CSV data.\r\n */\r\n private onFileLoad(fileLoadedEvent: any) {\r\n const textFromFileLoaded = fileLoadedEvent.target.result;\r\n let csvContent = textFromFileLoaded;\r\n\r\n //Flag is for extracting first line\r\n let flag = false;\r\n // Main Data\r\n let objarray: Array<any> = [];\r\n //Properties\r\n let prop: Array<any> = [];\r\n //Total Length\r\n let size: any = 0;\r\n for (const line of csvContent.split(/[\\r\\n]+/)) {\r\n\r\n if (flag) {\r\n\r\n let obj = {} as any;\r\n for (let k = 0; k < size; k++) {\r\n //Dynamic Object Properties\r\n obj[prop[k]] = line.split(',')[k]\r\n }\r\n objarray.push(obj);\r\n\r\n } else {\r\n //First Line of CSV will be having Properties\r\n for (let k = 0; k < line.split(',').length; k++) {\r\n size = line.split(',').length;\r\n //Removing all the spaces to make them usefull\r\n prop.push(line.split(',')[k].replace(/ /g, ''));\r\n }\r\n flag = true;\r\n\r\n }\r\n }\r\n objarray.splice(-1);\r\n return objarray;\r\n }\r\n\r\n public convertFile(file: File): Observable<any> {\r\n const fileToRead = file;\r\n const fileReader = new FileReader();\r\n fileReader.onload = (fileReader) => {\r\n const convertedData = this.onFileLoad(fileReader);\r\n this.subject$.next(convertedData);\r\n };\r\n fileReader.readAsText(fileToRead, \"UTF-8\");\r\n return this.subject$.asObservable();\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MAMa,iBAAiB,CAAA;AAH9B,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAE,CAAC;AAuDlC,KAAA;AArDC;;;;AAIG;AACK,IAAA,UAAU,CAAC,eAAoB,EAAA;AACrC,QAAA,MAAM,kBAAkB,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;QACzD,IAAI,UAAU,GAAG,kBAAkB,CAAC;;QAGpC,IAAI,IAAI,GAAG,KAAK,CAAC;;QAEjB,IAAI,QAAQ,GAAe,EAAE,CAAC;;QAE9B,IAAI,IAAI,GAAe,EAAE,CAAC;;QAE1B,IAAI,IAAI,GAAQ,CAAC,CAAC;QAClB,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YAE9C,IAAI,IAAI,EAAE;gBAER,IAAI,GAAG,GAAG,EAAS,CAAC;AACpB,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;;AAE7B,oBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;iBAClC;AACD,gBAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAEpB;iBAAM;;AAEL,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC/C,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;;oBAE9B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;iBACjD;gBACD,IAAI,GAAG,IAAI,CAAC;aAEb;SACF;AACD,QAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,QAAA,OAAO,QAAQ,CAAC;KACjB;AAEM,IAAA,WAAW,CAAC,IAAU,EAAA;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,QAAA,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;AACpC,QAAA,UAAU,CAAC,MAAM,GAAG,CAAC,UAAU,KAAI;YACjC,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACpC,SAAC,CAAC;AACF,QAAA,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC3C,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;KACrC;8GAvDU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACLD;;AAEG;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dealpos-npm/ng-dealpos-library",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.0",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": "^18.2.0",
|
|
6
6
|
"@angular/core": "^18.2.0",
|
|
@@ -50,6 +50,12 @@
|
|
|
50
50
|
"esm": "./esm2022/components/datepicker/dealpos-npm-ng-dealpos-library-components-datepicker.mjs",
|
|
51
51
|
"default": "./fesm2022/dealpos-npm-ng-dealpos-library-components-datepicker.mjs"
|
|
52
52
|
},
|
|
53
|
+
"./components/info-page-input": {
|
|
54
|
+
"types": "./components/info-page-input/index.d.ts",
|
|
55
|
+
"esm2022": "./esm2022/components/info-page-input/dealpos-npm-ng-dealpos-library-components-info-page-input.mjs",
|
|
56
|
+
"esm": "./esm2022/components/info-page-input/dealpos-npm-ng-dealpos-library-components-info-page-input.mjs",
|
|
57
|
+
"default": "./fesm2022/dealpos-npm-ng-dealpos-library-components-info-page-input.mjs"
|
|
58
|
+
},
|
|
53
59
|
"./components/datepicker-range": {
|
|
54
60
|
"types": "./components/datepicker-range/index.d.ts",
|
|
55
61
|
"esm2022": "./esm2022/components/datepicker-range/dealpos-npm-ng-dealpos-library-components-datepicker-range.mjs",
|
|
@@ -62,12 +68,6 @@
|
|
|
62
68
|
"esm": "./esm2022/components/dialog/dealpos-npm-ng-dealpos-library-components-dialog.mjs",
|
|
63
69
|
"default": "./fesm2022/dealpos-npm-ng-dealpos-library-components-dialog.mjs"
|
|
64
70
|
},
|
|
65
|
-
"./components/info-page-input": {
|
|
66
|
-
"types": "./components/info-page-input/index.d.ts",
|
|
67
|
-
"esm2022": "./esm2022/components/info-page-input/dealpos-npm-ng-dealpos-library-components-info-page-input.mjs",
|
|
68
|
-
"esm": "./esm2022/components/info-page-input/dealpos-npm-ng-dealpos-library-components-info-page-input.mjs",
|
|
69
|
-
"default": "./fesm2022/dealpos-npm-ng-dealpos-library-components-info-page-input.mjs"
|
|
70
|
-
},
|
|
71
71
|
"./components/modal-changelog": {
|
|
72
72
|
"types": "./components/modal-changelog/index.d.ts",
|
|
73
73
|
"esm2022": "./esm2022/components/modal-changelog/dealpos-npm-ng-dealpos-library-components-modal-changelog.mjs",
|
|
@@ -86,18 +86,18 @@
|
|
|
86
86
|
"esm": "./esm2022/components/radio-options/dealpos-npm-ng-dealpos-library-components-radio-options.mjs",
|
|
87
87
|
"default": "./fesm2022/dealpos-npm-ng-dealpos-library-components-radio-options.mjs"
|
|
88
88
|
},
|
|
89
|
-
"./components/serial-note": {
|
|
90
|
-
"types": "./components/serial-note/index.d.ts",
|
|
91
|
-
"esm2022": "./esm2022/components/serial-note/dealpos-npm-ng-dealpos-library-components-serial-note.mjs",
|
|
92
|
-
"esm": "./esm2022/components/serial-note/dealpos-npm-ng-dealpos-library-components-serial-note.mjs",
|
|
93
|
-
"default": "./fesm2022/dealpos-npm-ng-dealpos-library-components-serial-note.mjs"
|
|
94
|
-
},
|
|
95
89
|
"./components/timepicker": {
|
|
96
90
|
"types": "./components/timepicker/index.d.ts",
|
|
97
91
|
"esm2022": "./esm2022/components/timepicker/dealpos-npm-ng-dealpos-library-components-timepicker.mjs",
|
|
98
92
|
"esm": "./esm2022/components/timepicker/dealpos-npm-ng-dealpos-library-components-timepicker.mjs",
|
|
99
93
|
"default": "./fesm2022/dealpos-npm-ng-dealpos-library-components-timepicker.mjs"
|
|
100
94
|
},
|
|
95
|
+
"./components/serial-note": {
|
|
96
|
+
"types": "./components/serial-note/index.d.ts",
|
|
97
|
+
"esm2022": "./esm2022/components/serial-note/dealpos-npm-ng-dealpos-library-components-serial-note.mjs",
|
|
98
|
+
"esm": "./esm2022/components/serial-note/dealpos-npm-ng-dealpos-library-components-serial-note.mjs",
|
|
99
|
+
"default": "./fesm2022/dealpos-npm-ng-dealpos-library-components-serial-note.mjs"
|
|
100
|
+
},
|
|
101
101
|
"./components/tinymce-editor": {
|
|
102
102
|
"types": "./components/tinymce-editor/index.d.ts",
|
|
103
103
|
"esm2022": "./esm2022/components/tinymce-editor/dealpos-npm-ng-dealpos-library-components-tinymce-editor.mjs",
|
|
@@ -122,6 +122,18 @@
|
|
|
122
122
|
"esm": "./esm2022/directives/autonumeric/dealpos-npm-ng-dealpos-library-directives-autonumeric.mjs",
|
|
123
123
|
"default": "./fesm2022/dealpos-npm-ng-dealpos-library-directives-autonumeric.mjs"
|
|
124
124
|
},
|
|
125
|
+
"./directives/form-or-floating-on-masked": {
|
|
126
|
+
"types": "./directives/form-or-floating-on-masked/index.d.ts",
|
|
127
|
+
"esm2022": "./esm2022/directives/form-or-floating-on-masked/dealpos-npm-ng-dealpos-library-directives-form-or-floating-on-masked.mjs",
|
|
128
|
+
"esm": "./esm2022/directives/form-or-floating-on-masked/dealpos-npm-ng-dealpos-library-directives-form-or-floating-on-masked.mjs",
|
|
129
|
+
"default": "./fesm2022/dealpos-npm-ng-dealpos-library-directives-form-or-floating-on-masked.mjs"
|
|
130
|
+
},
|
|
131
|
+
"./directives/numeric-input-only": {
|
|
132
|
+
"types": "./directives/numeric-input-only/index.d.ts",
|
|
133
|
+
"esm2022": "./esm2022/directives/numeric-input-only/dealpos-npm-ng-dealpos-library-directives-numeric-input-only.mjs",
|
|
134
|
+
"esm": "./esm2022/directives/numeric-input-only/dealpos-npm-ng-dealpos-library-directives-numeric-input-only.mjs",
|
|
135
|
+
"default": "./fesm2022/dealpos-npm-ng-dealpos-library-directives-numeric-input-only.mjs"
|
|
136
|
+
},
|
|
125
137
|
"./directives/file-drag-drop": {
|
|
126
138
|
"types": "./directives/file-drag-drop/index.d.ts",
|
|
127
139
|
"esm2022": "./esm2022/directives/file-drag-drop/dealpos-npm-ng-dealpos-library-directives-file-drag-drop.mjs",
|
|
@@ -140,47 +152,41 @@
|
|
|
140
152
|
"esm": "./esm2022/directives/is-invalid-email-or-phone/dealpos-npm-ng-dealpos-library-directives-is-invalid-email-or-phone.mjs",
|
|
141
153
|
"default": "./fesm2022/dealpos-npm-ng-dealpos-library-directives-is-invalid-email-or-phone.mjs"
|
|
142
154
|
},
|
|
143
|
-
"./directives/form-or-floating-on-masked": {
|
|
144
|
-
"types": "./directives/form-or-floating-on-masked/index.d.ts",
|
|
145
|
-
"esm2022": "./esm2022/directives/form-or-floating-on-masked/dealpos-npm-ng-dealpos-library-directives-form-or-floating-on-masked.mjs",
|
|
146
|
-
"esm": "./esm2022/directives/form-or-floating-on-masked/dealpos-npm-ng-dealpos-library-directives-form-or-floating-on-masked.mjs",
|
|
147
|
-
"default": "./fesm2022/dealpos-npm-ng-dealpos-library-directives-form-or-floating-on-masked.mjs"
|
|
148
|
-
},
|
|
149
|
-
"./directives/numeric-input-only": {
|
|
150
|
-
"types": "./directives/numeric-input-only/index.d.ts",
|
|
151
|
-
"esm2022": "./esm2022/directives/numeric-input-only/dealpos-npm-ng-dealpos-library-directives-numeric-input-only.mjs",
|
|
152
|
-
"esm": "./esm2022/directives/numeric-input-only/dealpos-npm-ng-dealpos-library-directives-numeric-input-only.mjs",
|
|
153
|
-
"default": "./fesm2022/dealpos-npm-ng-dealpos-library-directives-numeric-input-only.mjs"
|
|
154
|
-
},
|
|
155
155
|
"./directives/simple-keyboard": {
|
|
156
156
|
"types": "./directives/simple-keyboard/index.d.ts",
|
|
157
157
|
"esm2022": "./esm2022/directives/simple-keyboard/dealpos-npm-ng-dealpos-library-directives-simple-keyboard.mjs",
|
|
158
158
|
"esm": "./esm2022/directives/simple-keyboard/dealpos-npm-ng-dealpos-library-directives-simple-keyboard.mjs",
|
|
159
159
|
"default": "./fesm2022/dealpos-npm-ng-dealpos-library-directives-simple-keyboard.mjs"
|
|
160
160
|
},
|
|
161
|
-
"./pipes/filter": {
|
|
162
|
-
"types": "./pipes/filter/index.d.ts",
|
|
163
|
-
"esm2022": "./esm2022/pipes/filter/dealpos-npm-ng-dealpos-library-pipes-filter.mjs",
|
|
164
|
-
"esm": "./esm2022/pipes/filter/dealpos-npm-ng-dealpos-library-pipes-filter.mjs",
|
|
165
|
-
"default": "./fesm2022/dealpos-npm-ng-dealpos-library-pipes-filter.mjs"
|
|
166
|
-
},
|
|
167
161
|
"./pipes/duration": {
|
|
168
162
|
"types": "./pipes/duration/index.d.ts",
|
|
169
163
|
"esm2022": "./esm2022/pipes/duration/dealpos-npm-ng-dealpos-library-pipes-duration.mjs",
|
|
170
164
|
"esm": "./esm2022/pipes/duration/dealpos-npm-ng-dealpos-library-pipes-duration.mjs",
|
|
171
165
|
"default": "./fesm2022/dealpos-npm-ng-dealpos-library-pipes-duration.mjs"
|
|
172
166
|
},
|
|
167
|
+
"./pipes/fraction": {
|
|
168
|
+
"types": "./pipes/fraction/index.d.ts",
|
|
169
|
+
"esm2022": "./esm2022/pipes/fraction/dealpos-npm-ng-dealpos-library-pipes-fraction.mjs",
|
|
170
|
+
"esm": "./esm2022/pipes/fraction/dealpos-npm-ng-dealpos-library-pipes-fraction.mjs",
|
|
171
|
+
"default": "./fesm2022/dealpos-npm-ng-dealpos-library-pipes-fraction.mjs"
|
|
172
|
+
},
|
|
173
|
+
"./pipes/filter": {
|
|
174
|
+
"types": "./pipes/filter/index.d.ts",
|
|
175
|
+
"esm2022": "./esm2022/pipes/filter/dealpos-npm-ng-dealpos-library-pipes-filter.mjs",
|
|
176
|
+
"esm": "./esm2022/pipes/filter/dealpos-npm-ng-dealpos-library-pipes-filter.mjs",
|
|
177
|
+
"default": "./fesm2022/dealpos-npm-ng-dealpos-library-pipes-filter.mjs"
|
|
178
|
+
},
|
|
173
179
|
"./pipes/newlines": {
|
|
174
180
|
"types": "./pipes/newlines/index.d.ts",
|
|
175
181
|
"esm2022": "./esm2022/pipes/newlines/dealpos-npm-ng-dealpos-library-pipes-newlines.mjs",
|
|
176
182
|
"esm": "./esm2022/pipes/newlines/dealpos-npm-ng-dealpos-library-pipes-newlines.mjs",
|
|
177
183
|
"default": "./fesm2022/dealpos-npm-ng-dealpos-library-pipes-newlines.mjs"
|
|
178
184
|
},
|
|
179
|
-
"./
|
|
180
|
-
"types": "./
|
|
181
|
-
"esm2022": "./esm2022/
|
|
182
|
-
"esm": "./esm2022/
|
|
183
|
-
"default": "./fesm2022/dealpos-npm-ng-dealpos-library-
|
|
185
|
+
"./services/csv-parser": {
|
|
186
|
+
"types": "./services/csv-parser/index.d.ts",
|
|
187
|
+
"esm2022": "./esm2022/services/csv-parser/dealpos-npm-ng-dealpos-library-services-csv-parser.mjs",
|
|
188
|
+
"esm": "./esm2022/services/csv-parser/dealpos-npm-ng-dealpos-library-services-csv-parser.mjs",
|
|
189
|
+
"default": "./fesm2022/dealpos-npm-ng-dealpos-library-services-csv-parser.mjs"
|
|
184
190
|
},
|
|
185
191
|
"./services/http": {
|
|
186
192
|
"types": "./services/http/index.d.ts",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./src/convert-csv.service";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class ConvertCsvService {
|
|
4
|
+
private subject$;
|
|
5
|
+
/**
|
|
6
|
+
* Handles the file load event and converts the CSV content into an array of objects.
|
|
7
|
+
* @param fileLoadedEvent - The file load event containing the loaded file data.
|
|
8
|
+
* @returns An array of objects representing the CSV data.
|
|
9
|
+
*/
|
|
10
|
+
private onFileLoad;
|
|
11
|
+
convertFile(file: File): Observable<any>;
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ConvertCsvService, never>;
|
|
13
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ConvertCsvService>;
|
|
14
|
+
}
|