Studio: first working version for basic layer properties

This commit is contained in:
Pieter Vander Vennet 2023-06-23 16:14:43 +02:00
parent 5a49677d5a
commit f18a2b9184
41 changed files with 4446 additions and 852 deletions

View file

@ -2,6 +2,8 @@ import { OsmConnection } from "../../Logic/Osm/OsmConnection"
import { ConfigMeta } from "./configMeta"
import { Store, UIEventSource } from "../../Logic/UIEventSource"
import { LayerConfigJson } from "../../Models/ThemeConfig/Json/LayerConfigJson"
import { DeleteConfigJson } from "../../Models/ThemeConfig/Json/DeleteConfigJson"
import { Utils } from "../../Utils"
export default class EditLayerState {
public readonly osmConnection: OsmConnection
@ -19,11 +21,60 @@ export default class EditLayerState {
this.featureSwitches = {
featureSwitchIsDebugging: new UIEventSource<boolean>(true),
}
this.configuration.addCallback((config) => console.log("Current config is", config))
this.configuration.addCallback((config) => {
if (
config?.deletion !== undefined &&
(<DeleteConfigJson>config?.deletion)?.neededChangesets === undefined
) {
console.trace("Needed changesets is undefined")
}
console.log("Current config is", Utils.Clone(config))
})
}
public register(path: ReadonlyArray<string | number>, value: Store<any>) {
value.addCallbackAndRun((v) => {
public getCurrentValueFor(path: ReadonlyArray<string | number>): any | undefined {
// Walk the path down to see if we find something
let entry = this.configuration.data
for (let i = 0; i < path.length; i++) {
if (entry === undefined) {
// We reached a dead end - no old vlaue
return undefined
}
const breadcrumb = path[i]
entry = entry[breadcrumb]
}
return entry
}
public register(
path: ReadonlyArray<string | number>,
value: Store<any>,
noInitialSync: boolean = false
): () => void {
const unsync = value.addCallback((v) => this.update(path, v))
if (!noInitialSync) {
this.update(path, value.data)
}
return unsync
}
public getSchemaStartingWith(path: string[]) {
return this.schema.filter(
(sch) =>
!path.some((part, i) => !(sch.path.length > path.length && sch.path[i] === part))
)
}
public getSchema(path: string[]) {
return this.schema.filter(
(sch) =>
sch !== undefined &&
!path.some((part, i) => !(sch.path.length == path.length && sch.path[i] === part))
)
}
private update(path: ReadonlyArray<string | number>, v: any) {
{
let entry = this.configuration.data
for (let i = 0; i < path.length - 1; i++) {
const breadcrumb = path[i]
@ -38,20 +89,6 @@ export default class EditLayerState {
delete entry[path.at(-1)]
}
this.configuration.ping()
})
}
public getSchemaStartingWith(path: string[]) {
return this.schema.filter(
(sch) =>
!path.some((part, i) => !(sch.path.length > path.length && sch.path[i] === part))
)
}
public getSchema(path: string[]) {
return this.schema.filter(
(sch) =>
!path.some((part, i) => !(sch.path.length == path.length && sch.path[i] === part))
)
}
}
}