I cannot get the document Id in Firestore. I create a randomly generated document id, however, to add a delete function I need that randomly generated ID and cant figure out how to access it. I could also create a custom document id, however, I cannot figure that out either and get errors. So im trying to either find a way to access the document ID the document ID for each item in the list that is printed out in the for loop of the html. Or to find a way to create the doc ids as something unique such as a parsed image url.
import { Component, OnInit } from '@angular/core';
import { Observable, Subject } from 'rxjs';
import { WebcamImage } from 'ngx-webcam';
import { HttpClient } from '@angular/common/http';
import { visionApi } from 'src/environments/environment';
import { Router } from '@angular/router';
import { AngularFireAuth } from '@angular/fire/auth';
import { AuthorizationService } from '../auth-service.service';
import { AngularFirestoreModule, AngularFirestore, AngularFirestoreCollection } from '@angular/fire/firestore';
import { BusinessCardServiceService } from '../business-card-service.service';
interface BusinessCard {
imageUrl: string;
name: string;
email: string;
phone: string;
fullText: string;
}
@Component({
selector: 'app-root',
templateUrl: './web-cam.component.html',
styleUrls: ['./web-cam.component.scss']
})
export class WebCamComponent implements OnInit {
public showWebcam = true;
public webcamImage: WebcamImage = null;
private trigger: Subject<void> = new Subject<void>();
public base64;
public url = `https://vision.googleapis.com/v1/images:annotate?key=${visionApi.key}`;
public parsedImage;
email: string;
fullText: string;
name: string;
phone: string;
imageUrl: string;
uid = JSON.parse(localStorage.getItem('uid'));
private cardCollection: AngularFirestoreCollection<BusinessCard>;
businessCards: Observable<BusinessCard[]>;
constructor(private http: HttpClient,
public afAuth: AngularFireAuth,
public router: Router,
private dashService: AuthorizationService,
private afs: AngularFirestore,
public bcService: BusinessCardServiceService) {
}
public handleImage(webcamImage: WebcamImage): void {
this.webcamImage = webcamImage;
this.base64 = this.webcamImage.imageAsBase64;
this.imageUrl = this.webcamImage.imageAsDataUrl;
this.parsedImage = this.base64.replace(/^data:image\/(png|jpg|jpeg);base64,/, '');
const request: any = {
'requests': [
{
'image': {
'content': this.parsedImage
},
'features': [
{
'type': 'TEXT_DETECTION'
}
]
}
]
};
console.log(request);
console.log(this.parsedImage);
this.http.post(
this.url,
request
).subscribe((results: any) => {
console.log('RESULTS');
console.log(results);
console.log(results.responses[0].fullTextAnnotation.text);
this.fullText = results.responses[0].fullTextAnnotation.text;
this.email = JSON.stringify(this.fullText.match(/[a-zA-Z0-9-_.]+@[a-zA-Z0-9-_.]+/));
this.name = JSON.stringify(this.fullText.match(/([A-Za-z]+),\\s*([A-Za-z]+)\\s*([A-Za-z]+)/));
this.phone = JSON.stringify(this.fullText.match(/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/));
// tslint:disable-next-line: max-line-length
this.bcService.create(this.fullText, this.email, this.name, this.phone, this.imageUrl, this.uid);
});
}
public ngOnInit(): void {
// tslint:disable-next-line: max-line-length
this.cardCollection = this.afs.collection<BusinessCard>('Users/' + this.uid + '/BusinessCards' + this.uid);
this.businessCards = this.cardCollection.valueChanges();
}
public triggerSnapshot(): void {
this.trigger.next();
}
public get triggerObservable(): Observable<void> {
return this.trigger.asObservable();
}
}
import { Injectable } from '@angular/core';
import { AngularFirestoreModule, AngularFirestore, AngularFirestoreCollection, AngularFirestoreDocument } from '@angular/fire/firestore';
import { Observable } from 'rxjs';
import { WebcamImage } from 'ngx-webcam';
interface BusinessCard {
imageUrl: string;
name: string;
email: string;
phone: string;
fullText: string;
}
@Injectable({
providedIn: 'root'
})
export class BusinessCardServiceService {
uid: string;
email: string;
fullText: string;
name: string;
phone: string;
imageUrl: string;
public webcamImage: WebcamImage = null;
cardObj: string;
cardref: AngularFirestoreCollection<BusinessCard>;
constructor(private afs: AngularFirestore) { }
cardRef: AngularFirestoreCollection<BusinessCard>;
card$: Observable<BusinessCard[]>;
create(fullText: string, email: string, name: string, phone: string, imageUrl: string, uid: string) {
this.fullText = fullText;
this.email = email;
this.name = name;
this.phone = phone;
this.imageUrl = imageUrl;
this.uid = uid;
this.afs.doc('Users/' + this.uid).set({
});
this.afs.collection('Users/' + this.uid + '/BusinessCards' + this.uid).add({
fullText: this.fullText,
name: this.name,
phone: this.phone,
imageUrl: this.imageUrl,
email: this.email,
uid: this.uid
});
}
getCard() {
return this.afs.collection('Users/' + this.uid + '/BusinessCards' + this.uid).snapshotChanges();
}
// deletePolicy(cardId: string){
// this.cardId = cardId
// this.afs.doc('Users/' + this.uid + '/BusinessCards' + this.uid + this.cardId).delete();
}
<ul>
<div *ngFor='let card of businessCards | async'>
<div>{{card.name}} <button class="updateButton">Update Name</button></div>
<div>{{card.email}} <button class="updateButton">Update Email</button></div>
<div>{{card.phone}} <button class="updateButton">Update Phone Number</button></div>
<img [src]='card.imageUrl' />
<div><button class="DeleteButton">Delete Card</button></div>
</div>
</ul>