added points to quiz editor

This commit is contained in:
2023-08-18 10:02:25 -06:00
parent 28ad344018
commit a962ef74f9
6 changed files with 77 additions and 13 deletions

View File

@@ -32,8 +32,8 @@
}
}
<div class="modal @modalClass" @onclick="Hide">
<div class="modal-dialog modal-xl" role="document" @onclick:stopPropagation="true">
<div class="modal @modalClass" @onmousedown="Hide">
<div class="modal-dialog modal-xl" role="document" @onmousedown:stopPropagation="true">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title text-center w-100">@Title</h4>

View File

@@ -1,4 +1,5 @@
@using Management.Web.Shared.Components
@inject QuizEditorContext quizContext
@code {
@@ -100,12 +101,18 @@
quizContext.SaveQuiz(newQuiz);
}
}
}
<Modal @ref="modal" OnHide="() => quizContext.Quiz = null" >
<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>
@if(quizContext.Quiz != null)

View File

@@ -15,11 +15,14 @@
if(answers.Count() == 0)
answers = Question.Answers;
if (points == 0)
points = Question.Points;
base.OnParametersSet();
}
private string text { get; set; } = string.Empty;
private string questionType { get; set; } = string.Empty;
private int points { get; set; }
private IEnumerable<LocalQuizQuestionAnswer> answers { get; set; } = Enumerable.Empty<LocalQuizQuestionAnswer>();
private void handleTypeUpdate(string type)
@@ -35,6 +38,18 @@
UpdateQuestion(newQuestion);
}
}
private void handlePointsInput(ChangeEventArgs e)
{
if (quizContext.Quiz != null)
{
var newPoints = int.Parse(e.Value?.ToString() ?? "0");
var newQuestion = Question with
{
Points = newPoints
};
UpdateQuestion(newQuestion);
}
}
private void addAnswer()
{
@@ -130,6 +145,23 @@
}
</div>
</div>
<div class="mb-3 row">
<div class="col-auto">
<label
for="exampleInputEmail1"
class="form-label"
>
Points
</label>
<input
type="number"
class="form-control"
id="exampleInputEmail1"
@bind="points"
@oninput="handlePointsInput"
>
</div>
</div>
<div>Answers:</div>
@if(questionType == QuestionType.MULTIPLE_ANSWERS || questionType == QuestionType.MULTIPLE_CHOICE)

View File

@@ -79,7 +79,8 @@ public class CoursePlanner
public async Task<(
IEnumerable<CanvasAssignment> CanvasAssignments,
IEnumerable<CanvasModule> CanvasModules,
Dictionary<ulong, IEnumerable<CanvasModuleItem>> CanvasModulesItems
Dictionary<ulong, IEnumerable<CanvasModuleItem>> CanvasModulesItems,
IEnumerable<CanvasQuiz> canvasQuizzes
)> LoadCanvasData()
{
LoadingCanvasData = true;
@@ -100,7 +101,7 @@ public class CoursePlanner
LoadingCanvasData = false;
StateHasChanged?.Invoke();
return (CanvasAssignments, CanvasModules, CanvasModulesItems);
return (CanvasAssignments, CanvasModules, CanvasModulesItems, CanvasQuizzes);
}
public async Task SyncWithCanvas()
@@ -118,10 +119,14 @@ public class CoursePlanner
LoadingCanvasData = true;
StateHasChanged?.Invoke();
var (canvasAssignments, canvasModules, canvasModuleItems) = await LoadCanvasData();
var (canvasAssignments, canvasModules, canvasModuleItems, canvasQuizzes) = await LoadCanvasData();
LoadingCanvasData = true;
StateHasChanged?.Invoke();
LocalCourse = LocalCourse.deleteCanvasIdsThatNoLongerExist(canvasModules, canvasAssignments);
LocalCourse = LocalCourse.deleteCanvasIdsThatNoLongerExist(
canvasModules,
canvasAssignments,
canvasQuizzes
);
var canvasId =
LocalCourse.CanvasId ?? throw new Exception("no course canvas id to sync with canvas");

View File

@@ -1,5 +1,6 @@
using CanvasModel.Assignments;
using CanvasModel.Modules;
using CanvasModel.Quizzes;
using LocalModels;
namespace Management.Planner;
@@ -43,13 +44,14 @@ public static class CoursePlannerExtensions
public static LocalCourse deleteCanvasIdsThatNoLongerExist(
this LocalCourse localCourse,
IEnumerable<CanvasModule> canvasModules,
IEnumerable<CanvasAssignment> canvasAssignments
IEnumerable<CanvasAssignment> canvasAssignments,
IEnumerable<CanvasQuiz> canvasQuizzes
)
{
Console.WriteLine("checking canvas ids still exist");
var correctedModules = localCourse.Modules
.Select((m) => m.validateCanvasIds(canvasModules, canvasAssignments))
.Select((m) => m.validateCanvasIds(canvasModules, canvasAssignments, canvasQuizzes))
.ToArray();
return localCourse with
@@ -61,7 +63,8 @@ public static class CoursePlannerExtensions
private static LocalModule validateCanvasIds(
this LocalModule module,
IEnumerable<CanvasModule> canvasModules,
IEnumerable<CanvasAssignment> canvasAssignments
IEnumerable<CanvasAssignment> canvasAssignments,
IEnumerable<CanvasQuiz> canvasQuizzes
)
{
var moduleIdInCanvas = canvasModules.FirstOrDefault(m => m.Id == module.CanvasId) != null;
@@ -69,7 +72,8 @@ public static class CoursePlannerExtensions
{
Assignments = module.Assignments
.Select((a) => a.validateAssignmentForCanvasId(canvasAssignments))
.ToArray()
.ToArray(),
Quizzes = module.Quizzes.Select((s) => s.validateQuizForCanvasId(canvasQuizzes)).ToArray()
};
if (!moduleIdInCanvas)
@@ -98,6 +102,22 @@ public static class CoursePlannerExtensions
}
return assignment;
}
private static LocalQuiz validateQuizForCanvasId(
this LocalQuiz quiz,
IEnumerable<CanvasQuiz> canvasQuizzes
)
{
var assignmentIdInCanvas =
canvasQuizzes.FirstOrDefault(cq => cq.Id == quiz.CanvasId) != null;
if (!assignmentIdInCanvas)
{
Console.WriteLine(
$"no id in canvas for quiz, removing old canvas id: {quiz.Name}"
);
return quiz with { CanvasId = null };
}
return quiz;
}
public static LocalAssignment validateSubmissionTypes(this LocalAssignment assignment)
{

View File

@@ -30,7 +30,7 @@ public class CanvasQuizService
public async Task<LocalQuiz> Create(ulong canvasCourseId, LocalQuiz localQuiz)
{
Console.WriteLine($"Creating Quiz ${localQuiz.Name}");
Console.WriteLine($"Creating Quiz {localQuiz.Name}");
var url = $"courses/{canvasCourseId}/quizzes";
var body = new