mirror of
https://github.com/sensebox/blockly-app
synced 2025-07-03 20:00:23 +02:00
error alerts on wrong login
This commit is contained in:
parent
ada52bc23f
commit
2ac250c837
7 changed files with 110 additions and 19 deletions
|
@ -18,7 +18,7 @@ import { MySenseBoxPage } from '../pages/my-sense-box/my-sense-box';
|
||||||
import { LoginProvider } from '../providers/LoginProvider/LoginProvider';
|
import { LoginProvider } from '../providers/LoginProvider/LoginProvider';
|
||||||
import { SensorsPage } from '../pages/sensors/sensors';
|
import { SensorsPage } from '../pages/sensors/sensors';
|
||||||
import { ConfigurationPage } from '../pages/configuration/configuration';
|
import { ConfigurationPage } from '../pages/configuration/configuration';
|
||||||
|
import {ErrorPage} from "../pages/error/error"
|
||||||
// For AoT compilation (production builds) we need to have a factory for the loader of translation files.
|
// For AoT compilation (production builds) we need to have a factory for the loader of translation files.
|
||||||
// @TODO: we possibly could optimize this by using a static loader in combination with webpack:
|
// @TODO: we possibly could optimize this by using a static loader in combination with webpack:
|
||||||
// https://github.com/ngx-translate/http-loader#angular-cliwebpack-translateloader-example
|
// https://github.com/ngx-translate/http-loader#angular-cliwebpack-translateloader-example
|
||||||
|
@ -33,7 +33,8 @@ export function createTranslateLoader(http: HttpClient) {
|
||||||
SensorDetailPage,
|
SensorDetailPage,
|
||||||
MySenseBoxPage,
|
MySenseBoxPage,
|
||||||
SensorsPage,
|
SensorsPage,
|
||||||
ConfigurationPage
|
ConfigurationPage,
|
||||||
|
ErrorPage
|
||||||
],
|
],
|
||||||
imports: [
|
imports: [
|
||||||
HttpClientModule,
|
HttpClientModule,
|
||||||
|
@ -56,7 +57,9 @@ export function createTranslateLoader(http: HttpClient) {
|
||||||
SensorDetailPage,
|
SensorDetailPage,
|
||||||
MySenseBoxPage,
|
MySenseBoxPage,
|
||||||
SensorsPage,
|
SensorsPage,
|
||||||
ConfigurationPage
|
ConfigurationPage,
|
||||||
|
ErrorPage
|
||||||
|
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
StatusBar,
|
StatusBar,
|
||||||
|
|
35
src/pages/error/error.html
Normal file
35
src/pages/error/error.html
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
<!--
|
||||||
|
Generated template for the ErrorPage page.
|
||||||
|
|
||||||
|
See http://ionicframework.com/docs/components/#navigation for more info on
|
||||||
|
Ionic pages and navigation.
|
||||||
|
-->
|
||||||
|
<ion-header>
|
||||||
|
|
||||||
|
<ion-navbar>
|
||||||
|
<ion-title> Error ({{error.message}})</ion-title>
|
||||||
|
</ion-navbar>
|
||||||
|
|
||||||
|
</ion-header>
|
||||||
|
|
||||||
|
<ion-content padding>
|
||||||
|
<ion-grid>
|
||||||
|
<ion-row>
|
||||||
|
There was an error when trying to login. The error code is:<code>{{error.message}}</code>.
|
||||||
|
</ion-row>
|
||||||
|
<ion-row>
|
||||||
|
<p> {{errorMessages[error.message]}} </p>
|
||||||
|
</ion-row>
|
||||||
|
<ion-row>
|
||||||
|
<ion-col col-8>
|
||||||
|
</ion-col>
|
||||||
|
<ion-col col-4>
|
||||||
|
<ion-item>
|
||||||
|
<button full ion-button (click)="dismissModal()" color="secondary">
|
||||||
|
Okay
|
||||||
|
</button>
|
||||||
|
</ion-item>
|
||||||
|
</ion-col>
|
||||||
|
</ion-row>
|
||||||
|
</ion-grid>
|
||||||
|
</ion-content>
|
13
src/pages/error/error.module.ts
Normal file
13
src/pages/error/error.module.ts
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { IonicPageModule } from 'ionic-angular';
|
||||||
|
import { ErrorPage } from './error';
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [
|
||||||
|
ErrorPage,
|
||||||
|
],
|
||||||
|
imports: [
|
||||||
|
IonicPageModule.forChild(ErrorPage),
|
||||||
|
],
|
||||||
|
})
|
||||||
|
export class ErrorPageModule {}
|
3
src/pages/error/error.scss
Normal file
3
src/pages/error/error.scss
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
page-error {
|
||||||
|
|
||||||
|
}
|
33
src/pages/error/error.ts
Normal file
33
src/pages/error/error.ts
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
import { Component } from '@angular/core';
|
||||||
|
import { IonicPage, NavController, NavParams, ViewController } from 'ionic-angular';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generated class for the ErrorPage page.
|
||||||
|
*
|
||||||
|
* See https://ionicframework.com/docs/components/#navigation for more info on
|
||||||
|
* Ionic pages and navigation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@IonicPage()
|
||||||
|
@Component({
|
||||||
|
selector: 'page-error',
|
||||||
|
templateUrl: 'error.html',
|
||||||
|
})
|
||||||
|
export class ErrorPage {
|
||||||
|
public error = this.navParams.data
|
||||||
|
public errorMessages = {
|
||||||
|
403:"Please check your username and password and try again! ",
|
||||||
|
500:"There seems to be no connection to the OSeM"
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(public navCtrl: NavController, public navParams: NavParams,public view: ViewController) {
|
||||||
|
}
|
||||||
|
dismissModal(){
|
||||||
|
this.view.dismiss();
|
||||||
|
}
|
||||||
|
ionViewDidLoad() {
|
||||||
|
console.log('ionViewDidLoad ErrorPage');
|
||||||
|
console.log(this.navParams)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,7 +1,8 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { IonicPage, NavController, NavParams, LoadingController } from 'ionic-angular';
|
import { IonicPage, NavController, NavParams, LoadingController, ModalController } from 'ionic-angular';
|
||||||
import { MySenseBoxPage } from "../my-sense-box/my-sense-box"
|
import { MySenseBoxPage } from "../my-sense-box/my-sense-box"
|
||||||
import { LoginProvider } from "../../providers/LoginProvider/LoginProvider"
|
import { LoginProvider } from "../../providers/LoginProvider/LoginProvider"
|
||||||
|
import { ErrorPage } from '../error/error';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generated class for the LoginPage page.
|
* Generated class for the LoginPage page.
|
||||||
|
@ -21,13 +22,15 @@ export class LoginPage {
|
||||||
private token: string
|
private token: string
|
||||||
private boxes: Object;
|
private boxes: Object;
|
||||||
public loading = false;
|
public loading = false;
|
||||||
|
public error = false;
|
||||||
public errorInput = false;
|
public errorInput = false;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
public navCtrl: NavController,
|
public navCtrl: NavController,
|
||||||
public navParams: NavParams,
|
public navParams: NavParams,
|
||||||
private loginProvider: LoginProvider,
|
private loginProvider: LoginProvider,
|
||||||
public loadingController: LoadingController
|
public loadingController: LoadingController,
|
||||||
|
public modalCtrl : ModalController
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,18 +52,29 @@ export class LoginPage {
|
||||||
try {
|
try {
|
||||||
this.token = await this.loginProvider.login(form.value.email, form.value.password)
|
this.token = await this.loginProvider.login(form.value.email, form.value.password)
|
||||||
this.boxes = await this.loginProvider.getUserBoxes(this.token);
|
this.boxes = await this.loginProvider.getUserBoxes(this.token);
|
||||||
|
this.navCtrl.push(MySenseBoxPage, [this.boxes, this.token]);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
console.log(err.message)
|
console.log(err)
|
||||||
|
this.showModal(err);
|
||||||
}
|
}
|
||||||
loading.dismiss();
|
loading.dismiss();
|
||||||
this.navCtrl.push(MySenseBoxPage, [this.boxes, this.token]);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this.errorInput = true;
|
this.errorInput = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
showModal(message){
|
||||||
|
let modal = this.modalCtrl.create(ErrorPage,message);
|
||||||
|
|
||||||
|
modal.onDidDismiss(()=>{
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
modal.present();
|
||||||
|
}
|
||||||
ionViewDidLoad() {
|
ionViewDidLoad() {
|
||||||
console.log('ionViewDidLoad LoginPage');
|
console.log('ionViewDidLoad LoginPage');
|
||||||
|
|
||||||
|
|
|
@ -19,21 +19,11 @@ export class LoginProvider {
|
||||||
.pipe(timeout(30000))
|
.pipe(timeout(30000))
|
||||||
.toPromise()
|
.toPromise()
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
let msg = err.message
|
console.log(err);
|
||||||
|
let msg = err.status
|
||||||
if (err.name === 'TimeoutError')
|
if (err.name === 'TimeoutError')
|
||||||
msg = 'unable to contact api. are you online?'
|
msg = 'unable to contact api. are you online?'
|
||||||
|
|
||||||
try {
|
|
||||||
// attempt to extract the compilation error message and clean it up
|
|
||||||
console.error(err)
|
|
||||||
msg = JSON.parse(err.error.message)
|
|
||||||
if (msg.process) {
|
|
||||||
msg = `compilation error: ${msg.process.substr(msg.process.indexOf(' '))}`
|
|
||||||
msg = msg.substr(0, msg.indexOf('^'))
|
|
||||||
}
|
|
||||||
} catch (err2) {
|
|
||||||
console.error(err2)
|
|
||||||
}
|
|
||||||
throw Error(msg)
|
throw Error(msg)
|
||||||
})
|
})
|
||||||
// download the resulting sketch binary
|
// download the resulting sketch binary
|
||||||
|
|
Loading…
Add table
Reference in a new issue