forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			60 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
<script lang="ts">
 | 
						|
 | 
						|
    import {UIEventSource} from "../../Logic/UIEventSource";
 | 
						|
    import type {ConfigMeta} from "./configMeta";
 | 
						|
    import TagRenderingEditable from "../Popup/TagRendering/TagRenderingEditable.svelte";
 | 
						|
    import TagRenderingConfig from "../../Models/ThemeConfig/TagRenderingConfig";
 | 
						|
    import type {
 | 
						|
        QuestionableTagRenderingConfigJson
 | 
						|
    } from "../../Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson";
 | 
						|
    import EditLayerState from "./EditLayerState";
 | 
						|
 | 
						|
 | 
						|
    export let state: EditLayerState
 | 
						|
    export let path: (string | number)[] = []
 | 
						|
    export let schema: ConfigMeta
 | 
						|
    let value = new UIEventSource<string>(undefined)
 | 
						|
 | 
						|
 | 
						|
    const configJson: QuestionableTagRenderingConfigJson = {
 | 
						|
        id: path.join("_"),
 | 
						|
        render: schema.hints.inline ?? schema.path.at(-1) + ": <b>{value}</b>",
 | 
						|
        question: schema.hints.question,
 | 
						|
        questionHint: schema.description,
 | 
						|
        freeform: {
 | 
						|
            key: "value",
 | 
						|
            type: schema.hints.typehint ?? "string",
 | 
						|
            inline: schema.hints.inline !== undefined
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    if (schema.hints.default) {
 | 
						|
        configJson.mappings = [{
 | 
						|
            if: "value=", // +schema.hints.default,
 | 
						|
            then: schema.path.at(-1) + " is not set. The default value <b>" + schema.hints.default + "</b> will be used. " + (schema.hints.ifunset ?? ""),
 | 
						|
        }]
 | 
						|
    } else if (!schema.required) {
 | 
						|
        configJson.mappings = [{
 | 
						|
            if: "value=",
 | 
						|
            then: schema.path.at(-1) + " is not set. " + (schema.hints.ifunset ?? ""),
 | 
						|
        }]
 | 
						|
    }
 | 
						|
    let config: TagRenderingConfig
 | 
						|
    let err: string = undefined
 | 
						|
    try {
 | 
						|
        config = new TagRenderingConfig(configJson, "config based on " + schema.path.join("."))
 | 
						|
    } catch (e) {
 | 
						|
        console.error(e, config)
 | 
						|
        err = e
 | 
						|
    }
 | 
						|
    let tags = new UIEventSource<Record<string, string>>({})
 | 
						|
    state.register(path, tags.map(tgs => tgs["value"]))
 | 
						|
</script>
 | 
						|
 | 
						|
{#if err !== undefined}
 | 
						|
    <span class="alert">{err}</span>
 | 
						|
{:else}
 | 
						|
    <div>
 | 
						|
        <TagRenderingEditable {config} showQuestionIfUnknown={true} {state} {tags}/>
 | 
						|
    </div>
 | 
						|
{/if}
 |