src/app/manage-learn/shared/components/download-share/download-share.component.ts
selector | download-share |
styleUrls | ./download-share.component.scss |
templateUrl | ./download-share.component.html |
Properties |
|
Methods |
|
Inputs |
constructor(popoverController: PopoverController, socialSharing: SocialSharing, fileTransfer: FileTransfer, platform: Platform, file: File, alertController: AlertController, utils: UtilsService, toast: ToastService, loader: LoaderService, filePath: FilePath, unnatiSrvc: UnnatiDataService, translate: TranslateService, androidPermissions: AndroidPermissions, fileOpener: FileOpener, dhiti: DhitiApiService)
|
||||||||||||||||||||||||||||||||||||||||||||||||
Parameters :
|
config | |
Type : any
|
|
extension | |
Type : string
|
|
interface | |
Type : any
|
|
name | |
Type : {}
|
|
Default value : ['filter']
|
|
showOptions | |
Type : any
|
|
callApi |
callApi()
|
Returns :
any
|
directoryPath |
directoryPath()
|
Returns :
string
|
Async download | ||||
download(share?)
|
||||
Parameters :
Returns :
any
|
openFile | ||||
openFile(res)
|
||||
Parameters :
Returns :
void
|
Async openPopupMenu | ||||
openPopupMenu(ev)
|
||||
Parameters :
Returns :
unknown
|
requestPermission |
requestPermission()
|
Returns :
void
|
share | ||||
share(path)
|
||||
Parameters :
Returns :
void
|
Public alertController |
Type : AlertController
|
Public dhiti |
Type : DhitiApiService
|
Public fileOpener |
Type : FileOpener
|
Public filePath |
Type : FilePath
|
Public loader |
Type : LoaderService
|
Public popoverController |
Type : PopoverController
|
texts |
Type : any
|
Public toast |
Type : ToastService
|
Public unnatiSrvc |
Type : UnnatiDataService
|
Public utils |
Type : UtilsService
|
import { Component, Input } from '@angular/core';
import { LoaderService, ToastService, UtilsService } from '@app/app/manage-learn/core';
import { UnnatiDataService } from '@app/app/manage-learn/core/services/unnati-data.service';
import { AndroidPermissions } from '@ionic-native/android-permissions/ngx';
import { FilePath } from '@ionic-native/file-path/ngx';
import { File } from '@ionic-native/file/ngx';
import { FileTransfer } from '@ionic-native/file-transfer/ngx';
import { SocialSharing } from '@ionic-native/social-sharing/ngx';
import { AlertController, Platform, PopoverController } from '@ionic/angular';
import { TranslateService } from '@ngx-translate/core';
import { FileOpener } from '@ionic-native/file-opener/ngx';
import { DhitiApiService } from '@app/app/manage-learn/core/services/dhiti-api.service';
@Component({
selector: 'download-share',
templateUrl: './download-share.component.html',
styleUrls: ['./download-share.component.scss'],
})
export class DownloadShareComponent {
@Input() interface;
@Input() showOptions;
@Input() name = ['filter'];
@Input() extension: string;
// @Input() downloadUrl: any;
@Input() config: any;
texts: any;
constructor(
public popoverController: PopoverController,
private socialSharing: SocialSharing,
private fileTransfer: FileTransfer,
private platform: Platform,
private file: File,
public alertController: AlertController,
public utils: UtilsService,
public toast: ToastService,
public loader: LoaderService,
public filePath: FilePath,
public unnatiSrvc: UnnatiDataService,
private translate: TranslateService,
private androidPermissions: AndroidPermissions,
public fileOpener: FileOpener,
public dhiti: DhitiApiService
) {
this.translate
.get(['FRMELEMENTS_MSG_ERROR_WHILE_DOWNLOADING', 'FRMELEMENTS_MSG_SUCCESSFULLY DOWNLOADED'])
.subscribe((data) => {
this.texts = data;
});
}
async openPopupMenu(ev) {
const popover = await this.popoverController.create({
component: DownloadShareComponent,
componentProps: {
showOptions: true,
interface: 'simple',
name: this.name,
extension: this.extension,
// downloadUrl: this.downloadUrl,
config: this.config,
},
event: ev,
translucent: true,
});
return await popover.present();
}
callApi() {
this.loader.startLoader();
if (this.config.payload) {
return new Promise(async (resolve, reject) => {
let res = await this.dhiti.post(this.config).toPromise();
this.loader.stopLoader();
if (res.status != 'success' && !res.pdfUrl) {
this.toast.showMessage(this.texts['FRMELEMENTS_MSG_ERROR_WHILE_DOWNLOADING'], 'danger');
reject();
}
resolve(res.pdfUrl);
});
}
return new Promise(async (resolve, reject) => {
let res = await this.unnatiSrvc.get(this.config).toPromise();
this.loader.stopLoader();
if (res.result && !res.result.data && !res.result.data.downloadUrl) {
this.toast.showMessage(this.texts['FRMELEMENTS_MSG_ERROR_WHILE_DOWNLOADING'], 'danger');
reject();
}
resolve(res.result.data.downloadUrl);
});
}
async download(share?) {
let fileName = this.utils.generateFileName(this.name);
fileName = fileName + this.extension;
let url: any = await this.callApi();
if (!url) {
return;
}
const ft = this.fileTransfer.create();
ft.download(url, this.directoryPath() + fileName)
.then(
(res) => {
// this.toast.showMessage(this.texts['FRMELEMENTS_MSG_SUCCESSFULLY DOWNLOADED'])
share ? this.share(res.nativeURL) : this.openFile(res);
},
(err) => {
console.log(err);
this.toast.showMessage(this.texts['FRMELEMENTS_MSG_ERROR_WHILE_DOWNLOADING'], 'danger');
this.requestPermission();
}
)
.finally(() => {
this.interface == 'simple' ? this.popoverController.dismiss() : null; // close the overlay for Simple UI
this.loader.stopLoader();
});
}
requestPermission() {
if (this.platform.is('android')) {
this.androidPermissions.requestPermissions([
this.androidPermissions.PERMISSION.READ_EXTERNAL_STORAGE,
this.androidPermissions.PERMISSION.WRITE_EXTERNAL_STORAGE,
]);
}
}
share(path) {
this.socialSharing.share(null, null, path, null);
}
directoryPath(): string {
if (this.platform.is('ios')) {
return this.file.documentsDirectory;
} else {
return this.file.externalDataDirectory;
}
}
openFile(res) {
this.fileOpener
.open(res.nativeURL, 'application/pdf')
.then(() => {
console.log('File is opened');
})
.catch((e) => console.log('Error opening file', e));
}
}
<div *ngIf="interface == 'simple'">
<ion-icon
name="ellipsis-vertical-outline"
color="primary"
(click)="openPopupMenu($event)"
*ngIf="!showOptions"
style="font-size: 20px"
></ion-icon>
<ion-list *ngIf="showOptions">
<ion-item button (click)="download(true)"> {{ 'FRMELEMNTS_LBL_SHARE' | translate }}</ion-item>
<ion-item button (click)="download()">{{ 'FRMELEMNTS_LBL_DOWNLOAD' | translate }}</ion-item>
</ion-list>
</div>
<!-- Fab button round UI ,pass interface= fab-->
<div *ngIf="interface == 'fab'">
<ion-fab vertical="bottom" horizontal="end" slot="fixed">
<ion-fab-button size="small">
<ion-icon name="ellipsis-vertical-outline"></ion-icon>
</ion-fab-button>
<ion-fab-list side="start">
<ion-fab-button color="medium" (click)="download('share')">
<ion-icon name="share"></ion-icon>
</ion-fab-button>
<ion-fab-button color="medium" (click)="download()">
<ion-icon name="download"></ion-icon>
</ion-fab-button>
</ion-fab-list>
</ion-fab>
</div>
./download-share.component.scss