| 
									
										
										
										
											2020-10-27 01:01:34 +01:00
										 |  |  | import {UIElement} from "../UIElement"; | 
					
						
							|  |  |  | import {UIEventSource} from "../../Logic/UIEventSource"; | 
					
						
							|  |  |  | import TagRenderingConfig from "../../Customizations/JSON/TagRenderingConfig"; | 
					
						
							|  |  |  | import TagRenderingQuestion from "./TagRenderingQuestion"; | 
					
						
							|  |  |  | import Translations from "../i18n/Translations"; | 
					
						
							| 
									
										
										
										
											2021-01-06 01:11:07 +01:00
										 |  |  | import {TagUtils} from "../../Logic/Tags"; | 
					
						
							| 
									
										
										
										
											2020-10-27 01:01:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Generates all the questions, one by one | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | export default class QuestionBox extends UIElement { | 
					
						
							| 
									
										
										
										
											2021-01-04 04:06:21 +01:00
										 |  |  |     private readonly _tags: UIEventSource<any>; | 
					
						
							| 
									
										
										
										
											2020-10-27 01:01:34 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-04 04:06:21 +01:00
										 |  |  |     private readonly _tagRenderings: TagRenderingConfig[]; | 
					
						
							| 
									
										
										
										
											2020-10-27 01:01:34 +01:00
										 |  |  |     private _tagRenderingQuestions: UIElement[]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     private _skippedQuestions: UIEventSource<number[]> = new UIEventSource<number[]>([]) | 
					
						
							|  |  |  |     private _skippedQuestionsButton: UIElement; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     constructor(tags: UIEventSource<any>, tagRenderings: TagRenderingConfig[]) { | 
					
						
							|  |  |  |         super(tags); | 
					
						
							|  |  |  |         this.ListenTo(this._skippedQuestions); | 
					
						
							|  |  |  |         this._tags = tags; | 
					
						
							|  |  |  |         const self = this; | 
					
						
							| 
									
										
										
										
											2020-12-08 23:44:34 +01:00
										 |  |  |         this._tagRenderings = tagRenderings | 
					
						
							|  |  |  |             .filter(tr => tr.question !== undefined) | 
					
						
							|  |  |  |             .filter(tr => tr.question !== null); | 
					
						
							| 
									
										
										
										
											2020-10-27 01:01:34 +01:00
										 |  |  |         this._tagRenderingQuestions = this._tagRenderings | 
					
						
							|  |  |  |             .map((tagRendering, i) => new TagRenderingQuestion(this._tags, tagRendering, | 
					
						
							|  |  |  |                 () => { | 
					
						
							|  |  |  |                     // We save
 | 
					
						
							|  |  |  |                     self._skippedQuestions.ping(); | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |                 Translations.t.general.skip.Clone() | 
					
						
							| 
									
										
										
										
											2021-01-24 22:20:40 +01:00
										 |  |  |                     .SetClass("btn btn-secondary mr-3") | 
					
						
							| 
									
										
										
										
											2020-10-27 01:01:34 +01:00
										 |  |  |                     .onClick(() => { | 
					
						
							|  |  |  |                         self._skippedQuestions.data.push(i); | 
					
						
							|  |  |  |                         self._skippedQuestions.ping(); | 
					
						
							|  |  |  |                     }) | 
					
						
							|  |  |  |             )); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         this._skippedQuestionsButton = Translations.t.general.skippedQuestions.Clone() | 
					
						
							|  |  |  |             .onClick(() => { | 
					
						
							|  |  |  |                 self._skippedQuestions.setData([]); | 
					
						
							|  |  |  |             }) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     InnerRender(): string { | 
					
						
							|  |  |  |         for (let i = 0; i < this._tagRenderingQuestions.length; i++) { | 
					
						
							|  |  |  |             let tagRendering = this._tagRenderings[i]; | 
					
						
							| 
									
										
										
										
											2021-01-21 05:52:36 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-13 17:25:44 +01:00
										 |  |  |             if(tagRendering.IsKnown(this._tags.data)){ | 
					
						
							| 
									
										
										
										
											2020-10-27 01:01:34 +01:00
										 |  |  |                 continue; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if (this._skippedQuestions.data.indexOf(i) >= 0) { | 
					
						
							|  |  |  |                 continue; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             // this value is NOT known
 | 
					
						
							|  |  |  |             return this._tagRenderingQuestions[i].Render(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (this._skippedQuestions.data.length > 0) { | 
					
						
							|  |  |  |             return this._skippedQuestionsButton.Render(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return ""; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |