-
Notifications
You must be signed in to change notification settings - Fork 27
Expand file tree
/
Copy pathBaseQuestion.cs
More file actions
89 lines (69 loc) · 3.13 KB
/
BaseQuestion.cs
File metadata and controls
89 lines (69 loc) · 3.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
using PolyJson;
using Vote.Monitor.Core.Models;
namespace Vote.Monitor.Domain.Entities.FormBase.Questions;
[PolyJsonConverter(distriminatorPropertyName: "$questionType")]
[PolyJsonConverter.SubType(typeof(TextQuestion), QuestionTypes.TextQuestionType)]
[PolyJsonConverter.SubType(typeof(NumberQuestion), QuestionTypes.NumberQuestionType)]
[PolyJsonConverter.SubType(typeof(DateQuestion), QuestionTypes.DateQuestionType)]
[PolyJsonConverter.SubType(typeof(SingleSelectQuestion), QuestionTypes.SingleSelectQuestionType)]
[PolyJsonConverter.SubType(typeof(MultiSelectQuestion), QuestionTypes.MultiSelectQuestionType)]
[PolyJsonConverter.SubType(typeof(RatingQuestion), QuestionTypes.RatingQuestionType)]
[PolyJsonConverter.SubType(typeof(MatrixQuestion), QuestionTypes.MatrixQuestionType)]
public abstract record BaseQuestion
{
[JsonPropertyName("$questionType")]
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public string Discriminator => DiscriminatorValue.Get(GetType());
public Guid Id { get; private set; }
public string Code { get; private set; }
public TranslatedString Text { get; private set; }
public TranslatedString? Helptext { get; private set; }
public DisplayLogic? DisplayLogic { get; private set; }
[JsonConstructor]
internal BaseQuestion(Guid id, string code, TranslatedString text, TranslatedString? helptext,
DisplayLogic? displayLogic)
{
Id = id;
Code = code;
Text = text;
Helptext = helptext;
DisplayLogic = displayLogic;
}
public void AddTranslation(string languageCode)
{
Text.AddTranslation(languageCode);
Helptext?.AddTranslation(languageCode);
AddTranslationsInternal(languageCode);
}
protected abstract void AddTranslationsInternal(string languageCode);
public void RemoveTranslation(string languageCode)
{
Text.RemoveTranslation(languageCode);
Helptext?.RemoveTranslation(languageCode);
RemoveTranslationInternal(languageCode);
}
protected abstract void RemoveTranslationInternal(string languageCode);
public TranslationStatus GetTranslationStatus(string baseLanguageCode, string languageCode)
{
if (string.IsNullOrWhiteSpace(Text[languageCode]))
{
return TranslationStatus.MissingTranslations;
}
if (Helptext != null && !string.IsNullOrWhiteSpace(Helptext[baseLanguageCode]) &&
string.IsNullOrWhiteSpace(Helptext[languageCode]))
{
return TranslationStatus.MissingTranslations;
}
return InternalGetTranslationStatus(baseLanguageCode, languageCode);
}
protected abstract TranslationStatus InternalGetTranslationStatus(string baseLanguageCode, string languageCode);
public BaseQuestion TrimTranslations(IEnumerable<string> languages)
{
var languagesArray = languages.ToArray();
Text.TrimTranslations(languagesArray);
Helptext?.TrimTranslations(languagesArray);
InternalTrimTranslations(languagesArray);
return this;
}
protected abstract void InternalTrimTranslations(IEnumerable<string> languages);
}