@using MediatR @using NexusReader.Application.Queries.Quiz @using NexusReader.Application.Commands.Quiz @using NexusReader.Application.Abstractions.Services @inject IMediator Mediator @inject IPlatformService PlatformService @inject IQuizStateService QuizService
Sprawdzian Wiedzy
@if (QuizService.IsHydrating) {
Skanowanie wiedzy przez AI...
} else if (QuizService.CurrentQuiz != null) {
@foreach (var question in QuizService.CurrentQuiz.Questions) {

@question.Question

@for (int i = 0; i < question.Options.Count; i++) { var index = i; var letter = (char)('A' + i); }
}
}
@code { [Parameter] public string ContextBlockId { get; set; } = string.Empty; private Dictionary _states = new(); protected override void OnInitialized() { QuizService.OnQuizUpdated += () => InvokeAsync(StateHasChanged); } public void Dispose() { QuizService.OnQuizUpdated -= StateHasChanged; } private async Task SelectOptionAsync(QuizQuestionDto question, int index) { if (_states.ContainsKey(question)) return; // Haptic feedback await PlatformService.VibrateAsync(40); var cmd = new SubmitAnswerCommand(index, question.CorrectIndex); var res = await Mediator.Send(cmd); _states[question] = (index, res.IsSuccess); if (res.IsSuccess) await PlatformService.VibrateSuccessAsync(); else await PlatformService.VibrateErrorAsync(); StateHasChanged(); } private bool AllQuestionsAnswered() { return QuizService.CurrentQuiz != null && _states.Count == QuizService.CurrentQuiz.Questions.Count; } private string GetBlockClass(QuizQuestionDto question) { if (!_states.TryGetValue(question, out var state)) return ""; return state.IsCorrect ? "state-correct" : "state-incorrect"; } private string GetOptionClass(QuizQuestionDto question, int index) { if (!_states.TryGetValue(question, out var state)) return ""; if (state.SelectedIndex == index) return state.IsCorrect ? "option-correct" : "option-incorrect"; if (state.IsCorrect == false && question.CorrectIndex == index) return "option-revealed-correct"; return "option-faded"; } }