@using Services
@using Services.Immortal
@using Model.Immortal.MemoryTester
@implements IDisposable
@inject IMemoryTesterService MemoryTesterService
@code {
[Parameter]
public string Label { get; set; } = "";
[Parameter]
public string Info { get; set; } = "";
[Parameter]
public EventCallback OnChange { get; set; }
[Parameter]
public MemoryQuestionModel MemoryQuestion { get; set; }
[Parameter]
public bool IsSubmitted { get; set; }
private string guess { get; set; } = "";
private string labelId = "";
protected override void OnInitialized() {
labelId = Label.ToLower().Replace(" ", "_") + MemoryQuestion.Id;
MemoryTesterService.Subscribe(OnMemoryEvent);
if (MemoryQuestion.IsRevealed) {
guess = MemoryQuestion.Answer.ToString();
}
OnRefresh();
}
void IDisposable.Dispose() {
MemoryTesterService.Unsubscribe(OnMemoryEvent);
}
void OnMemoryEvent(MemoryTesterEvent memoryTesterEvent) {
if (memoryTesterEvent == MemoryTesterEvent.OnVerify) {
OnVerify();
}
if (memoryTesterEvent == MemoryTesterEvent.OnRefresh) {
OnRefresh();
}
}
protected override void OnAfterRender(bool firstRender) {
if (MemoryQuestion.IsRevealed) {
guess = MemoryQuestion.Answer.ToString();
}
}
void OnVerify() {
IsSubmitted = true;
}
void OnRefresh() {
guess = "";
if (MemoryQuestion.IsRevealed) {
guess = MemoryQuestion.Answer.ToString();
}
IsSubmitted = false;
}
void OnGuessChanged(ChangeEventArgs changeEventArgs) {
guess = changeEventArgs.Value.ToString();
OnChange.InvokeAsync(new AnswerEventArgs {
Name = MemoryQuestion.Name,
IsCorrect = int.Parse(guess) == MemoryQuestion.Answer,
Guess = int.Parse(guess)
});
}
}