put quiz form on its own page

This commit is contained in:
2023-10-18 09:57:11 -06:00
parent c7f9b262da
commit 7413ba8c1b
8 changed files with 153 additions and 80 deletions

View File

@@ -10,21 +10,21 @@
private string? error { get; set; } = null;
private string _quizMarkdownInput { get; set; } = "";
private string quizMarkdownInput
{
private string quizMarkdownInput
{
get => _quizMarkdownInput;
set
{
_quizMarkdownInput = value;
try
try
{
var newQuiz = LocalQuiz.ParseMarkdown(_quizMarkdownInput);
error = null;
testQuiz = newQuiz;
quizContext.SaveQuiz(newQuiz);
}
catch(QuizMarkdownParseException e)
catch (QuizMarkdownParseException e)
{
error = e.Message;
StateHasChanged();
@@ -34,17 +34,17 @@
protected override void OnInitialized()
{
reload();
quizContext.StateHasChanged += reload;
}
private void reload()
{
if (quizContext.Quiz != null)
{
if(quizMarkdownInput == "")
if (quizMarkdownInput == "")
{
quizMarkdownInput = quizContext.Quiz.ToMarkdown();
}
modal?.Show();
this.InvokeAsync(this.StateHasChanged);
}
}
@@ -53,69 +53,33 @@
quizContext.StateHasChanged -= reload;
}
private void deleteQuiz()
{
quizContext.DeleteQuiz();
modal?.Hide();
}
private async Task addToCanvas()
{
await quizContext.AddQuizToCanvas();
}
private void onHide()
{
_quizMarkdownInput = "";
quizContext.Quiz = null;
}
}
<Modal @ref="modal" OnHide="onHide" >
<Title>
<div class="row justify-content-between">
<div class="col-auto">
@quizContext.Quiz?.Name
</div>
<div class="col-auto me-3">
Points: @quizContext.Quiz?.Questions.Sum(q => q.Points)
</div>
</div>
</Title>
<Body>
<div class="row">
<div class="col-6">
<textarea
rows="30"
class="form-control"
@bind="quizMarkdownInput"
@bind:event="oninput"
/>
</div>
<div class="col-6">
@if(error != null)
{
<p class="text-danger text-truncate">Error: @error</p>
}
<QuizPreview Quiz="testQuiz" />
</div>
</div>
</Body>
<Footer>
<ConfirmationModal Label="Delete" Class="btn btn-danger" OnConfirm="deleteQuiz" />
<div class="row justify-content-between">
<div class="col-auto">
<h2>
@quizContext.Quiz?.Name
</h2>
</div>
<div class="col-auto me-3">
<h3>
Points: @quizContext.Quiz?.Questions.Sum(q => q.Points)
</h3>
</div>
</div>
<button
class="btn btn-outline-secondary"
@onclick="addToCanvas"
>
Add to Canvas
</button>
<button
class="btn btn-primary"
@onclick="() => modal?.Hide()"
>
Done
</button>
</Footer>
</Modal>
<div class="row">
<div class="col-6">
<textarea rows="30" class="form-control" @bind="quizMarkdownInput" @bind:event="oninput" />
</div>
<div class="col-6">
@if (error != null)
{
<p class="text-danger text-truncate">Error: @error</p>
}
<QuizPreview Quiz="testQuiz" />
</div>
</div>
<hr>