This is an automated email from the ASF dual-hosted git repository.

riemer pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/streampipes.git


The following commit(s) were added to refs/heads/dev by this push:
     new 3ba4f7775 feat(#2192): add download button in asset management 
overview (#2224)
3ba4f7775 is described below

commit 3ba4f777594666fd23b0bac72a2c238e97b2e300
Author: Isaak Krut <[email protected]>
AuthorDate: Mon Nov 27 05:22:09 2023 -0500

    feat(#2192): add download button in asset management overview (#2224)
    
    * Added Asset Download button
    
    * Updated to use FileSaver
---
 .../tests/assetManagement/createAsset.spec.ts      | 27 ++++++++++++++++++++++
 .../asset-overview/asset-overview.component.html   | 12 ++++++++++
 .../asset-overview/asset-overview.component.ts     | 18 +++++++++++++++
 3 files changed, 57 insertions(+)

diff --git a/ui/cypress/tests/assetManagement/createAsset.spec.ts 
b/ui/cypress/tests/assetManagement/createAsset.spec.ts
index 1ff47dfb3..fb5c52901 100644
--- a/ui/cypress/tests/assetManagement/createAsset.spec.ts
+++ b/ui/cypress/tests/assetManagement/createAsset.spec.ts
@@ -89,9 +89,36 @@ describe('Creates a new adapter, add to assets and export 
assets', () => {
         cy.dataCy('import-button').click();
 
         // Check if import was successful
+        cy.visit('#/connect');
+        cy.dataCy('adapters-table').children().should('have.length', 1);
         cy.visit('#/assets');
         cy.dataCy('assets-table').should('have.length', 1);
+
+        // Export Asset via Assets page
+        cy.dataCy('download').click();
+
+        // Delete Adapter and Asset
+        cy.visit('#/connect');
+        cy.dataCy('delete-adapter').click();
+        cy.dataCy('delete-adapter-confirmation').click();
+
+        cy.visit('#/assets');
+        cy.dataCy('delete').click();
+
+        // Import downloaded Asset
+        cy.visit('#/configuration/export');
+        cy.dataCy('import-application-data-button').click();
+        cy.get('input[type="file"]').selectFile(
+            'cypress/downloads/assetExport.zip',
+            { force: true },
+        );
+        cy.dataCy('next-import-button').click();
+        cy.dataCy('import-button').click();
+
+        // Check if import was successful
         cy.visit('#/connect');
         cy.dataCy('adapters-table').children().should('have.length', 1);
+        cy.visit('#/assets');
+        cy.dataCy('assets-table').should('have.length', 1);
     });
 });
diff --git 
a/ui/src/app/assets/components/asset-overview/asset-overview.component.html 
b/ui/src/app/assets/components/asset-overview/asset-overview.component.html
index 8e73c95bd..d08ce9d0e 100644
--- a/ui/src/app/assets/components/asset-overview/asset-overview.component.html
+++ b/ui/src/app/assets/components/asset-overview/asset-overview.component.html
@@ -198,6 +198,18 @@
                                                     >delete</i
                                                 >
                                             </button>
+                                            <button
+                                                color="accent"
+                                                mat-icon-button
+                                                matTooltip="Download asset"
+                                                data-cy="download"
+                                                matTooltipPosition="above"
+                                                (click)="downloadAsset(asset)"
+                                            >
+                                                <i class="material-icons"
+                                                    >download</i
+                                                >
+                                            </button>
                                         </span>
                                     </div>
                                 </td>
diff --git 
a/ui/src/app/assets/components/asset-overview/asset-overview.component.ts 
b/ui/src/app/assets/components/asset-overview/asset-overview.component.ts
index cf942f195..31c8ddf0b 100644
--- a/ui/src/app/assets/components/asset-overview/asset-overview.component.ts
+++ b/ui/src/app/assets/components/asset-overview/asset-overview.component.ts
@@ -32,6 +32,9 @@ import { SpAssetRoutes } from '../../assets.routes';
 import { AssetUploadDialogComponent } from 
'../../dialog/asset-upload/asset-upload-dialog.component';
 import { Router } from '@angular/router';
 import { SpCreateAssetDialogComponent } from 
'../../dialog/create-asset/create-asset-dialog.component';
+import { DataExportService } from 
'../../../configuration/export/data-export.service';
+import { mergeMap } from 'rxjs/operators';
+import { saveAs } from 'file-saver';
 
 @Component({
     selector: 'sp-asset-overview-component',
@@ -50,6 +53,7 @@ export class SpAssetOverviewComponent implements OnInit {
         private breadcrumbService: SpBreadcrumbService,
         private dialogService: DialogService,
         private router: Router,
+        private dataExportService: DataExportService,
     ) {}
 
     ngOnInit(): void {
@@ -147,4 +151,18 @@ export class SpAssetOverviewComponent implements OnInit {
                 this.loadAssets();
             });
     }
+
+    downloadAsset(asset: SpAssetModel) {
+        this.dataExportService
+            .getExportPreview([asset._id])
+            .pipe(
+                mergeMap(preview =>
+                    this.dataExportService.triggerExport(preview),
+                ),
+            )
+            .subscribe((data: Blob) => {
+                const blob = new Blob([data], { type: 'application/zip' });
+                saveAs(blob, 'assetExport');
+            });
+    }
 }

Reply via email to