@using Model.MemoryTester
@using Services.Immortal
@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; } = default!;
[Parameter] public bool IsSubmitted { get; set; }
private string? guess = "";
private string labelId = "";
protected override void OnInitialized()
{
base.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)
});
}
}