mirror of
https://gitlab.com/openstapps/openstapps.git
synced 2026-03-12 01:32:12 +00:00
refactor: initialise settings from config module and persist only the values
Closes #30, #59
This commit is contained in:
@@ -13,14 +13,14 @@
|
||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import {Component, Input} from '@angular/core';
|
||||
import {Geolocation} from '@ionic-native/geolocation/ngx';
|
||||
import {AlertController} from '@ionic/angular';
|
||||
import {LangChangeEvent, TranslateService} from '@ngx-translate/core';
|
||||
import {
|
||||
SCSetting,
|
||||
SCSettingMeta,
|
||||
SCThingTranslator,
|
||||
SCTranslations,
|
||||
} from '@openstapps/core';
|
||||
import {Logger} from '@openstapps/logger';
|
||||
import {SettingsProvider} from '../settings.provider';
|
||||
|
||||
@Component({
|
||||
@@ -31,22 +31,21 @@ export class SettingsItemComponent {
|
||||
isVisible = true;
|
||||
// limit to languages that are available in StApps Core
|
||||
language: keyof SCTranslations<any>;
|
||||
meta = SCSettingMeta;
|
||||
|
||||
logger = new Logger();
|
||||
@Input() setting: SCSetting;
|
||||
translator: SCThingTranslator;
|
||||
|
||||
constructor(private alertCtrl: AlertController,
|
||||
private translateService: TranslateService,
|
||||
private settingsProvider: SettingsProvider,
|
||||
private geoLocation: Geolocation) {
|
||||
this.meta = SCSettingMeta;
|
||||
|
||||
private settingsProvider: SettingsProvider) {
|
||||
this.language = translateService.currentLang as keyof SCTranslations<any>;
|
||||
this.translator = new SCThingTranslator(this.language, 'de');
|
||||
|
||||
translateService.onLangChange.subscribe((event: LangChangeEvent) => {
|
||||
this.isVisible = false;
|
||||
this.language = event.lang as keyof SCTranslations<any>;
|
||||
// workaround for selected 'select option' not updating translation
|
||||
this.translator = new SCThingTranslator(this.language, 'de');
|
||||
// TODO: Issue #53 check workaround for selected 'select option' not updating translation
|
||||
setTimeout(() => this.isVisible = true);
|
||||
});
|
||||
}
|
||||
@@ -56,24 +55,11 @@ export class SettingsItemComponent {
|
||||
* if no permission is granted, setting is set to false and an alert is presented to the user
|
||||
*/
|
||||
private async checkGeoLocationPermission() {
|
||||
// request geoLocation to test the user permission
|
||||
try {
|
||||
// set enableHighAccuracy, otherwise android platform does not respond
|
||||
const options = {
|
||||
enableHighAccuracy: true,
|
||||
};
|
||||
await this.geoLocation.getCurrentPosition(options);
|
||||
} catch (error) {
|
||||
// if error code is 1 the user denied permission,
|
||||
// other errors like 'timeout' or 'no location' will be ignored here
|
||||
if (error.code === 1) {
|
||||
// ios has special error message for disabled location services, for the setting we ignore it
|
||||
if (error.message.toLowerCase() !== 'location services are disabled.') {
|
||||
// revert setting value
|
||||
this.setting.input.value = false;
|
||||
await this.presentGeoLocationAlert();
|
||||
}
|
||||
}
|
||||
const permissionGranted = await this.settingsProvider.checkGeoLocationPermission();
|
||||
if (!permissionGranted) {
|
||||
// revert setting value
|
||||
this.setting.input.value = false;
|
||||
await this.presentGeoLocationAlert();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,8 +67,8 @@ export class SettingsItemComponent {
|
||||
* Shows alert with error message on denied user permission or disabled location services
|
||||
*/
|
||||
private async presentGeoLocationAlert() {
|
||||
const title = this.translateService.instant('settings.geoLocation.permission_denied_title');
|
||||
const message = this.translateService.instant('settings.geoLocation.permission_denied_message');
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -124,7 +110,7 @@ export class SettingsItemComponent {
|
||||
} else {
|
||||
// reset setting
|
||||
this.setting.input.value =
|
||||
await this.settingsProvider.getSettingValue(this.setting.categories[0], this.setting.name);
|
||||
await this.settingsProvider.getValue(this.setting.categories[0], this.setting.name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,15 +1,11 @@
|
||||
<ion-card>
|
||||
<!-- <ion-card-header>
|
||||
<span id="settingTitle" >{{ meta.getFieldValueTranslation(language, 'name', setting) }}</span>
|
||||
</ion-card-header> -->
|
||||
<ion-card-header>
|
||||
<span>{{ translator.translate(setting).name() }}</span>
|
||||
</ion-card-header>
|
||||
<ion-card-content>
|
||||
<!-- <ion-note >{{ meta.getFieldValueTranslation(language, 'description', setting) }}</ion-note> -->
|
||||
<ion-note>{{ translator.translate(setting).description() }}</ion-note>
|
||||
|
||||
<div [ngSwitch]="setting.input.inputType" *ngIf="isVisible" >
|
||||
<ion-item *ngSwitchCase="'toggle'">
|
||||
<ion-label></ion-label>
|
||||
<ion-toggle start [(ngModel)]="setting.input.value" (ionChange)="settingChanged()"></ion-toggle>
|
||||
</ion-item>
|
||||
<ion-item *ngSwitchCase="'number'">
|
||||
<ion-label></ion-label>
|
||||
<ion-input type='number' [(ngModel)]="setting.input.value" value={{setting.input.value}} (ionChange)="settingChanged()"></ion-input>
|
||||
@@ -45,11 +41,6 @@
|
||||
</ion-select-option>
|
||||
</ion-select>
|
||||
</ion-item>
|
||||
|
||||
<span *ngSwitchDefault>
|
||||
<ion-note>no template for {{ setting.name }}</ion-note>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
</ion-card-content>
|
||||
</ion-card>
|
||||
|
||||
Reference in New Issue
Block a user