Estou conseguindo salvar, vejo os dados na tabela quando inspeciono, mas sempre recebo a mensagem de erro.
Inclusive, no meu vs code, está marcando o conteúdo do mergeMap como se tivesse errado.
cadastro.ts
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, AlertController, Alert } from 'ionic-angular';
import { Carro } from '../../app/modelos/carro';
import { AgendamentosServiceProvider } from '../../providers/agendamentos-service/agendamentos-service';
import { HomePage } from '../home/home';
import { Agendamento } from '../../app/modelos/agendamento';
import { Storage } from '@ionic/storage';
import { Observable } from 'rxjs/Observable';
@IonicPage()
@Component({
selector: 'page-cadastro',
templateUrl: 'cadastro.html',
})
export class CadastroPage {
public carro: Carro;
public precoTotal: number;
public nome: string = "";
public endereco: string = "";
public email: string = "";
public data: string = new Date().toISOString();
private _alerta: Alert;
constructor(public navCtrl: NavController,
public navParams: NavParams,
private _agendamentosService: AgendamentosServiceProvider,
private _alertCtrl: AlertController,
private _storage: Storage,
) {
this.carro = this.navParams.get('carroSelecionado');
this.precoTotal = this.navParams.get('precoTotal');
}
agenda(){
if(!this.nome || !this.email || !this.endereco || !this.data){
this._alertCtrl.create({
title: 'Preenchimento Obrigatóeio!',
subTitle: 'Preencha todos os campos.',
buttons: [{
text: 'ok',
}],
}).present();
return null;
}
this._alerta = this._alertCtrl.create({
title: 'Aviso',
buttons: [{
text: 'ok',
handler: () => {
this.navCtrl.setRoot(HomePage)
}
}]
});
let agendamento: Agendamento = {
nomeCliente: this.nome,
enderecoCliente: this.endereco,
emailCLiente: this.email,
modeloCarro: this.carro.nome,
data: this.data,
precoTotal: this.precoTotal,
confirmado: false,
enviado: false,
}
let mensagem = '';
this._agendamentosService.agenda(agendamento)
.mergeMap(() => this.salva(agendamento))
.finally(
() => {
this._alerta.setSubTitle(mensagem);
this._alerta.present();
}
).subscribe(
() => mensagem = 'Agendamento concluído com sucesso.',
() => mensagem = 'Ocorreu um problema.'
);
}
salva(agendamento) {
let chave = this.email+this.data.substr(0, 10);
let promise = this._storage.set(chave, agendamento);
Observable.fromPromise(promise);
}
}
agendamento-service.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class AgendamentosServiceProvider {
private _url= 'http://localhost:8080/api';
constructor(private _http: HttpClient) {
}
agenda(agendamento){
return this._http
.post(this._url+'/agendamento/agenda', agendamento)
.do(() => agendamento.enviado = true);
}
}