ui: better error handing and messaging

This commit is contained in:
Aiden McClelland
2021-03-03 10:06:15 -07:00
committed by Aiden McClelland
parent e69a936fb8
commit 4a2e496e8a

View File

@@ -9,6 +9,8 @@ import { ServiceAction, AppInstalledFull } from 'src/app/models/app-types'
import { PropertySubject } from 'src/app/util/property-subject.util' import { PropertySubject } from 'src/app/util/property-subject.util'
import { map } from 'rxjs/operators' import { map } from 'rxjs/operators'
import { Cleanup } from 'src/app/util/cleanup' import { Cleanup } from 'src/app/util/cleanup'
import { AppStatus } from 'src/app/models/app-model'
import { HttpErrorResponse } from '@angular/common/http'
@Component({ @Component({
selector: 'app-actions', selector: 'app-actions',
@@ -57,9 +59,20 @@ export class AppActionsPage extends Cleanup {
}) })
await alert.present() await alert.present()
} else { } else {
const joinStatuses = (statuses: AppStatus[]) => {
const last = statuses.pop()
let s = statuses.join(', ')
if (last) {
if (statuses.length > 1) { // oxford comma
s += ','
}
s += ` or ${last}`
}
return s
}
const alert = await this.alertCtrl.create({ const alert = await this.alertCtrl.create({
header: 'Forbidden', header: 'Forbidden',
message: `Action "${action.name}" can only be executed when service is ${action.allowedStatuses.join(', ')}`, message: `Action "${action.name}" can only be executed when service is ${joinStatuses(action.allowedStatuses)}`,
buttons: ['OK'], buttons: ['OK'],
cssClass: 'alert-error-message', cssClass: 'alert-error-message',
}) })
@@ -87,11 +100,15 @@ export class AppActionsPage extends Cleanup {
return await successAlert.present() return await successAlert.present()
} }
} catch (e) { } catch (e) {
this.presentAlertActionFail(500, e.message) if (e instanceof HttpErrorResponse) {
this.presentAlertActionFail(e.status, e.message)
} else {
this.presentAlertActionFail(-1, e.toString())
}
} }
} }
private async presentAlertActionFail (code: number, message: string): Promise<void> { private async presentAlertActionFail(code: number, message: string): Promise<void> {
const failureAlert = await this.alertCtrl.create({ const failureAlert = await this.alertCtrl.create({
header: 'Execution Failed', header: 'Execution Failed',
message: `Error code ${code}. ${message}`, message: `Error code ${code}. ${message}`,