From 224664c7a3d77798a367a78f063cfac396d5a1e8 Mon Sep 17 00:00:00 2001 From: Alex Mickelson Date: Mon, 7 Aug 2023 16:12:48 -0600 Subject: [PATCH] fixed assignment save bug --- .../AssignmentForm/AssignmentForm.razor | 35 ++++++---- .../Shared/Module/ModuleDetail.razor | 3 + .../Shared/Module/NewAssignment.razor | 21 +++--- Management.Web/Shared/Module/NewQuiz.razor | 66 +++++++++++++++++++ .../CoursePlannerSyncronizationExtensions.cs | 2 + Management/Models/Local/LocalAssignment.cs | 12 ++-- .../Canvas/CanvasAssignmentService.cs | 1 + README.md | 23 ------- 8 files changed, 111 insertions(+), 52 deletions(-) create mode 100644 Management.Web/Shared/Module/NewQuiz.razor diff --git a/Management.Web/Shared/Components/AssignmentForm/AssignmentForm.razor b/Management.Web/Shared/Components/AssignmentForm/AssignmentForm.razor index e679956..368ecb2 100644 --- a/Management.Web/Shared/Components/AssignmentForm/AssignmentForm.razor +++ b/Management.Web/Shared/Components/AssignmentForm/AssignmentForm.razor @@ -3,7 +3,6 @@ @inject CoursePlanner planner @code { - public LocalModule Module { get; set; } = default!; [Parameter] [EditorRequired] @@ -54,6 +53,7 @@ .Select(s => s.Points) .Sum(); + var newAssignment = Assignment with { Name=name, @@ -69,20 +69,29 @@ if(planner.LocalCourse != null) { + var currentModule = planner + .LocalCourse + .Modules + .First(m => + m.Assignments + .Select(a => a.Id) + .Contains(Assignment.Id) + ) ?? throw new Exception("could not find current module in assignment form"); + var updatedModules = planner.LocalCourse.Modules.Select(m => + m.Name == currentModule.Name + ? currentModule with + { + Assignments=currentModule.Assignments.Select(a => + a.Id == newAssignment.Id + ? newAssignment + : a + ).ToArray() + } + : m + ).ToArray(); planner.LocalCourse = planner.LocalCourse with { - Modules=planner.LocalCourse.Modules.Select(m => - m.Name != Module.Name - ? m - : Module with - { - Assignments=Module.Assignments.Select(a => - a.Id == newAssignment.Id - ? newAssignment - : a - ) - } - ) + Modules=updatedModules }; } AssignmentModal?.Hide(); diff --git a/Management.Web/Shared/Module/ModuleDetail.razor b/Management.Web/Shared/Module/ModuleDetail.razor index 867bdb4..1154a87 100644 --- a/Management.Web/Shared/Module/ModuleDetail.razor +++ b/Management.Web/Shared/Module/ModuleDetail.razor @@ -96,6 +96,9 @@
Assignments
+ diff --git a/Management.Web/Shared/Module/NewAssignment.razor b/Management.Web/Shared/Module/NewAssignment.razor index 6d821aa..737a1e4 100644 --- a/Management.Web/Shared/Module/NewAssignment.razor +++ b/Management.Web/Shared/Module/NewAssignment.razor @@ -33,16 +33,17 @@ if(planner.LocalCourse != null) { + var newModules =planner.LocalCourse.Modules.Select(m => + m.Name != Module.Name + ? m + : Module with + { + Assignments=Module.Assignments.Append(newAssignment) + } + ); planner.LocalCourse = planner.LocalCourse with { - Modules=planner.LocalCourse.Modules.Select(m => - m.Name != Module.Name - ? m - : Module with - { - Assignments=Module.Assignments.Append(newAssignment) - } - ) + Modules=newModules }; } modal?.Hide(); @@ -52,7 +53,7 @@ class="btn btn-outline-secondary" @onclick="() => modal?.Show()" > - New Assignment + + Assignment @@ -69,7 +70,7 @@ class="btn btn-primary" @onclick="submitHandler" > - Save changes + Create Assignment \ No newline at end of file diff --git a/Management.Web/Shared/Module/NewQuiz.razor b/Management.Web/Shared/Module/NewQuiz.razor new file mode 100644 index 0000000..2829667 --- /dev/null +++ b/Management.Web/Shared/Module/NewQuiz.razor @@ -0,0 +1,66 @@ +@using Management.Web.Shared.Components + +@inject CoursePlanner planner +@code { + + [Parameter] + [EditorRequired] + public LocalModule Module { get; set; } = default!; + + [Required] + [StringLength(50, ErrorMessage = "Name too long (50 character limit).")] + private string Name { get; set; } = ""; + + private Modal? modal { get; set; } = null; + + private void submitHandler() + { + Console.WriteLine("new quiz"); + var newQuiz = new LocalQuiz + { + Id = Guid.NewGuid().ToString(), + Name=Name, + }; + if(planner.LocalCourse != null) + { + var newModules = planner.LocalCourse.Modules.Select(m => + m.Name != Module.Name + ? m + : Module with + { + Quizzes=Module.Quizzes.Append(newQuiz) + } + ); + planner.LocalCourse = planner.LocalCourse with + { + Modules=newModules + }; + } + modal?.Hide(); + } +} + + + + + New Quiz + +
+ + +
+ +
+ +
+
\ No newline at end of file diff --git a/Management/Features/Configuration/CoursePlannerSyncronizationExtensions.cs b/Management/Features/Configuration/CoursePlannerSyncronizationExtensions.cs index 9d7b438..ae0b1ba 100644 --- a/Management/Features/Configuration/CoursePlannerSyncronizationExtensions.cs +++ b/Management/Features/Configuration/CoursePlannerSyncronizationExtensions.cs @@ -112,6 +112,8 @@ public static partial class CoursePlannerSyncronizationExtensions var canvasHtmlDescription = canvasAssignment.Description; canvasHtmlDescription = CanvasScriptTagRegex().Replace(canvasHtmlDescription, ""); canvasHtmlDescription = CanvasLinkTagRegex().Replace(canvasHtmlDescription, ""); + canvasHtmlDescription = canvasHtmlDescription.Replace(">", ">"); + canvasHtmlDescription = canvasHtmlDescription.Replace("<", "<"); var dueDatesSame = canvasAssignment.DueAt == localAssignment.DueAt; var descriptionSame = canvasHtmlDescription == localHtmlDescription; diff --git a/Management/Models/Local/LocalAssignment.cs b/Management/Models/Local/LocalAssignment.cs index df59858..5dfcec9 100644 --- a/Management/Models/Local/LocalAssignment.cs +++ b/Management/Models/Local/LocalAssignment.cs @@ -1,4 +1,4 @@ -using LocalModels; +namespace LocalModels; public record RubricItem { @@ -46,11 +46,11 @@ public record LocalAssignment public Dictionary TemplateVariables { get; init; } = new Dictionary(); public bool LockAtDueDate { get; init; } - public IEnumerable Rubric { get; init; } = new RubricItem[] { }; + public IEnumerable Rubric { get; init; } = Array.Empty(); public DateTime? LockAt { get; init; } public DateTime DueAt { get; init; } public int PointsPossible { get; init; } - public IEnumerable SubmissionTypes { get; init; } = new string[] { }; + public IEnumerable SubmissionTypes { get; init; } = Array.Empty(); public string GetRubricHtml() { @@ -73,9 +73,9 @@ public record LocalAssignment if (UseTemplate) { - var template = templates?.FirstOrDefault(t => t.Id == TemplateId); - if (template == null) - throw new Exception($"Could not find template with id {TemplateId}"); + var template = + (templates?.FirstOrDefault(t => t.Id == TemplateId)) + ?? throw new Exception($"Could not find template with id {TemplateId}"); var html = Markdig.Markdown.ToHtml(template.Markdown); diff --git a/Management/Services/Canvas/CanvasAssignmentService.cs b/Management/Services/Canvas/CanvasAssignmentService.cs index d8db44f..f8f1902 100644 --- a/Management/Services/Canvas/CanvasAssignmentService.cs +++ b/Management/Services/Canvas/CanvasAssignmentService.cs @@ -1,4 +1,5 @@ using CanvasModel.Assignments; +using LocalModels; using RestSharp; namespace Management.Services.Canvas; diff --git a/README.md b/README.md index e747d46..0e86190 100644 --- a/README.md +++ b/README.md @@ -16,26 +16,3 @@ Development command: `dotnet watch --project Management.Web/` Apparently the VSCode razor extension was compiled with a preview of dotnet 6... and only uses openssl 1.1. After installing openssl1.1 you can tell vscode to provide it with `export CLR_OPENSSL_VERSION_OVERRIDE=1.1; code ~/projects/canvasManagement`. The issue can be tracked [here](https://github.com/dotnet/razor/issues/6241) - - - - - - -

Daily Reading

-

Read today's assignment and do well please.

-

Github Submit URL

-

Rubric

[
-  {"label": "More Reading", "points": 5},
-  {"label": "sum to 8", "points": 1},
-  {"label": "(Extra Credit) Rubric Things", "points": 2}
-]
- -

Daily Reading

-

Read today's assignment and do well please.

-

Github Submit URL

-

Rubric

[
-  {"label": "More Reading", "points": 5},
-  {"label": "sum to 8", "points": 1},
-  {"label": "(Extra Credit) Rubric Things", "points": 2}
-]
\ No newline at end of file