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 @modalClass" @onmousedown="Hide">
<div class="modal-dialog modal-xl" role="document" @onclick:stopPropagation="true"> <div class="modal-dialog modal-xl" role="document" @onmousedown:stopPropagation="true">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h4 class="modal-title text-center w-100">@Title</h4> <h4 class="modal-title text-center w-100">@Title</h4>

View File

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

View File

@@ -15,11 +15,14 @@
if(answers.Count() == 0) if(answers.Count() == 0)
answers = Question.Answers; answers = Question.Answers;
if (points == 0)
points = Question.Points;
base.OnParametersSet(); base.OnParametersSet();
} }
private string text { get; set; } = string.Empty; private string text { get; set; } = string.Empty;
private string questionType { 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 IEnumerable<LocalQuizQuestionAnswer> answers { get; set; } = Enumerable.Empty<LocalQuizQuestionAnswer>();
private void handleTypeUpdate(string type) private void handleTypeUpdate(string type)
@@ -35,6 +38,18 @@
UpdateQuestion(newQuestion); 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() private void addAnswer()
{ {
@@ -130,6 +145,23 @@
} }
</div> </div>
</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> <div>Answers:</div>
@if(questionType == QuestionType.MULTIPLE_ANSWERS || questionType == QuestionType.MULTIPLE_CHOICE) @if(questionType == QuestionType.MULTIPLE_ANSWERS || questionType == QuestionType.MULTIPLE_CHOICE)

View File

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

View File

@@ -1,5 +1,6 @@
using CanvasModel.Assignments; using CanvasModel.Assignments;
using CanvasModel.Modules; using CanvasModel.Modules;
using CanvasModel.Quizzes;
using LocalModels; using LocalModels;
namespace Management.Planner; namespace Management.Planner;
@@ -43,13 +44,14 @@ public static class CoursePlannerExtensions
public static LocalCourse deleteCanvasIdsThatNoLongerExist( public static LocalCourse deleteCanvasIdsThatNoLongerExist(
this LocalCourse localCourse, this LocalCourse localCourse,
IEnumerable<CanvasModule> canvasModules, IEnumerable<CanvasModule> canvasModules,
IEnumerable<CanvasAssignment> canvasAssignments IEnumerable<CanvasAssignment> canvasAssignments,
IEnumerable<CanvasQuiz> canvasQuizzes
) )
{ {
Console.WriteLine("checking canvas ids still exist"); Console.WriteLine("checking canvas ids still exist");
var correctedModules = localCourse.Modules var correctedModules = localCourse.Modules
.Select((m) => m.validateCanvasIds(canvasModules, canvasAssignments)) .Select((m) => m.validateCanvasIds(canvasModules, canvasAssignments, canvasQuizzes))
.ToArray(); .ToArray();
return localCourse with return localCourse with
@@ -61,7 +63,8 @@ public static class CoursePlannerExtensions
private static LocalModule validateCanvasIds( private static LocalModule validateCanvasIds(
this LocalModule module, this LocalModule module,
IEnumerable<CanvasModule> canvasModules, IEnumerable<CanvasModule> canvasModules,
IEnumerable<CanvasAssignment> canvasAssignments IEnumerable<CanvasAssignment> canvasAssignments,
IEnumerable<CanvasQuiz> canvasQuizzes
) )
{ {
var moduleIdInCanvas = canvasModules.FirstOrDefault(m => m.Id == module.CanvasId) != null; var moduleIdInCanvas = canvasModules.FirstOrDefault(m => m.Id == module.CanvasId) != null;
@@ -69,7 +72,8 @@ public static class CoursePlannerExtensions
{ {
Assignments = module.Assignments Assignments = module.Assignments
.Select((a) => a.validateAssignmentForCanvasId(canvasAssignments)) .Select((a) => a.validateAssignmentForCanvasId(canvasAssignments))
.ToArray() .ToArray(),
Quizzes = module.Quizzes.Select((s) => s.validateQuizForCanvasId(canvasQuizzes)).ToArray()
}; };
if (!moduleIdInCanvas) if (!moduleIdInCanvas)
@@ -98,6 +102,22 @@ public static class CoursePlannerExtensions
} }
return assignment; 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) 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) 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 url = $"courses/{canvasCourseId}/quizzes";
var body = new var body = new