I tried building an CMS app in Angular 5 using Firebase but getting an error in switch map and User interface
switchmap()
unresolvable function or method.Initializer type
uid
,email
etc. can't be assigned to variable typeUser
af.service.ts
import { Injectable } from '@angular/core';
import {AngularFireAuth} from '@angular/fire/auth';
import {Observable, of} from 'rxjs';
import * as firebase from 'firebase/app';
import {AngularFirestore, AngularFirestoreDocument} from '@angular/fire/firestore';
import { switchMap } from 'rxjs/operators';
import { User } from './user';
@Injectable({
providedIn: 'root'
})
export class AfService {
user$: Observable<User>;
constructor( public afAuth: AngularFireAuth,
public afs: AngularFirestore) {
this.user$ = afAuth.authState.switchMap(user => {
if (user) {
return this.afs.doc<User>(`users/$(user.uid)`).valueChanges();
} else {
return of(null);
}
});
}
loginWithGoogle() {
const provider = new firebase.auth.GoogleAuthProvider();
this.afAuth.auth.signInWithPopup(provider).then((credential) => {
this.updateUser(credential.user);
});
}
updateUser(user) {
const userRef: AngularFirestoreDocument<any> = this.afs.doc(`users/$(user.uid)`);
const data: User = {
uid: User.id,
email: User.email,
roles: {
subscriber: true,
admin: false
}
}
return userRef.set(data, {merge: true});
}
logout() {
this.afAuth.auth.signOut();
}
}
user.ts
export interface User {
uid: string;
email: string;
displayName: string;
roles: Roles;
}
export interface Roles {
subscriber?: boolean;
admin?: boolean;
}