allfree-angular-frontend / src / app / _services / firebase-service / file-upload.service.ts
file-upload.service.ts
Raw
import { Injectable } from '@angular/core';
import { FileUpload } from '../../models/file-upload';
import { Observable } from 'rxjs';
import { AngularFireDatabase, AngularFireList } from '@angular/fire/database';
import { AngularFireStorage } from '@angular/fire/storage';
import {delay, finalize, timeout} from 'rxjs/operators';
import {ArticlesService} from '../article-service/articles.service';
import {Article} from '../../models/models';
import {createUrlResolverWithoutPackagePrefix} from '@angular/compiler';

@Injectable({
  providedIn: 'root'
})
export class FileUploadService {
  private basePath = '/imagess';
  currentUrl: string;


  constructor(private db: AngularFireDatabase,
              private storage: AngularFireStorage,
              private articleService: ArticlesService) { }

  pushFileToStorage(fileUpload: FileUpload): Observable<number> {
    const filePath = `${this.basePath}/${fileUpload.file.name}`;
    const storageRef = this.storage.ref(filePath);
    const uploadTask = this.storage.upload(filePath, fileUpload.file);
    delay(500);
    uploadTask.snapshotChanges().pipe(
      finalize(() => {
        storageRef.getDownloadURL().subscribe(downloadURL => {
          fileUpload.url = downloadURL;
          this.saveFileData(fileUpload);
        });
      })).subscribe();
    return uploadTask.percentageChanges();
  }
   saveFileData(fileUpload: FileUpload): void {
    // console.log(fileUpload);
     this.db.list(this.basePath).push(fileUpload);
    this.articleService.updateArticlePhotoUrlByID(fileUpload.articleId, fileUpload.url);
    // this.test(fileUpload);
    console.log("called");
  }
  test(fileUpload: FileUpload) {
    this.articleService.updateArticlePhotoUrlByID(fileUpload.articleId, fileUpload.url);
    console.log(fileUpload);
  }

  getFiles(numberItems: number): AngularFireList<FileUpload> {
    return this.db.list(this.basePath);
  }
  // deleteFile(fileUpload: FileUpload): void {
    // this.deleteFileDatabase(fileUpload.key)
    //   .then(() => {
    //     this.deleteFileStorage(fileUpload.name);
    //   })
    //   .catch(error => console.log(error));
  // }
  // private deleteFileDatabase(key: string): Promise<void> {
  //   return this.db.list(this.basePath).remove(key);
  // }
  // private deleteFileStorage(name: string): void {
  //   const storageRef = this.storage.ref(this.basePath);
  //   storageRef.child(name).delete();
  // }
}