Как сделать Angular Data Services динамически? - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь создать сканер кода 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...