Как отфильтровать данные из документа Firebase? - PullRequest
0 голосов
/ 10 июля 2019

Я получаю доступ к данным из документа Firebase, который называется «рецепт», однако я новичок в angular и не могу найти решение для фильтрации данных по (start_date, date_final, Patient_name и name_prescription). Я использую фреймворк для мобильного устройства ionic4.

HTML =>

<ion-list>
    <ion-item *ngFor="let prescricao of filteredPrescricoes">
      <ng-container *ngIf="prescricao.nome !== ''; else elseTemplate">
        <ion-label> {{ prescricao.nome }} </ion-label>
      </ng-container>

      <ng-template #elseTemplate>
        <ion-label>Prescrição sem nome</ion-label>
      </ng-template>
    </ion-item>
  </ion-list>

TypeScript =>

ngOnInit() {
    this.firestoreService
      .getCollection('prescricao')
      .pipe(takeUntil(this.unsubscribeAll))
      .subscribe(prescricao => {
        this.prescricoes = prescricao;
        this.loading = false;
        this.filteredPrescricoes = this.prescricoes;
      });
  }

public getCollection(coll: string, where?: any): Observable<any[]> {
    if (where) {
      return this._angularFirestore.
        collection(this._collections.getColl(coll),
          ref => ref.where(where.field, '==', where.value)).
        snapshotChanges().pipe(
          map(actions => actions.map(a => {
            const data = a.payload.doc.data() as any;
            data.id = a.payload.doc.id;
            return data;
          }))
        );
    } else {
      return this._angularFirestore.
        collection(this._collections.getColl(coll)).
        snapshotChanges().pipe(
          map(actions => actions.map(a => {
            const data = a.payload.doc.data() as any;
            data.id = a.payload.doc.id;
            return data;
          }))
        );
    }
  }


    const alert = await this._alertController.create({
      header: 'Filtro',
      cssClass: 'ion-text-center',
      inputs: [
        {
          placeholder: 'Data inicial',
          label: 'Data inicial',
          name: 'data_inicial',
          type: 'date'
        },
        {
          placeholder: 'Data final',
          label: 'Data final',
          name: 'data_final',
          type: 'date'
        },
        {
          placeholder: 'Nome do paciente',
          label: 'Informe o nome do paciente',
          name: 'nome_paciente',
          type: 'text'
        },
        {
          placeholder: 'Nome da prescrição',
          label: 'Informe o nome do prescrição',
          name: 'nome_prescricao',
          type: 'text'
        }
      ],
      buttons: [
        {
          text: 'Filtrar',
          handler: (data) => {
            if (data.data_inicial
              && data.data_final) {
              const dataInicial = this.datePipe.transform(data.data_inicial, 'dd-MM-yyyy');
              const dataFinal = this.datePipe.transform(data.data_final, 'dd-MM-yyyy');
            }
          }
        }
      ]
    });

    await alert.present();
  }

Мне нужно, чтобы он принес мне только рецепты, срок которых находится в пределах поля от начальной даты до конечной даты, с указанием имени пациента и названия рецепта.

...