Я пытаюсь создать сканер кода qr с базами данных Ionic, Angular и Firebase Realtime.
Я хочу динамически вставлять пользовательские данные для разных организаций при регистрации.
signup.page.ts
import { Component, OnInit } from '@angular/core';
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
import { Router } from '@angular/router';
import { DataServiceService } from '../../app/data-service.service';
import { AuthenticateService } from '../authentication.service';
import { ToastController, LoadingController } from '@ionic/angular';
@Component({
selector: 'app-signup',
templateUrl: './signup.page.html',
styleUrls: ['./signup.page.scss'],
})
export class SignupPage implements OnInit {
organizations: any;
signupError: string;
signupForm: FormGroup;
toast: any;
constructor(fb: FormBuilder,
private router: Router,
public dataService: DataServiceService,
private authService: AuthenticateService,
public toastCtrl: ToastController,
public loadingCtrl: LoadingController) {
this.signupForm = fb.group({
organization: ['', Validators.compose([Validators.required])],
userName: ['', Validators.compose([Validators.required])],
email: ['', Validators.compose([Validators.required, Validators.email])],
password: ['', Validators.compose([Validators.required, Validators.minLength(6)])]
});
this.dataService.getOrganizations()
.subscribe((response) => {
this.organizations = response;
console.table(this.organizations);
});
}
ngOnInit() {
}
signupUser() {
const data = this.signupForm.value;
console.log(data);
if (!data.email) {
return;
}
this.loadingCtrl.create({
message: 'Loading...'
}).then((res) => {
res.present();
});
const signupData: any = {
organization: data.organization,
userName: data.userName,
email: data.email,
password: data.password
};
this.authService.registerUser(signupData)
.then(res => {
console.log(res);
this.loadingCtrl.dismiss();
signupData.uId = res.user.uid;
this.dataService.insertUser(signupData)
.subscribe((response) => {
console.log(`User inserted in FB`);
this.router.navigateByUrl('/tabs');
});
}, err => {
console.log(err);
this.loadingCtrl.dismiss();
this.toast = this.toastCtrl.create({
message: err.message,
duration: 2000
}).then((toastData) => {
// console.log(toastData);
toastData.present();
});
});
}
}
data-service.service.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { environment } from '../environments/environment';
// import * as firebase from 'firebase/app';
@Injectable({
providedIn: 'root'
})
export class DataServiceService {
userId: string;
userName: any;
orgId = "dHxSdfG5Wh9NGljT6wRJPIvErm2";
databaseUrl = environment.firebase.databaseURL;
constructor(private http: HttpClient) {
console.log('Hello DataServiceService Provider');
console.log(this.databaseUrl);
this.userId = localStorage.getItem('userId');
console.log('userId ', this.userId);
}
setUserId(userId: string) {
console.log('setUserId ', this.userId);
this.userId = userId;
localStorage.setItem('userId', userId);
}
getUserId() {
return this.userId;
}
getUserName() {
return this.userName;
}
setUserName(userName: string) {
this.userName = userName;
}
getProducts() {
return this.http.get(`${this.databaseUrl}/products/.json`);
}
// Inser user information into FB
// signup.page.ts
// insertUser(data: { uId: any; }) {
// return this.http.put(`${this.databaseUrl}/users/${data.uId}.json`, data);
// }
insertUser(data: { uId: any; }) {
return this.http.put(`${this.databaseUrl}/organizationData/${this.orgId}/users/${data.uId}.json`, data);
}
// signup.page.ts;
getOrganizations() {
return this.http.get(`${this.databaseUrl}/organizations/.json`);
}
// Get user information
fetchUserName() {
return this.http.get(`${this.databaseUrl}/users/${this.userId}/userName/.json`);
}
getUserOrgId() {
return this.http.get(`${this.databaseUrl}/users/${this.userId}/orgId/.json`);
}
getUserEmail() {
return this.http.get(`${this.databaseUrl}/users/${this.userId}/email/.json`);
}
// API to insert and get product views with firebase generated key
insertProductViewAnalytics(data: any) {
return this.http.post(`${this.databaseUrl}/users/${this.userId}/product_views.json`, data);
}
getProductViewsForUser() {
return this.http.get(`${this.databaseUrl}/users/${this.userId}/product_views/.json`);
}
// an API to insert product views with custom timestamp based key
insertProductViewAnalyticsTimestamp(data: { scannedAt: any; }) {
// tslint:disable-next-line: max-line-length
return this.http.put(`${this.databaseUrl}/product_views_timestamp/${data.scannedAt}.json`, data);
}
}
Вместо этого: orgId = "dHxSdfG5Wh9NGljT6wRJPIvErm2";
Я хочу получить orgId динамически. Он уже работает с userId / uId.