From 64532d1faf5b0ae925c4d81a2e89b49eca5aeb9d Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Fri, 31 Mar 2023 04:04:11 +0200 Subject: [PATCH] Tweaks to question box --- Models/ThemeConfig/TagRenderingConfig.ts | 11 ++++ UI/Base/FromHtml.svelte | 2 +- UI/Popup/TagRendering/Questionbox.svelte | 59 ++++++++++++++++--- .../TagRendering/TagRenderingQuestion.svelte | 36 ++++++++--- assets/tagRenderings/questions.json | 2 +- assets/themes/onwheels/onwheels.json | 2 +- langs/en.json | 3 + 7 files changed, 97 insertions(+), 18 deletions(-) diff --git a/Models/ThemeConfig/TagRenderingConfig.ts b/Models/ThemeConfig/TagRenderingConfig.ts index 1320949d8..a3a388d92 100644 --- a/Models/ThemeConfig/TagRenderingConfig.ts +++ b/Models/ThemeConfig/TagRenderingConfig.ts @@ -620,6 +620,10 @@ export default class TagRenderingConfig { singleSelectedMapping: number, multiSelectedMapping: boolean[] | undefined ): UploadableTag { + freeformValue = freeformValue?.trim() + if (freeformValue === "") { + freeformValue = undefined + } if ( freeformValue === undefined && singleSelectedMapping === undefined && @@ -627,6 +631,7 @@ export default class TagRenderingConfig { ) { return undefined } + if (this.mappings === undefined && freeformValue === undefined) { return undefined } @@ -663,7 +668,13 @@ export default class TagRenderingConfig { } return TagUtils.FlattenMultiAnswer([...selectedMappings, ...unselectedMappings]) } else { + if (singleSelectedMapping === undefined) { + return undefined + } if (singleSelectedMapping === this.mappings.length) { + if (freeformValue === undefined) { + return undefined + } return new And([ new Tag(this.freeform.key, freeformValue), ...(this.freeform.addExtraTags ?? []), diff --git a/UI/Base/FromHtml.svelte b/UI/Base/FromHtml.svelte index af07db545..5202cbf87 100644 --- a/UI/Base/FromHtml.svelte +++ b/UI/Base/FromHtml.svelte @@ -6,7 +6,7 @@ export let src: string; let htmlElem: HTMLElement; $: { - if(htmlElem !== undefined){ + if(htmlElem){ htmlElem.innerHTML = src } } diff --git a/UI/Popup/TagRendering/Questionbox.svelte b/UI/Popup/TagRendering/Questionbox.svelte index 93d5e7c0c..2fa28653e 100644 --- a/UI/Popup/TagRendering/Questionbox.svelte +++ b/UI/Popup/TagRendering/Questionbox.svelte @@ -46,7 +46,7 @@ const baseQuestions = (layer.tagRenderings ?? [])?.filter(tr => allowed(tr.labels) && tr.question !== undefined); console.log("BaseQuestions are", baseQuestions); let skippedQuestions = new UIEventSource>(new Set()); - let answered : number = 0 + let questionsToAsk = tags.map(tags => { const questionsToAsk: TagRenderingConfig[] = []; for (const baseQuestion of baseQuestions) { @@ -56,32 +56,75 @@ if (baseQuestion.condition !== undefined && !baseQuestion.condition.matchesProperties(tags)) { continue; } + if (baseQuestion.IsKnown(tags)) { + continue; + } questionsToAsk.push(baseQuestion); } return questionsToAsk; }, [skippedQuestions]); let _questionsToAsk: TagRenderingConfig[]; - let _firstQuestion: TagRenderingConfig + let _firstQuestion: TagRenderingConfig; onDestroy(questionsToAsk.subscribe(qta => { _questionsToAsk = qta; - _firstQuestion = qta[0] + _firstQuestion = qta[0]; })); + let answered: number = 0; + let skipped: number = 0; + function skip(question: TagRenderingConfig, didAnswer: boolean = false) { skippedQuestions.data.add(question.id); skippedQuestions.ping(); - if(didAnswer ){ - answered ++ + if (didAnswer) { + answered++; + } else { + skipped++; } } {#if _questionsToAsk.length === 0} - All done! You answered {answered} questions and skipped {$skippedQuestions.size} questions. - {#if $skippedQuestions.size > 0 } - + + {#if skipped + answered > 0 } +
+ +
+ {#if answered === 0} + {#if skipped === 1} + + {:else} + + + {/if} + {:else if answered === 1} + {#if skipped === 0} + + {:else if skipped === 1} + + {:else} + + + {/if} + {:else} + {#if skipped === 0} + + {:else if skipped === 1} + + {:else} + + + {/if} {/if} + + {#if skipped > 0 } + + {/if} + {/if} {:else }
diff --git a/UI/Popup/TagRendering/TagRenderingQuestion.svelte b/UI/Popup/TagRendering/TagRenderingQuestion.svelte index f8468558f..695b49f7a 100644 --- a/UI/Popup/TagRendering/TagRenderingQuestion.svelte +++ b/UI/Popup/TagRendering/TagRenderingQuestion.svelte @@ -14,6 +14,7 @@ import ChangeTagAction from "../../../Logic/Osm/Actions/ChangeTagAction"; import { createEventDispatcher } from "svelte"; import LayerConfig from "../../../Models/ThemeConfig/LayerConfig"; + import { ExclamationIcon } from "@rgossiaux/svelte-heroicons/solid"; export let config: TagRenderingConfig; export let tags: UIEventSource>; @@ -23,13 +24,24 @@ // Will be bound if a freeform is available let freeformInput = new UIEventSource(undefined); - let selectedMapping: number = 0; + let selectedMapping: number = undefined; let checkedMappings: boolean[]; - if (config.mappings?.length > 0) { - checkedMappings = [...config.mappings.map(_ => false), false /*One element extra in case a freeform value is added*/]; + $: { + + if (config.mappings?.length > 0) { + checkedMappings = [...config.mappings.map(_ => false), false /*One element extra in case a freeform value is added*/]; + } } let selectedTags: TagsFilter = undefined; - $:selectedTags = config?.constructChangeSpecification($freeformInput, selectedMapping, checkedMappings); + $: { + try { + + selectedTags = config?.constructChangeSpecification($freeformInput, selectedMapping, checkedMappings); + } catch (e) { + console.debug("Could not calculate changeSpecification:", e); + selectedTags = undefined; + } + } function mappingIsHidden(mapping: Mapping): boolean { if (mapping.hideInAnswer === undefined || mapping.hideInAnswer === false) { @@ -59,6 +71,9 @@ changeType: "answer" } ); + freeformInput.setData(undefined); + selectedMapping = 0; + selectedTags = undefined; change.CreateChangeDescriptions().then(changes => state.changes.applyChanges(changes) ).catch(console.error); @@ -138,9 +153,16 @@
- + {#if selectedTags !== undefined} + + {:else } +
+ + +
+ {/if}
diff --git a/assets/tagRenderings/questions.json b/assets/tagRenderings/questions.json index 809bbe2b4..186a0dafd 100644 --- a/assets/tagRenderings/questions.json +++ b/assets/tagRenderings/questions.json @@ -1984,4 +1984,4 @@ "pl": "Nazwa sieci to {internet_access:ssid}" } } -} +} \ No newline at end of file diff --git a/assets/themes/onwheels/onwheels.json b/assets/themes/onwheels/onwheels.json index 28ca7159a..5eb187fc8 100644 --- a/assets/themes/onwheels/onwheels.json +++ b/assets/themes/onwheels/onwheels.json @@ -495,4 +495,4 @@ ] }, "enableDownload": true -} +} \ No newline at end of file diff --git a/langs/en.json b/langs/en.json index 3eef2f3f3..d73ef5b76 100644 --- a/langs/en.json +++ b/langs/en.json @@ -253,12 +253,15 @@ "pickLanguage": "Choose a language: ", "poweredByOsm": "Powered by OpenStreetMap", "questionBox": { + "answeredMultiple": "You answered {answered} questions", "answeredMultipleSkippedMultiple": "You answered {answered} questions and skipped {skipped} questions", "answeredMultipleSkippedOne": "You answered {answered} questions and skipped one question", "answeredOne": "You answered one question", "answeredOneSkippedMultiple": "You answered one question and skipped {skipped} questions", "answeredOneSkippedOne": "You answered one and skipped one question", + "done": "No more questions! Thank you!", "reactivate": "Reactive skipped questions", + "skippedMultiple": "You skipped {skipped} questions", "skippedOne": "You skipped one question" }, "questions": {