Fix interview step being passed by reference instead of by value when getting them from the definitions, breaking selectors for instance

This commit is contained in:
Toastie 2025-02-04 20:07:37 +13:00
parent 0984f50fff
commit 91652eb8fb
Signed by: toastie_t0ast
GPG key ID: 0861BE54AD481DC7

View file

@ -52,14 +52,30 @@ public class ReferencedInterviewStep
[JsonProperty("after-reference-step")]
public InterviewStep afterReferenceStep;
public ReferencedInterviewStep() { }
public ReferencedInterviewStep(ReferencedInterviewStep other)
{
id = other.id;
buttonStyle = other.buttonStyle;
selectorDescription = other.selectorDescription;
if (other.afterReferenceStep != null)
{
afterReferenceStep = new InterviewStep(other.afterReferenceStep);
}
}
public bool TryGetReferencedStep(Dictionary<string, InterviewStep> definitions, out InterviewStep step, bool ignoreReferenceParameters = false)
{
if (!definitions.TryGetValue(id, out step))
if (!definitions.TryGetValue(id, out InterviewStep tempStep))
{
Logger.Error("Could not find referenced step '" + id + "' in interview.");
step = null;
return false;
}
step = new InterviewStep(tempStep);
if (!ignoreReferenceParameters)
{
step.buttonStyle = buttonStyle;
@ -159,6 +175,39 @@ public class InterviewStep
[JsonProperty("after-reference-step")]
public InterviewStep afterReferenceStep = null;
public InterviewStep() { }
public InterviewStep(InterviewStep other)
{
heading = other.heading;
message = other.message;
stepType = other.stepType;
color = other.color;
summaryField = other.summaryField;
buttonStyle = other.buttonStyle;
selectorPlaceholder = other.selectorPlaceholder;
selectorDescription = other.selectorDescription;
maxLength = other.maxLength;
minLength = other.minLength;
addSummary = other.addSummary;
answerDelimiter = other.answerDelimiter;
messageID = other.messageID;
answer = other.answer;
answerID = other.answerID;
relatedMessageIDs = other.relatedMessageIDs;
afterReferenceStep = other.afterReferenceStep;
foreach (KeyValuePair<string, InterviewStep> childStep in other.steps ?? [])
{
steps.Add(childStep.Key, new InterviewStep(childStep.Value));
}
foreach (KeyValuePair<string, ReferencedInterviewStep> reference in other.references ?? [])
{
references.Add(reference.Key, new ReferencedInterviewStep(reference.Value));
}
}
public bool TryGetCurrentStep(out InterviewStep currentStep)
{
bool result = TryGetTakenSteps(out List<InterviewStep> previousSteps);