Skip to content

Commit

Permalink
feat(core/reports): add export all report widgets function
Browse files Browse the repository at this point in the history
  • Loading branch information
sara-gnucoop committed Sep 28, 2023
1 parent 1a61104 commit 71949e2
Show file tree
Hide file tree
Showing 6 changed files with 249 additions and 105 deletions.
24 changes: 22 additions & 2 deletions projects/core/reports/src/report.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,14 @@
*
*/

import {ChangeDetectorRef, Directive, Input} from '@angular/core';
import {AfterViewInit, ChangeDetectorRef, Directive, Input} from '@angular/core';

import {AjfReportInstance} from './interface/reports-instances/report-instance';
import {AjfReport} from './interface/reports/report';
import {exportableWidgetTypes} from './widget-export';

@Directive()
export abstract class AjfReportRenderer {
export abstract class AjfReportRenderer implements AfterViewInit {
private _instance: AjfReportInstance | undefined;
get instance(): AjfReportInstance | undefined {
return this._instance;
Expand All @@ -38,10 +39,29 @@ export abstract class AjfReportRenderer {
this._cdr.markForCheck();
}

@Input() enableExportAll: boolean = false;

private _report: AjfReport | null = null;
get report(): AjfReport | null {
return this._report;
}

private _enableExport: boolean = true;
get enableExport(): boolean {
return this._enableExport;
}

constructor(private _cdr: ChangeDetectorRef) {}

ngAfterViewInit(): void {
this._enableExport =
this.enableExportAll &&
this._instance != null &&
this._instance.content &&
this._instance.content.content &&
this._instance.content.content.some(inst => exportableWidgetTypes.includes(inst.widgetType))
? true
: false;
this._cdr.markForCheck();
}
}
21 changes: 15 additions & 6 deletions projects/core/reports/src/widget-export.html
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
<div class="ajf-widget-wrapper" (mouseenter)="showOverlay = true" (mouseleave)="showOverlay = false" [class.ajf-show-overlay]="showOverlay">
<div class="ajf-widget-wrapper" (mouseenter)="showOverlay = true" (mouseleave)="showOverlay = false"
[class.ajf-show-overlay]="showOverlay">
<ng-content></ng-content>
<div *ngIf="enable" class="ajf-export-menu" [class.ajf-export-menu-overlay]="overlay">
<button (click)="export('csv')">CSV</button>
<button (click)="export('xlsx')">XLSX</button>
</div>
</div>
<ng-container *ngIf="enable">
<div *ngIf="widgets; else single" class="ajf-export-all">
<button (click)="exportAll()">EXPORT XLSX</button>
</div>
<ng-template #single>
<div *ngIf="!widgets; else single" class="ajf-export-menu"
[class.ajf-export-menu-overlay]="overlay">
<button (click)="export('csv')">CSV</button>
<button (click)="export('xlsx')">XLSX</button>
</div>
</ng-template>
</ng-container>
</div>
18 changes: 18 additions & 0 deletions projects/core/reports/src/widget-export.scss
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,24 @@ ajf-widget-export {
height: inherit;
}

.ajf-export-all {
position: absolute;
right: 0;

button {
margin: 0.5em;
border: none;
color: white;
background-color: #4a403f;
padding: 7.5px 16px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
cursor: pointer;
}
}

.ajf-export-menu {
position: absolute;
right: 0;
Expand Down

0 comments on commit 71949e2

Please sign in to comment.