refactor: adjust code after upgrade of ionic from v4 to v5

Note: used observables instead of events service which
doesn't exist in ionic 5 anymore.
This commit is contained in:
Jovan Krunić
2020-10-28 16:48:24 +01:00
committed by Rainer Killinger
parent cc357f36b6
commit 2e8d717607
7 changed files with 3129 additions and 7378 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2018, 2019 StApps
* Copyright (C) 2018, 2019, 2020 StApps
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, version 3.
@@ -17,7 +17,7 @@ import {NgModule} from '@angular/core';
import {FormsModule} from '@angular/forms';
import {RouterModule, Routes} from '@angular/router';
import {Geolocation} from '@ionic-native/geolocation/ngx';
import {Events, IonicModule} from '@ionic/angular';
import {IonicModule} from '@ionic/angular';
import {TranslateModule} from '@ngx-translate/core';
import {ConfigProvider} from '../config/config.provider';
@@ -49,7 +49,6 @@ const settingsRoutes: Routes = [
],
providers: [
ConfigProvider,
Events,
Geolocation,
SettingsProvider,
],

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2019 StApps
* Copyright (C) 2019, 2020 StApps
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, version 3.
@@ -14,13 +14,13 @@
*/
import {Injectable} from '@angular/core';
import {Geolocation} from '@ionic-native/geolocation/ngx';
import {Events} from '@ionic/angular';
import {
SCSetting,
SCSettingValue,
SCSettingValues,
} from '@openstapps/core';
import deepMerge from 'deepmerge';
import {Subject} from 'rxjs';
import {ConfigProvider} from '../config/config.provider';
import {StorageProvider} from '../storage/storage.provider';
@@ -63,11 +63,43 @@ export interface SettingValueContainer {
[key: string]: SCSettingValue | SCSettingValue[] | undefined;
}
/**
* Structure of the settings events
*/
export interface SettingsAction {
/**
* Data related to the action
*/
payload?: {
/**
* Setting category
*/
category: string;
/**
* Setting name
*/
name: string;
/**
* Setting value
*/
value: SCSettingValue | SCSettingValues;
};
/**
* Type of the settings action
*/
type: string;
}
/**
* Provider for app settings
*/
@Injectable()
export class SettingsProvider {
/**
* Source of settings actions
*/
private settingsActionSource = new Subject<SettingsAction>();
/**
* Order of the setting categories
*/
@@ -76,6 +108,10 @@ export class SettingsProvider {
* Is provider initialized
*/
initialized = false;
/**
* Settings actions observable
*/
settingsActionChanged$ = this.settingsActionSource.asObservable();
/**
* Cache for the imported settings
*/
@@ -165,12 +201,10 @@ export class SettingsProvider {
* @param storage TODO
* @param configProvider TODO
* @param geoLocation TODO
* @param events TODO
*/
constructor(private readonly storage: StorageProvider,
private readonly configProvider: ConfigProvider,
private readonly geoLocation: Geolocation,
private readonly events: Events) {
private readonly geoLocation: Geolocation) {
this.categoriesOrder = [];
this.settingsCache = {};
}
@@ -251,7 +285,7 @@ export class SettingsProvider {
}
this.initialized = true;
// publish provider initialised
this.events.publish('stapps.settings.initialised');
this.settingsActionSource.next({type: 'stapps.settings.initialized'});
}
/**
@@ -435,7 +469,7 @@ export class SettingsProvider {
this.settingsCache[category].settings[name].value = value;
await this.saveSettingValues();
// publish setting changes
this.events.publish('stapps.settings.changed', category, name, value);
this.settingsActionSource.next({type: 'stapps.settings.changed', payload: {category, name, value}});
} else {
throw new Error(`Value "${value}" of type
${typeof value} is not valid for ${setting.inputType}`);