forked from MapComplete/MapComplete
		
	
		
			
	
	
		
			77 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			77 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | import {UIElement} from "../UIElement"; | ||
|  | import {UIEventSource} from "../../Logic/UIEventSource"; | ||
|  | import TagRenderingConfig from "../../Customizations/JSON/TagRenderingConfig"; | ||
|  | import TagRenderingQuestion from "./TagRenderingQuestion"; | ||
|  | import Translations from "../i18n/Translations"; | ||
|  | 
 | ||
|  | 
 | ||
|  | /** | ||
|  |  * Generates all the questions, one by one | ||
|  |  */ | ||
|  | export default class QuestionBox extends UIElement { | ||
|  |     private _tags: UIEventSource<any>; | ||
|  | 
 | ||
|  |     private _tagRenderings: TagRenderingConfig[]; | ||
|  |     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; | ||
|  |         this._tagRenderings = tagRenderings.filter(tr => tr.question !== undefined); | ||
|  |         this._tagRenderingQuestions = this._tagRenderings | ||
|  |             .map((tagRendering, i) => new TagRenderingQuestion(this._tags, tagRendering, | ||
|  |                 () => { | ||
|  |                     // We save
 | ||
|  |                     self._skippedQuestions.ping(); | ||
|  |                 }, | ||
|  |                 Translations.t.general.skip.Clone() | ||
|  |                     .SetClass("cancel") | ||
|  |                     .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]; | ||
|  |             if(tagRendering.condition && | ||
|  |                 !tagRendering.condition.matchesProperties(this._tags.data)){ | ||
|  |                 // Filtered away by the condition
 | ||
|  |                 continue; | ||
|  |             } | ||
|  |              | ||
|  |             if (tagRendering.GetRenderValue(this._tags.data) !== undefined) { | ||
|  |                 // This value is known
 | ||
|  |                 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 ""; | ||
|  |     } | ||
|  | 
 | ||
|  | } |