forked from MapComplete/MapComplete
Refactoring: use more accurate context in conversion, fix tests
This commit is contained in:
parent
86d0de3806
commit
f77d99f8ed
43 changed files with 999 additions and 367 deletions
|
|
@ -11,7 +11,8 @@
|
|||
|
||||
const layerSchema: ConfigMeta[] = <any>layerSchemaRaw;
|
||||
let state = new EditLayerState(layerSchema);
|
||||
export let initialLayerConfig: Partial<LayerConfigJson> = {}
|
||||
const messages = state.messages;
|
||||
export let initialLayerConfig: Partial<LayerConfigJson> = {};
|
||||
state.configuration.setData(initialLayerConfig);
|
||||
const configuration = state.configuration;
|
||||
new LayerStateSender("http://localhost:1235", state);
|
||||
|
|
@ -19,7 +20,7 @@
|
|||
* Blacklist of regions for the general area tab
|
||||
* These are regions which are handled by a different tab
|
||||
*/
|
||||
const regionBlacklist = ["hidden", undefined, "infobox", "tagrenderings", "maprendering", "editing", "title","linerendering","pointrendering"];
|
||||
const regionBlacklist = ["hidden", undefined, "infobox", "tagrenderings", "maprendering", "editing", "title", "linerendering", "pointrendering"];
|
||||
const allNames = Utils.Dedup(layerSchema.map(meta => meta.hints.group));
|
||||
|
||||
const perRegion: Record<string, ConfigMeta[]> = {};
|
||||
|
|
@ -49,7 +50,7 @@
|
|||
<div slot="title1">Information panel (questions and answers)</div>
|
||||
<div slot="content1">
|
||||
<Region configs={perRegion["title"]} {state} title="Popup title" />
|
||||
<Region configs={perRegion["tagrenderings"]} {state} title="Popup contents"/>
|
||||
<Region configs={perRegion["tagrenderings"]} {state} title="Popup contents" />
|
||||
<Region configs={perRegion["editing"]} {state} title="Other editing elements" />
|
||||
</div>
|
||||
|
||||
|
|
@ -58,7 +59,7 @@
|
|||
<Region configs={perRegion["linerendering"]} {state} />
|
||||
<Region configs={perRegion["pointrendering"]} {state} />
|
||||
</div>
|
||||
|
||||
|
||||
<div slot="title3">Advanced functionality</div>
|
||||
<div slot="content3">
|
||||
<Region configs={perRegion["advanced"]} {state} />
|
||||
|
|
@ -73,6 +74,12 @@
|
|||
<div class="literal-code">
|
||||
{JSON.stringify($configuration, null, " ")}
|
||||
</div>
|
||||
{#each $messages as message}
|
||||
<li>
|
||||
<span class="literal-code">{message.context.path.join(".")}</span>
|
||||
{message.message}
|
||||
</li>
|
||||
{/each}
|
||||
</div>
|
||||
</TabbedGroup>
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,16 @@ import { ConfigMeta } from "./configMeta"
|
|||
import { Store, UIEventSource } from "../../Logic/UIEventSource"
|
||||
import { LayerConfigJson } from "../../Models/ThemeConfig/Json/LayerConfigJson"
|
||||
import { QueryParameters } from "../../Logic/Web/QueryParameters"
|
||||
import {
|
||||
ConversionContext,
|
||||
ConversionMessage,
|
||||
DesugaringContext,
|
||||
Pipe,
|
||||
} from "../../Models/ThemeConfig/Conversion/Conversion"
|
||||
import { PrepareLayer } from "../../Models/ThemeConfig/Conversion/PrepareLayer"
|
||||
import { ValidateLayer } from "../../Models/ThemeConfig/Conversion/Validation"
|
||||
import { AllSharedLayers } from "../../Customizations/AllSharedLayers"
|
||||
import { QuestionableTagRenderingConfigJson } from "../../Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson"
|
||||
|
||||
/**
|
||||
* Sends changes back to the server
|
||||
|
|
@ -16,7 +26,7 @@ export class LayerStateSender {
|
|||
console.log("No id found in layer, not updating")
|
||||
return
|
||||
}
|
||||
const response = await fetch(`${serverLocation}/layers/${id}/${id}.json`, {
|
||||
const fresponse = await fetch(`${serverLocation}/layers/${id}/${id}.json`, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json;charset=utf-8",
|
||||
|
|
@ -36,6 +46,7 @@ export default class EditLayerState {
|
|||
public readonly configuration: UIEventSource<Partial<LayerConfigJson>> = new UIEventSource<
|
||||
Partial<LayerConfigJson>
|
||||
>({})
|
||||
public readonly messages: Store<ConversionMessage[]>
|
||||
|
||||
constructor(schema: ConfigMeta[]) {
|
||||
this.schema = schema
|
||||
|
|
@ -49,6 +60,30 @@ export default class EditLayerState {
|
|||
this.featureSwitches = {
|
||||
featureSwitchIsDebugging: new UIEventSource<boolean>(true),
|
||||
}
|
||||
let state: DesugaringContext
|
||||
{
|
||||
const layers = AllSharedLayers.getSharedLayersConfigs()
|
||||
const questions = layers.get("questions")
|
||||
const sharedQuestions = new Map<string, QuestionableTagRenderingConfigJson>()
|
||||
for (const question of questions.tagRenderings) {
|
||||
sharedQuestions.set(question["id"], <QuestionableTagRenderingConfigJson>question)
|
||||
}
|
||||
state = {
|
||||
tagRenderings: sharedQuestions,
|
||||
sharedLayers: layers,
|
||||
}
|
||||
}
|
||||
this.messages = this.configuration.map((config) => {
|
||||
const context = ConversionContext.construct([], ["prepare"])
|
||||
|
||||
const prepare = new Pipe(
|
||||
new PrepareLayer(state),
|
||||
new ValidateLayer("dynamic", false, undefined)
|
||||
)
|
||||
prepare.convert(<LayerConfigJson>config, context)
|
||||
console.log(context.messages)
|
||||
return context.messages
|
||||
})
|
||||
console.log("Configuration store:", this.configuration)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -85,11 +85,11 @@
|
|||
);
|
||||
}
|
||||
const config = new TagRenderingConfig(configJson, "config based on " + schema.path.join("."));
|
||||
let chosenOption: number = writable(defaultOption);
|
||||
let chosenOption: number = (defaultOption);
|
||||
|
||||
|
||||
const existingValue = state.getCurrentValueFor(path);
|
||||
console.log("Initial value is", existingValue);
|
||||
console.log("Initial, existing value for", path.join(".") ,"is", existingValue);
|
||||
if (hasBooleanOption >= 0 && (existingValue === true || existingValue === false)) {
|
||||
tags.setData({ value: "" + existingValue });
|
||||
} else if (lastIsString && typeof existingValue === "string") {
|
||||
|
|
@ -135,6 +135,8 @@
|
|||
}
|
||||
} else if (defaultOption !== undefined) {
|
||||
tags.setData({ chosen_type_index: "" + defaultOption });
|
||||
}else{
|
||||
chosenOption = defaultOption
|
||||
}
|
||||
|
||||
if (hasBooleanOption >= 0 || lastIsString) {
|
||||
|
|
@ -156,8 +158,9 @@
|
|||
let subpath = path;
|
||||
console.log("Initial chosen option for",path.join("."),"is", chosenOption);
|
||||
onDestroy(tags.addCallbackAndRun(tags => {
|
||||
if (tags["value"] !== "") {
|
||||
if (tags["value"] !== undefined && tags["value"] !== "") {
|
||||
chosenOption = undefined;
|
||||
console.log("Resetting chosenOption as `value` is present in the tags:", tags["value"])
|
||||
return;
|
||||
}
|
||||
const oldOption = chosenOption;
|
||||
|
|
@ -214,4 +217,5 @@
|
|||
path={[...subpath, (subschema?.path?.at(-1) ?? "???")]}></SchemaBasedInput>
|
||||
{/each}
|
||||
{/if}
|
||||
{chosenOption}
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ export let state: EditLayerState;
|
|||
export let schema: ConfigMeta;
|
||||
export let path: (string | number)[];
|
||||
|
||||
let value = state.getCurrentValueFor(path);
|
||||
let value = state.getCurrentValueFor(path) ;
|
||||
|
||||
let mappingsBuiltin: MappingConfigJson[] = [];
|
||||
for (const tr of questions.tagRenderings) {
|
||||
|
|
@ -65,7 +65,6 @@ function initMappings() {
|
|||
}
|
||||
|
||||
const freeformSchema = <ConfigMeta[]> questionableTagRenderingSchemaRaw.filter(schema => schema.path.length >= 1 && schema.path[0] === "freeform");
|
||||
console.log("FreeformSchema:", freeformSchema)
|
||||
</script>
|
||||
|
||||
{#if typeof value === "string"}
|
||||
|
|
@ -105,11 +104,5 @@ console.log("FreeformSchema:", freeformSchema)
|
|||
|
||||
<Region {state} {path} configs={freeformSchema}/>
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- {JSON.stringify(state.getCurrentValueFor(path))} <!-->
|
||||
</div>
|
||||
<!--
|
||||
<Region configs={freeformSchema} {state} path={[...path, "freeform"]} /> -->
|
||||
{/if}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue