2020-10-27 01:01:34 +01:00
|
|
|
import {UIEventSource} from "../../Logic/UIEventSource";
|
|
|
|
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";
|
2021-06-28 00:45:49 +02:00
|
|
|
import {VariableUiElement} from "../Base/VariableUIElement";
|
2021-08-07 23:11:34 +02:00
|
|
|
import TagRenderingConfig from "../../Models/ThemeConfig/TagRenderingConfig";
|
|
|
|
import {Unit} from "../../Models/Unit";
|
2021-10-03 21:44:43 +02:00
|
|
|
import Lazy from "../Base/Lazy";
|
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[]) {
|
2021-10-27 20:19:45 +02:00
|
|
|
|
2021-06-28 00:45:49 +02:00
|
|
|
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
|
2021-10-03 21:44:43 +02:00
|
|
|
.map((tagRendering, i) =>
|
|
|
|
new Lazy(() => new TagRenderingQuestion(tagsSource, tagRendering,
|
2021-07-01 02:26:45 +02:00
|
|
|
{
|
|
|
|
units: units,
|
|
|
|
afterSave: () => {
|
2021-10-27 20:19:45 +02:00
|
|
|
// We save and indicate progress by pinging and recalculating
|
2021-06-28 00:45:49 +02:00
|
|
|
skippedQuestions.ping();
|
2021-07-01 02:26:45 +02:00
|
|
|
},
|
|
|
|
cancelButton: Translations.t.general.skip.Clone()
|
|
|
|
.SetClass("btn btn-secondary mr-3")
|
|
|
|
.onClick(() => {
|
|
|
|
skippedQuestions.data.push(i);
|
|
|
|
skippedQuestions.ping();
|
|
|
|
})
|
|
|
|
}
|
2021-10-03 21:44:43 +02:00
|
|
|
)));
|
2021-06-28 00:45:49 +02:00
|
|
|
|
2021-10-27 20:19:45 +02:00
|
|
|
const skippedQuestionsButton = Translations.t.general.skippedQuestions
|
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
|
|
|
}
|
|
|
|
|
|
|
|
}
|