fix: update core and apply stricter tslint rules

This commit is contained in:
Michel Jonathan Schmitz
2019-07-10 12:38:29 +02:00
parent 03c317430a
commit 911492d064
67 changed files with 1291 additions and 507 deletions

View File

@@ -17,34 +17,56 @@ import {AlertController} from '@ionic/angular';
import {LangChangeEvent, TranslateService} from '@ngx-translate/core';
import {
SCSetting,
SCSettingValue,
SCSettingValues,
SCThingTranslator,
SCTranslations,
} from '@openstapps/core';
import {Logger} from '@openstapps/logger';
import {SettingsProvider} from '../settings.provider';
/**
* TODO
*/
@Component({
selector: 'stapps-settings-item',
templateUrl: 'settings-item.html',
})
export class SettingsItemComponent {
/**
* TODO
*/
isVisible = true;
// limit to languages that are available in StApps Core
/**
* TODO
*
* limit to languages that are available in StApps Core
*/
language: keyof SCTranslations<any>;
logger = new Logger();
/**
* TODO
*/
@Input() setting: SCSetting;
/**
* TODO
*/
translator: SCThingTranslator;
constructor(private alertCtrl: AlertController,
private translateService: TranslateService,
private settingsProvider: SettingsProvider) {
/**
*
* @param alertCtrl TODO
* @param translateService TODO
* @param settingsProvider TODO
*/
constructor(private readonly alertCtrl: AlertController,
private readonly translateService: TranslateService,
private readonly settingsProvider: SettingsProvider) {
this.language = translateService.currentLang as keyof SCTranslations<any>;
this.translator = new SCThingTranslator(this.language, 'de');
this.translator = new SCThingTranslator(this.language);
translateService.onLangChange.subscribe((event: LangChangeEvent) => {
this.isVisible = false;
this.language = event.lang as keyof SCTranslations<any>;
this.translator = new SCThingTranslator(this.language, 'de');
this.translator = new SCThingTranslator(this.language);
// TODO: Issue #53 check workaround for selected 'select option' not updating translation
setTimeout(() => this.isVisible = true);
});
@@ -58,7 +80,7 @@ export class SettingsItemComponent {
const permissionGranted = await this.settingsProvider.checkGeoLocationPermission();
if (!permissionGranted) {
// revert setting value
this.setting.input.value = false;
this.setting.value = false;
await this.presentGeoLocationAlert();
}
}
@@ -67,8 +89,10 @@ export class SettingsItemComponent {
* Shows alert with error message on denied user permission or disabled location services
*/
private async presentGeoLocationAlert() {
const title = await this.translateService.get('settings.geoLocation.permission_denied_title').toPromise();
const message = await this.translateService.get('settings.geoLocation.permission_denied_message').toPromise();
const title = await this.translateService.get('settings.geoLocation.permission_denied_title')
.toPromise();
const message = await this.translateService.get('settings.geoLocation.permission_denied_message')
.toPromise();
await this.presentAlert(title, message);
}
@@ -91,29 +115,34 @@ export class SettingsItemComponent {
* Handles value changes of the setting
*/
async settingChanged(): Promise<void> {
if (typeof this.setting.input.value !== 'undefined'
&& SettingsProvider.validateValue(this.setting, this.setting.input.value)) {
if (typeof this.setting.value !== 'undefined'
&& SettingsProvider.validateValue(this.setting, this.setting.value)) {
// handle general settings, with special actions
switch (this.setting.name) {
case 'language':
this.translateService.use(this.setting.input.value.toString());
this.translateService.use(this.setting.value.toString());
break;
case 'geoLocation':
if (this.setting.input.value) {
if (this.setting.value) {
await this.checkGeoLocationPermission();
}
break;
default:
}
await this.settingsProvider
.setSettingValue(this.setting.categories[0], this.setting.name, this.setting.input.value);
.setSettingValue(this.setting.categories[0], this.setting.name, this.setting.value);
} else {
// reset setting
this.setting.input.value =
await this.settingsProvider.getValue(this.setting.categories[0], this.setting.name);
this.setting.value =
await this.settingsProvider
.getValue(this.setting.categories[0], this.setting.name) as (SCSettingValue | SCSettingValues);
}
}
/**
* TODO
*/
// tslint:disable-next-line:prefer-function-over-method
typeOf(val: any) {
return typeof (val);
}

View File

@@ -5,27 +5,27 @@
<ion-card-content>
<ion-note>{{ translator.translate(setting).description() }}</ion-note>
<div [ngSwitch]="setting.input.inputType" *ngIf="isVisible" >
<div [ngSwitch]="setting.inputType" *ngIf="isVisible" >
<ion-item *ngSwitchCase="'number'">
<ion-label></ion-label>
<ion-input type='number' [(ngModel)]="setting.input.value" value={{setting.input.value}} (ionChange)="settingChanged()"></ion-input>
<ion-input type='number' [(ngModel)]="setting.value" value={{setting.value}} (ionChange)="settingChanged()"></ion-input>
</ion-item>
<ion-item *ngSwitchCase="'text'">
<ion-label></ion-label>
<ion-input type="text" [(ngModel)]="setting.input.value" value={{setting.input.value}} (ionChange)="settingChanged()"></ion-input>
<ion-input type="text" [(ngModel)]="setting.value" value={{setting.value}} (ionChange)="settingChanged()"></ion-input>
</ion-item>
<ion-item *ngSwitchCase="'password'">
<ion-label></ion-label>
<ion-input type="password" [(ngModel)]="setting.input.value" value={{setting.input.value}} (ionChange)="settingChanged()"></ion-input>
<ion-input type="password" [(ngModel)]="setting.value" value={{setting.value}} (ionChange)="settingChanged()"></ion-input>
</ion-item>
<ion-item *ngSwitchCase="'singleChoice'">
<ion-label></ion-label>
<ion-toggle *ngIf="typeOf(setting.input.defaultValue) === 'boolean'" [(ngModel)]="setting.input.value" (ionChange)="settingChanged()"></ion-toggle>
<ion-select *ngIf="typeOf(setting.input.defaultValue) !== 'boolean'" interface="popover" [(ngModel)]="setting.input.value" (ionChange)="settingChanged()">
<ion-select-option *ngFor="let val of setting.input.values" [value]="val">
<ion-toggle *ngIf="typeOf(setting.defaultValue) === 'boolean'" [(ngModel)]="setting.value" (ionChange)="settingChanged()"></ion-toggle>
<ion-select *ngIf="typeOf(setting.defaultValue) !== 'boolean'" interface="popover" [(ngModel)]="setting.value" (ionChange)="settingChanged()">
<ion-select-option *ngFor="let val of setting.values" [value]="val">
<div *ngIf="typeOf(val) !== 'number'">{{ val }}</div>
<div *ngIf="typeOf(val) === 'number'">{{ val }}</div>
</ion-select-option>
@@ -34,8 +34,8 @@
<ion-item *ngSwitchCase="'multipleChoice'">
<ion-label></ion-label>
<ion-select [(ngModel)]="setting.input.value" multiple="true" (ionChange)="settingChanged()">
<ion-select-option *ngFor="let val of setting.input.values" [value]="val">
<ion-select [(ngModel)]="setting.value" multiple="true" (ionChange)="settingChanged()">
<ion-select-option *ngFor="let val of setting.values" [value]="val">
<div *ngIf="typeOf(val) !== 'number'">{{ val }}</div>
<div *ngIf="typeOf(val) === 'number'">{{ val }}</div>
</ion-select-option>