5797d18d5efe56c323f9237615bf8fe82f4905df
[ccsdk/cds.git] / cds-ui / designer-client / src / app / modules / feature-modules / packages / packages-dashboard / import-package / import-package.component.ts
1 import {Component, OnInit} from '@angular/core';
2 import {FileSystemFileEntry, NgxFileDropEntry} from 'ngx-file-drop';
3 import {PackageCreationExtractionService} from '../../package-creation/package-creation-extraction.service';
4 import {Router} from '@angular/router';
5 import {PackageCreationStore} from '../../package-creation/package-creation.store';
6 import * as JSZip from 'jszip';
7 import {PackageCreationService} from '../../package-creation/package-creation.service';
8 import {ToastrService} from 'ngx-toastr';
9 import {PackagesStore} from '../../packages.store';
10
11 @Component({
12     selector: 'app-import-package',
13     templateUrl: './import-package.component.html',
14     styleUrls: ['./import-package.component.css']
15 })
16 export class ImportPackageComponent implements OnInit {
17
18     public uploadedFiles: FileSystemFileEntry[] = [];
19     private fileNames: Set<string> = new Set();
20     fileToDelete: any = {};
21     zipFile: JSZip = new JSZip();
22     public files: NgxFileDropEntry[] = [];
23
24     constructor(private packageCreationExtractionService: PackageCreationExtractionService,
25                 private packageCreationStore: PackageCreationStore,
26                 private packageCreationService: PackageCreationService,
27                 private toastService: ToastrService,
28                 private packagesStore: PackagesStore,
29                 private router: Router) {
30
31     }
32
33     ngOnInit() {
34
35     }
36
37     removeInitFile(index) {
38         this.uploadedFiles.splice(index, 1);
39     }
40
41     public dropped(files: NgxFileDropEntry[]) {
42         this.files = files;
43         for (const droppedFile of files) {
44             // Is it a file? & Not added before
45             if (droppedFile.fileEntry.isFile) {
46                 const fileEntry = droppedFile.fileEntry as FileSystemFileEntry;
47                 this.uploadedFiles.push(fileEntry);
48                 console.log(fileEntry.name);
49                 this.fileNames.add(fileEntry.name);
50
51             }
52         }
53     }
54
55     initDelete(file) {
56         console.log(file);
57         this.fileToDelete = file;
58     }
59
60     removeFile() {
61         const filename = this.fileToDelete.key;
62         for (let i = 0; i < this.uploadedFiles.length; i++) {
63             console.log(this.uploadedFiles[i]);
64             if (this.uploadedFiles[i].name === filename) {
65                 this.uploadedFiles.splice(i, 1);
66                 break;
67             }
68         }
69     }
70
71     resetTheUploadedFiles() {
72         this.uploadedFiles = [];
73     }
74
75
76     public fileOver(event) {
77         console.log(event);
78     }
79
80     public fileLeave(event) {
81         console.log(event);
82     }
83
84     importPackageAndViewIt() {
85         this.openFilesInCreationPackage();
86         this.saveFileToStore();
87     }
88
89     saveFileToStore() {
90         console.log(this.uploadedFiles.length);
91         const file = this.getFile(this.uploadedFiles[this.uploadedFiles.length - 1]);
92         this.packageCreationStore.clear();
93         this.packageCreationExtractionService.extractBlobToStore(file);
94     }
95
96     openFilesInCreationPackage() {
97         this.router.navigate(['/packages/createPackage/']);
98     }
99
100     async getFile(fileEntry) {
101         try {
102             return await new Promise((resolve, reject) => fileEntry.file(resolve, reject));
103         } catch (err) {
104             console.log(err);
105         }
106     }
107
108     importAndSave() {
109         const file = this.getFile(this.uploadedFiles[this.uploadedFiles.length - 1]);
110         this.zipFile = new JSZip();
111         this.zipFile.loadAsync(file).then(zip => {
112             this.zipFile = zip;
113             console.log(this.zipFile);
114             this.resetTheUploadedFiles();
115             this.zipFile.generateAsync({type: 'blob'}).then(blob => {
116                 this.packageCreationService.savePackage(blob).subscribe(
117                     bluePrintDetailModels => {
118                         this.toastService.info('package is imported and saved successfully ');
119                         this.router.navigate(['/packages']);
120                         this.packagesStore.getAll();
121                     }, error =>
122                         this.toastService.error('there is an error happened ' + error));
123             });
124         });
125     }
126
127     importAndDeploy() {
128         const file = this.getFile(this.uploadedFiles[this.uploadedFiles.length - 1]);
129         this.zipFile = new JSZip();
130         this.zipFile.loadAsync(file).then(zip => {
131             this.zipFile = zip;
132             console.log(this.zipFile);
133             this.resetTheUploadedFiles();
134             this.zipFile.generateAsync({type: 'blob'}).then(blob => {
135                 this.packageCreationService.deploy(blob).subscribe(
136                     bluePrintDetailModels => {
137                         this.toastService.info('package is imported and deployed successfully ');
138                         this.router.navigate(['/packages']);
139                         this.packagesStore.getAll();
140                     }, error =>
141                         this.toastService.error('there is an error happened ' + error));
142             });
143         });
144     }
145 }