| 
									
										
										
										
											2020-10-27 01:01:34 +01:00
										 |  |  | import {UIEventSource} from "../../Logic/UIEventSource"; | 
					
						
							|  |  |  | import TagRenderingConfig from "../../Customizations/JSON/TagRenderingConfig"; | 
					
						
							|  |  |  | import TagRenderingQuestion from "./TagRenderingQuestion"; | 
					
						
							|  |  |  | import Translations from "../i18n/Translations"; | 
					
						
							| 
									
										
										
										
											2021-05-17 00:18:21 +02:00
										 |  |  | import State from "../../State"; | 
					
						
							|  |  |  | import Combine from "../Base/Combine"; | 
					
						
							| 
									
										
										
										
											2021-06-22 03:16:45 +02:00
										 |  |  | import BaseUIElement from "../BaseUIElement"; | 
					
						
							|  |  |  | import {Unit} from "../../Customizations/JSON/Denomination"; | 
					
						
							| 
									
										
										
										
											2021-06-28 00:45:49 +02:00
										 |  |  | import {VariableUiElement} from "../Base/VariableUIElement"; | 
					
						
							| 
									
										
										
										
											2020-10-27 01:01:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Generates all the questions, one by one | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2021-06-28 00:45:49 +02:00
										 |  |  | export default class QuestionBox extends VariableUiElement { | 
					
						
							| 
									
										
										
										
											2020-10-27 01:01:34 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-28 00:45:49 +02:00
										 |  |  |     constructor(tagsSource: UIEventSource<any>, tagRenderings: TagRenderingConfig[], units: Unit[]) { | 
					
						
							|  |  |  |         const skippedQuestions: UIEventSource<number[]> = new UIEventSource<number[]>([]) | 
					
						
							| 
									
										
										
										
											2020-10-27 01:01:34 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-28 00:45:49 +02:00
										 |  |  |         tagRenderings = tagRenderings | 
					
						
							| 
									
										
										
										
											2020-12-08 23:44:34 +01:00
										 |  |  |             .filter(tr => tr.question !== undefined) | 
					
						
							|  |  |  |             .filter(tr => tr.question !== null); | 
					
						
							| 
									
										
										
										
											2021-06-28 00:45:49 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         super(tagsSource.map(tags => { | 
					
						
							|  |  |  |                 if (tags === undefined) { | 
					
						
							|  |  |  |                     return undefined; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 const tagRenderingQuestions = tagRenderings | 
					
						
							|  |  |  |                     .map((tagRendering, i) => new TagRenderingQuestion(tagsSource, tagRendering, units, | 
					
						
							|  |  |  |                         () => { | 
					
						
							|  |  |  |                             // We save
 | 
					
						
							|  |  |  |                             skippedQuestions.ping(); | 
					
						
							|  |  |  |                         }, | 
					
						
							|  |  |  |                         Translations.t.general.skip.Clone() | 
					
						
							|  |  |  |                             .SetClass("btn btn-secondary mr-3") | 
					
						
							|  |  |  |                             .onClick(() => { | 
					
						
							|  |  |  |                                 skippedQuestions.data.push(i); | 
					
						
							|  |  |  |                                 skippedQuestions.ping(); | 
					
						
							|  |  |  |                             }) | 
					
						
							|  |  |  |                     )); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 const skippedQuestionsButton = Translations.t.general.skippedQuestions.Clone() | 
					
						
							| 
									
										
										
										
											2020-10-27 01:01:34 +01:00
										 |  |  |                     .onClick(() => { | 
					
						
							| 
									
										
										
										
											2021-06-28 00:45:49 +02:00
										 |  |  |                         skippedQuestions.setData([]); | 
					
						
							| 
									
										
										
										
											2020-10-27 01:01:34 +01:00
										 |  |  |                     }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-28 00:45:49 +02:00
										 |  |  |                 const allQuestions: BaseUIElement[] = [] | 
					
						
							|  |  |  |                 for (let i = 0; i < tagRenderingQuestions.length; i++) { | 
					
						
							|  |  |  |                     let tagRendering = tagRenderings[i]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     if (tagRendering.IsKnown(tags)) { | 
					
						
							|  |  |  |                         continue; | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     if (skippedQuestions.data.indexOf(i) >= 0) { | 
					
						
							|  |  |  |                         continue; | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                     // this value is NOT known - we show the questions for it
 | 
					
						
							|  |  |  |                     if (State.state.featureSwitchShowAllQuestions.data || allQuestions.length == 0) { | 
					
						
							|  |  |  |                         allQuestions.push(tagRenderingQuestions[i]) | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 if (skippedQuestions.data.length > 0) { | 
					
						
							|  |  |  |                     allQuestions.push(skippedQuestionsButton) | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 return new Combine(allQuestions).SetClass("block mb-8") | 
					
						
							|  |  |  |             }, [skippedQuestions]) | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-27 01:01:34 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |