forked from MapComplete/MapComplete
Fix: remember previous, externally loaded themes
This commit is contained in:
parent
06f9f2d94c
commit
b61c0a1180
3 changed files with 71 additions and 40 deletions
|
@ -178,12 +178,40 @@ export class OsmPreferences {
|
||||||
content: v
|
content: v
|
||||||
}, function (error) {
|
}, function (error) {
|
||||||
if (error) {
|
if (error) {
|
||||||
console.log(`Could not set preference "${k}"'`, error);
|
console.warn(`Could not set preference "${k}"'`, error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
console.log(`Preference ${k} written!`);
|
console.debug(`Preference ${k} written!`);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ClearPreferences(){
|
||||||
|
let isRunning = false;
|
||||||
|
const self = this;
|
||||||
|
this.preferences.addCallbackAndRun(prefs => {
|
||||||
|
if(Object.keys(prefs).length == 0){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (isRunning) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
isRunning = true
|
||||||
|
const prefixes = ["mapcomplete-installed-theme","mapcomplete-installed-themes-","mapcomplete-current-open-changeset","mapcomplete-personal-theme-layer"]
|
||||||
|
for (const key in prefs) {
|
||||||
|
for (const prefix of prefixes) {
|
||||||
|
// console.log(key)
|
||||||
|
if (key.startsWith(prefix)) {
|
||||||
|
console.log("Clearing ", key)
|
||||||
|
self.GetPreference(key, "").setData("")
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
isRunning = false;
|
||||||
|
return true;
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -32,13 +32,15 @@ export default class UserRelatedState extends ElementsState {
|
||||||
/**
|
/**
|
||||||
* WHich other themes the user previously visited
|
* WHich other themes the user previously visited
|
||||||
*/
|
*/
|
||||||
public installedThemes: UIEventSource<{ id: string, // The id doubles as the URL
|
public installedThemes: UIEventSource<{
|
||||||
|
id: string, // The id doubles as the URL
|
||||||
icon: string,
|
icon: string,
|
||||||
title: any,
|
title: any,
|
||||||
shortDescription: any}[]>;
|
shortDescription: any
|
||||||
|
}[]>;
|
||||||
|
|
||||||
|
|
||||||
constructor(layoutToUse: LayoutConfig, options?:{attemptLogin : true | boolean}) {
|
constructor(layoutToUse: LayoutConfig, options?: { attemptLogin: true | boolean }) {
|
||||||
super(layoutToUse);
|
super(layoutToUse);
|
||||||
|
|
||||||
this.osmConnection = new OsmConnection({
|
this.osmConnection = new OsmConnection({
|
||||||
|
@ -73,46 +75,53 @@ export default class UserRelatedState extends ElementsState {
|
||||||
|
|
||||||
this.installedThemes = this.osmConnection.GetLongPreference("installed-themes").map(
|
this.installedThemes = this.osmConnection.GetLongPreference("installed-themes").map(
|
||||||
str => {
|
str => {
|
||||||
if(str === undefined || str === ""){
|
if (str === undefined || str === "") {
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
try{
|
try {
|
||||||
return JSON.parse(str)
|
return JSON.parse(str);
|
||||||
}catch(e){
|
} catch (e) {
|
||||||
console.warn("Could not parse preference with installed themes due to ", e,"\nThe offending string is",str)
|
console.warn("Could not parse preference with installed themes due to ", e, "\nThe offending string is", str)
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
}, [],(installed => JSON.stringify(installed))
|
}, [], (installed) => JSON.stringify(installed)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
const self = this;
|
const self = this;
|
||||||
this.osmConnection.isLoggedIn.addCallbackAndRunD(loggedIn => {
|
|
||||||
if(!loggedIn){
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.layoutToUse?.id?.startsWith("http")){
|
if (this.layoutToUse?.id?.startsWith("http")) {
|
||||||
if(!this.installedThemes.data.some(installed => installed.id === this.layoutToUse.id)){
|
this.installedThemes.addCallbackAndRun(currentThemes => {
|
||||||
|
if (currentThemes === undefined) {
|
||||||
this.installedThemes.data.push({
|
// We wait till we are logged in
|
||||||
id: this.layoutToUse.id,
|
return
|
||||||
icon: this.layoutToUse.icon,
|
|
||||||
title: this.layoutToUse.title.translations,
|
|
||||||
shortDescription: this.layoutToUse.shortDescription.translations
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
this.installedThemes.ping()
|
|
||||||
console.log("Registered "+this.layoutToUse.id+" as installed themes")
|
if(self.osmConnection.isLoggedIn.data == false){
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentThemes.some(installed => installed.id === this.layoutToUse.id)) {
|
||||||
|
// Already added to the 'installed theme' list
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("Current installed themes are", this.installedThemes.data)
|
||||||
|
currentThemes.push({
|
||||||
|
id: self.layoutToUse.id,
|
||||||
|
icon: self.layoutToUse.icon,
|
||||||
|
title: self.layoutToUse.title.translations,
|
||||||
|
shortDescription: self.layoutToUse.shortDescription.translations
|
||||||
|
})
|
||||||
|
self.installedThemes.ping()
|
||||||
|
console.log("Registered " + self.layoutToUse.id + " as installed themes")
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return true;
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
// Important: the favourite layers are initialized _after_ the installed themes, as these might contain an installedTheme
|
// Important: the favourite layers are initialized _after_ the installed themes, as these might contain an installedTheme
|
||||||
this.favouriteLayers = LocalStorageSource.Get("favouriteLayers")
|
this.favouriteLayers = LocalStorageSource.Get("favouriteLayers")
|
||||||
.syncWith(this.osmConnection.GetLongPreference("favouriteLayers"))
|
.syncWith(this.osmConnection.GetLongPreference("favouriteLayers"))
|
||||||
|
@ -121,7 +130,7 @@ export default class UserRelatedState extends ElementsState {
|
||||||
[],
|
[],
|
||||||
(layers) => Utils.Dedup(layers)?.join(";")
|
(layers) => Utils.Dedup(layers)?.join(";")
|
||||||
);
|
);
|
||||||
|
|
||||||
this.InitializeLanguage();
|
this.InitializeLanguage();
|
||||||
new SelectedElementTagsUpdater(this)
|
new SelectedElementTagsUpdater(this)
|
||||||
|
|
||||||
|
|
6
test.ts
6
test.ts
|
@ -1,6 +0,0 @@
|
||||||
import ValidatedTextField from "./UI/Input/ValidatedTextField";
|
|
||||||
import {VariableUiElement} from "./UI/Base/VariableUIElement";
|
|
||||||
|
|
||||||
const tf = ValidatedTextField.InputForType("url")
|
|
||||||
tf.AttachTo("maindiv")
|
|
||||||
new VariableUiElement(tf.GetValue()).AttachTo("extradiv")
|
|
Loading…
Add table
Add a link
Reference in a new issue