| 
									
										
										
										
											2023-06-16 02:36:11 +02:00
										 |  |  | <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"; | 
					
						
							| 
									
										
										
										
											2023-06-23 16:14:43 +02:00
										 |  |  |     import nmd from "nano-markdown" | 
					
						
							| 
									
										
										
										
											2023-06-16 02:36:11 +02:00
										 |  |  |     import type { | 
					
						
							|  |  |  |         QuestionableTagRenderingConfigJson | 
					
						
							|  |  |  |     } from "../../Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson"; | 
					
						
							|  |  |  |     import EditLayerState from "./EditLayerState"; | 
					
						
							| 
									
										
										
										
											2023-06-23 16:14:43 +02:00
										 |  |  |     import { onDestroy } from "svelte"; | 
					
						
							| 
									
										
										
										
											2023-06-16 02:36:11 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     export let state: EditLayerState | 
					
						
							| 
									
										
										
										
											2023-06-18 00:44:57 +02:00
										 |  |  |     export let path: (string | number)[] = [] | 
					
						
							| 
									
										
										
										
											2023-06-16 02:36:11 +02:00
										 |  |  |     export let schema: ConfigMeta | 
					
						
							|  |  |  |     let value = new UIEventSource<string>(undefined) | 
					
						
							| 
									
										
										
										
											2023-06-21 17:13:09 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-16 02:36:11 +02:00
										 |  |  |     const configJson: QuestionableTagRenderingConfigJson = { | 
					
						
							| 
									
										
										
										
											2023-06-20 01:32:24 +02:00
										 |  |  |         id: path.join("_"), | 
					
						
							| 
									
										
										
										
											2023-06-23 16:14:43 +02:00
										 |  |  |         render: schema.type === "boolean" ? undefined : schema.hints.inline ?? schema.path.at(-1) + ": <b>{value}</b>", | 
					
						
							| 
									
										
										
										
											2023-06-16 02:36:11 +02:00
										 |  |  |         question: schema.hints.question, | 
					
						
							| 
									
										
										
										
											2023-06-23 16:14:43 +02:00
										 |  |  |         questionHint: nmd(schema.description), | 
					
						
							|  |  |  |         freeform: schema.type === "boolean" ? undefined : { | 
					
						
							| 
									
										
										
										
											2023-06-16 02:36:11 +02:00
										 |  |  |             key: "value", | 
					
						
							| 
									
										
										
										
											2023-06-18 00:44:57 +02:00
										 |  |  |             type: schema.hints.typehint ?? "string", | 
					
						
							|  |  |  |             inline: schema.hints.inline !== undefined | 
					
						
							| 
									
										
										
										
											2023-06-23 16:14:43 +02:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2023-06-16 02:36:11 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-21 17:13:09 +02:00
										 |  |  |     if (schema.hints.default) { | 
					
						
							|  |  |  |         configJson.mappings = [{ | 
					
						
							| 
									
										
										
										
											2023-06-23 16:14:43 +02:00
										 |  |  |             if: "value=", // We leave this blank | 
					
						
							| 
									
										
										
										
											2023-06-21 17:13:09 +02:00
										 |  |  |             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) { | 
					
						
							| 
									
										
										
										
											2023-06-16 02:36:11 +02:00
										 |  |  |         configJson.mappings = [{ | 
					
						
							|  |  |  |             if: "value=", | 
					
						
							|  |  |  |             then: schema.path.at(-1) + " is not set. " + (schema.hints.ifunset ?? ""), | 
					
						
							|  |  |  |         }] | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-06-23 16:14:43 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if (schema.type === "boolean" || (Array.isArray(schema.type) && schema.type.some(t => t["type"] === "boolean") >= 0)) { | 
					
						
							|  |  |  |         configJson.mappings = configJson.mappings ?? [] | 
					
						
							|  |  |  |         configJson.mappings.push( | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 if: "value=true", | 
					
						
							|  |  |  |                 then: "Yes "+(schema.hints?.iftrue??"") | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 if: "value=false", | 
					
						
							|  |  |  |                 then: "No "+(schema.hints?.iffalse??"") | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (schema.hints.suggestions) { | 
					
						
							|  |  |  |         if (!configJson.mappings) { | 
					
						
							|  |  |  |             configJson.mappings = [] | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         configJson.mappings.push(...schema.hints.suggestions) | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-06-16 02:36:11 +02:00
										 |  |  |     let config: TagRenderingConfig | 
					
						
							|  |  |  |     let err: string = undefined | 
					
						
							|  |  |  |     try { | 
					
						
							|  |  |  |         config = new TagRenderingConfig(configJson, "config based on " + schema.path.join(".")) | 
					
						
							|  |  |  |     } catch (e) { | 
					
						
							|  |  |  |         console.error(e, config) | 
					
						
							| 
									
										
										
										
											2023-06-23 16:14:43 +02:00
										 |  |  |         err = path.join(".") + " " + e | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     let startValue = state.getCurrentValueFor(path) | 
					
						
							|  |  |  |     if (startValue?.["en"]) { | 
					
						
							|  |  |  |         startValue = startValue["en"] | 
					
						
							| 
									
										
										
										
											2023-06-16 02:36:11 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-06-23 16:14:43 +02:00
										 |  |  |     console.log("Startvalue for", path.join("."), "is", startValue) | 
					
						
							|  |  |  |     let tags = new UIEventSource<Record<string, string>>({value: startValue ?? ""}) | 
					
						
							|  |  |  |     onDestroy(state.register(path, tags.map(tgs => { | 
					
						
							|  |  |  |         const v = tgs["value"]; | 
					
						
							|  |  |  |         if (schema.type === "boolan") { | 
					
						
							|  |  |  |             return v === "true" || v === "yes" || v === "1" | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if (schema.type === "number") { | 
					
						
							|  |  |  |             return Number(v) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return v | 
					
						
							|  |  |  |     }))) | 
					
						
							| 
									
										
										
										
											2023-06-16 02:36:11 +02:00
										 |  |  | </script> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {#if err !== undefined} | 
					
						
							|  |  |  |     <span class="alert">{err}</span> | 
					
						
							| 
									
										
										
										
											2023-06-23 16:14:43 +02:00
										 |  |  |     {JSON.stringify(schema)} | 
					
						
							| 
									
										
										
										
											2023-06-16 02:36:11 +02:00
										 |  |  | {:else} | 
					
						
							|  |  |  |     <div> | 
					
						
							| 
									
										
										
										
											2023-06-23 16:14:43 +02:00
										 |  |  |         <TagRenderingEditable {config} selectedElement={undefined} showQuestionIfUnknown={true} {state} {tags}/> | 
					
						
							| 
									
										
										
										
											2023-06-16 02:36:11 +02:00
										 |  |  |     </div> | 
					
						
							|  |  |  | {/if} |