@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.
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBweS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZWFscG9zLW5wbS9uZy1kZWFscG9zLWxpYnJhcnkvY29tcG9uZW50cy91cHB5LWZpbGUtdXBsb2FkL3NyYy91cHB5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RlYWxwb3MtbnBtL25nLWRlYWxwb3MtbGlicmFyeS9jb21wb25lbnRzL3VwcHktZmlsZS11cGxvYWQvc3JjL3VwcHkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2xDLE9BQU8sK0JBQStCLENBQUM7QUFDdkMsT0FBTyxvQ0FBb0MsQ0FBQzs7OztBQVM1QyxNQUFNLE9BQU8sYUFBYTtJQTBCeEI7UUF6QlMsY0FBUyxHQUFXLEVBQUUsQ0FBQTtRQUMvQixlQUFVLEdBQVksSUFBSSxDQUFBO1FBQzFCLDBCQUFxQixHQUFHLEtBQUssRUFBTyxDQUFDO1FBQ3JDLGdDQUEyQixHQUFHLEtBQUssRUFBTyxDQUFDO1FBQ2pDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQWUsQ0FBQTtRQUM5QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUE7UUFFaEQsU0FBSSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUUxQixTQUFJLEdBQVMsSUFBSSxJQUFJLENBQUM7WUFDcEIsS0FBSyxFQUFFLElBQUk7WUFDWCxXQUFXLEVBQUUsSUFBSTtZQUNqQiwwQkFBMEIsRUFBRSxLQUFLO1lBQ2pDLFlBQVksRUFBRTtnQkFDWixnQkFBZ0IsRUFBRSxDQUFDLE1BQU0sQ0FBQztnQkFDMUIsZ0JBQWdCLEVBQUUsT0FBTzthQUMxQjtTQUNGLENBQUMsQ0FBQztRQUVILG1CQUFjLEdBQUc7WUFDZixnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLEtBQUssRUFBRSxHQUFHO1lBQ1YsTUFBTSxFQUFFLEdBQUc7U0FDWixDQUFBO1FBR0MsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUMsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBQyxDQUFDLENBQUMsQ0FBQTtRQUNyRSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEVBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUE7UUFFckcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFO1lBQ3RDLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUE7WUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUE7WUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDOUIsQ0FBQyxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO1lBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQXhDVSxhQUFhO2tHQUFiLGFBQWEsOG5CQ2YxQiw0VUFLTSxrS0RNTSwwQkFBMEIseUlBQUUsWUFBWTs7MkZBSXZDLGFBQWE7a0JBUHpCLFNBQVM7K0JBQ0UsVUFBVSxjQUNSLElBQUksV0FDUCxDQUFDLDBCQUEwQixFQUFFLFlBQVksQ0FBQzt3REFLMUMsU0FBUztzQkFBakIsS0FBSztnQkFJSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIGVmZmVjdCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIGlucHV0LCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnQGRlYWxwb3MtbnBtL25nLWRlYWxwb3MtbGlicmFyeS9zZXJ2aWNlcy9odHRwJztcclxuaW1wb3J0IHsgVXBweUFuZ3VsYXJEYXNoYm9hcmRNb2R1bGUgfSBmcm9tICdAdXBweS9hbmd1bGFyJztcclxuaW1wb3J0IHsgVXBweSB9IGZyb20gJ0B1cHB5L2NvcmUnO1xyXG5pbXBvcnQgJ0B1cHB5L2NvcmUvZGlzdC9zdHlsZS5taW4uY3NzJztcclxuaW1wb3J0ICdAdXBweS9kYXNoYm9hcmQvZGlzdC9zdHlsZS5taW4uY3NzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnUE9TLXVwcHknLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1VwcHlBbmd1bGFyRGFzaGJvYXJkTW9kdWxlLCBDb21tb25Nb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91cHB5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdXBweS5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFVwcHlDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIHNhbXBsZVVybDogc3RyaW5nID0gJydcclxuICBzaG93U2FtcGxlOiBib29sZWFuID0gdHJ1ZVxyXG4gIHVwcHlDb3JlQ29uZmlndXJhdGlvbiA9IGlucHV0PGFueT4oKTtcclxuICBkYXNoYm9hcmRQcm9wc0NvbmZpZ3VyYXRpb24gPSBpbnB1dDxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGZpbGVVcGxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8QmxvYiB8IEZpbGU+KClcclxuICBAT3V0cHV0KCkgZmlsZVJlbW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KClcclxuXHJcbiAgaHR0cCA9IGluamVjdChIdHRwU2VydmljZSlcclxuXHJcbiAgdXBweTogVXBweSA9IG5ldyBVcHB5KHsgXHJcbiAgICBkZWJ1ZzogdHJ1ZSwgXHJcbiAgICBhdXRvUHJvY2VlZDogdHJ1ZSwgXHJcbiAgICBhbGxvd011bHRpcGxlVXBsb2FkQmF0Y2hlczogZmFsc2UsXHJcbiAgICByZXN0cmljdGlvbnM6IHtcclxuICAgICAgYWxsb3dlZEZpbGVUeXBlczogWycuY3N2J10sXHJcbiAgICAgIG1heFRvdGFsRmlsZVNpemU6IDEwMDAwMDBcclxuICAgIH1cclxuICB9KTtcclxuICBcclxuICBkYXNoYm9hcmRQcm9wcyA9IHtcclxuICAgIGhpZGVVcGxvYWRCdXR0b246IHRydWUsXHJcbiAgICB3aWR0aDogNTgwLFxyXG4gICAgaGVpZ2h0OiAzNTBcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMudXBweS5zZXRPcHRpb25zKHsuLi50aGlzLnVwcHlDb3JlQ29uZmlndXJhdGlvbigpfSkpXHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5kYXNoYm9hcmRQcm9wcyA9ICh7Li4udGhpcy5kYXNoYm9hcmRQcm9wcywgLi4udGhpcy5kYXNoYm9hcmRQcm9wc0NvbmZpZ3VyYXRpb24oKX0pKVxyXG5cclxuICAgIHRoaXMudXBweS5vbigndXBsb2FkJywgKF8sIHVwcHlGaWxlcykgPT4ge1xyXG4gICAgICBjb25zdCBmaWxlID0gdXBweUZpbGVzWzBdPy5kYXRhXHJcbiAgICAgIHRoaXMuc2hvd1NhbXBsZSA9IGZhbHNlXHJcbiAgICAgIHRoaXMuZmlsZVVwbG9hZGVkLmVtaXQoZmlsZSlcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy51cHB5Lm9uKCdmaWxlLXJlbW92ZWQnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2hvd1NhbXBsZSA9IHRydWVcclxuICAgICAgdGhpcy5maWxlUmVtb3ZlZC5lbWl0KClcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgIDx1cHB5LWRhc2hib2FyZCBbdXBweV09XCJ1cHB5XCIgW3Byb3BzXT1cImRhc2hib2FyZFByb3BzXCI+IDwvdXBweS1kYXNoYm9hcmQ+XHJcbiAgICA8YSAqbmdJZj1cInNhbXBsZVVybCAmJiBzaG93U2FtcGxlXCIgY2xhc3M9XCJzYW1wbGUgcG9zaXRpb24tYWJzb2x1dGVcIiByb2xlPVwiYnV0dG9uXCIgW2hyZWZdPVwic2FtcGxlVXJsXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1kb3dubG9hZCBtcy0zXCI+PC9pPiBEb3dubG9hZCBUZW1wbGF0ZVxyXG4gICAgPC9hPlxyXG48L2Rpdj4iXX0=
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":"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"}
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.0",
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
- "./pipes/fraction": {
180
- "types": "./pipes/fraction/index.d.ts",
181
- "esm2022": "./esm2022/pipes/fraction/dealpos-npm-ng-dealpos-library-pipes-fraction.mjs",
182
- "esm": "./esm2022/pipes/fraction/dealpos-npm-ng-dealpos-library-pipes-fraction.mjs",
183
- "default": "./fesm2022/dealpos-npm-ng-dealpos-library-pipes-fraction.mjs"
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,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@dealpos-npm/ng-dealpos-library/services/csv-parser" />
5
+ export * from './public-api';
@@ -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
+ }