From ffaf4e116418d1fdff478539cfacd1135ff8adf7 Mon Sep 17 00:00:00 2001 From: Alex Mickelson Date: Mon, 24 Jul 2023 19:08:23 -0600 Subject: [PATCH] have many of the primary interactions working --- .../Features/ConfigurationTests.cs | 48 +++--- .../Features/SemesterPlannerTests.cs | 152 +++++++++--------- Management.Web/Pages/Index.razor | 12 +- Management.Web/Pages/_Host.cshtml | 6 +- Management.Web/Shared/Components/Modal.razor | 52 ++++++ .../Shared/Components/Modal.razor.css | 16 ++ .../Shared/Course/CourseDetails.razor | 12 +- Management.Web/Shared/MainLayout.razor | 9 +- .../Module/Assignment/AssignmentCard.razor | 24 --- .../Module/Assignment/AssignmentDetails.razor | 98 +++++++++++ .../Module/Assignment/AssignmentForm.razor | 59 +++++++ .../Module/Assignment/NewAssignment.razor | 71 +++++--- .../Shared/Module/ModuleDetail.razor | 78 ++++++--- Management.Web/Shared/Module/Modules.razor | 36 +++-- Management.Web/Shared/NavMenu.razor | 39 ++--- Management.Web/Shared/Semester/Day.razor | 66 +++++--- .../Utils/AssignmentDragContainer.cs | 4 +- Management/Models/Local/LocalModules.cs | 2 + Management/Models/LocalAssignment.cs | 40 ++--- 19 files changed, 577 insertions(+), 247 deletions(-) create mode 100644 Management.Web/Shared/Components/Modal.razor create mode 100644 Management.Web/Shared/Components/Modal.razor.css delete mode 100644 Management.Web/Shared/Module/Assignment/AssignmentCard.razor create mode 100644 Management.Web/Shared/Module/Assignment/AssignmentDetails.razor create mode 100644 Management.Web/Shared/Module/Assignment/AssignmentForm.razor diff --git a/Management.Test/Features/ConfigurationTests.cs b/Management.Test/Features/ConfigurationTests.cs index 2a78ab9..5bb1989 100644 --- a/Management.Test/Features/ConfigurationTests.cs +++ b/Management.Test/Features/ConfigurationTests.cs @@ -1,26 +1,26 @@ -using CanvasModel.EnrollmentTerms; +// using CanvasModel.EnrollmentTerms; -public class ConfigurationTests -{ - [Test] - public void TestCanCreateConfigFromTermAndDays() - { - DateTime startAt = new DateTime(2022, 1, 1); - DateTime endAt = new DateTime(2022, 1, 2); - var canvasTerm = new EnrollmentTermModel( - Id: 1, - Name: "one", - StartAt: startAt, - EndAt: endAt - ); - var daysOfWeek = new DayOfWeek[] { DayOfWeek.Monday }; - var management = new CoursePlanner(); - management.SetConfiguration(canvasTerm, daysOfWeek); - var config = management.SemesterCalendar; +// public class ConfigurationTests +// { +// [Test] +// public void TestCanCreateConfigFromTermAndDays() +// { +// DateTime startAt = new DateTime(2022, 1, 1); +// DateTime endAt = new DateTime(2022, 1, 2); +// var canvasTerm = new EnrollmentTermModel( +// Id: 1, +// Name: "one", +// StartAt: startAt, +// EndAt: endAt +// ); +// var daysOfWeek = new DayOfWeek[] { DayOfWeek.Monday }; +// var management = new CoursePlanner(); +// management.SetConfiguration(canvasTerm, daysOfWeek); +// var config = management.SemesterCalendar; - if(config == null) Assert.Fail(); - config!.StartDate.Should().Be(startAt); - config!.EndDate.Should().Be(endAt); - config!.Days.Should().BeEquivalentTo(daysOfWeek); - } -} \ No newline at end of file +// if(config == null) Assert.Fail(); +// config!.StartDate.Should().Be(startAt); +// config!.EndDate.Should().Be(endAt); +// config!.Days.Should().BeEquivalentTo(daysOfWeek); +// } +// } \ No newline at end of file diff --git a/Management.Test/Features/SemesterPlannerTests.cs b/Management.Test/Features/SemesterPlannerTests.cs index 050158a..b74ed73 100644 --- a/Management.Test/Features/SemesterPlannerTests.cs +++ b/Management.Test/Features/SemesterPlannerTests.cs @@ -1,97 +1,97 @@ -using CanvasModel.EnrollmentTerms; +// using CanvasModel.EnrollmentTerms; -namespace Management.Test; +// namespace Management.Test; -public class SemesterPlannerTests -{ - [Test] - public void TestCanCreatePlanner() - { +// public class SemesterPlannerTests +// { +// [Test] +// public void TestCanCreatePlanner() +// { - var config = new SemesterCalendarConfig( - StartDate: new DateTime(2022, 1, 1), - EndDate: new DateTime(2022, 1, 2), - new DayOfWeek[] { } - ); +// var config = new SemesterCalendarConfig( +// StartDate: new DateTime(2022, 1, 1), +// EndDate: new DateTime(2022, 1, 2), +// new DayOfWeek[] { } +// ); - var semester = new SemesterPlanner(config); +// var semester = new SemesterPlanner(config); - semester.Months.Count().Should().Be(1); - } +// semester.Months.Count().Should().Be(1); +// } - [Test] - public void TestNewPlannerHasCorrectNumberOfMonths() - { - var config = new SemesterCalendarConfig( - StartDate: new DateTime(2022, 1, 1), - EndDate: new DateTime(2022, 2, 1), - new DayOfWeek[] { } - ); +// [Test] +// public void TestNewPlannerHasCorrectNumberOfMonths() +// { +// var config = new SemesterCalendarConfig( +// StartDate: new DateTime(2022, 1, 1), +// EndDate: new DateTime(2022, 2, 1), +// new DayOfWeek[] { } +// ); - var semester = new SemesterPlanner(config); +// var semester = new SemesterPlanner(config); - semester.Months.Count().Should().Be(2); - } +// semester.Months.Count().Should().Be(2); +// } - [Test] - public void TestNewPlannerHandlesTermsThatWrapYears() - { - var config = new SemesterCalendarConfig( - StartDate: new DateTime(2022, 12, 1), - EndDate: new DateTime(2023, 1, 1), - new DayOfWeek[] { } - ); +// [Test] +// public void TestNewPlannerHandlesTermsThatWrapYears() +// { +// var config = new SemesterCalendarConfig( +// StartDate: new DateTime(2022, 12, 1), +// EndDate: new DateTime(2023, 1, 1), +// new DayOfWeek[] { } +// ); - var semester = new SemesterPlanner(config); +// var semester = new SemesterPlanner(config); - semester.Months.Count().Should().Be(2); - } +// semester.Months.Count().Should().Be(2); +// } - [Test] - public void TestSemesterGetsCorrectMonths() - { - var config = new SemesterCalendarConfig( - StartDate: new DateTime(2022, 1, 1), - EndDate: new DateTime(2022, 2, 1), - new DayOfWeek[] { } - ); +// [Test] +// public void TestSemesterGetsCorrectMonths() +// { +// var config = new SemesterCalendarConfig( +// StartDate: new DateTime(2022, 1, 1), +// EndDate: new DateTime(2022, 2, 1), +// new DayOfWeek[] { } +// ); - var semester = new SemesterPlanner(config); +// var semester = new SemesterPlanner(config); - semester.Months.First().Month.Should().Be(1); - semester.Months.Last().Month.Should().Be(2); - } +// semester.Months.First().Month.Should().Be(1); +// semester.Months.Last().Month.Should().Be(2); +// } - [Test] - public void TestMonthsCanWrapYears() - { - var config = new SemesterCalendarConfig( - StartDate: new DateTime(2022, 12, 1), - EndDate: new DateTime(2023, 1, 1), - new DayOfWeek[] { } - ); +// [Test] +// public void TestMonthsCanWrapYears() +// { +// var config = new SemesterCalendarConfig( +// StartDate: new DateTime(2022, 12, 1), +// EndDate: new DateTime(2023, 1, 1), +// new DayOfWeek[] { } +// ); - var semester = new SemesterPlanner(config); +// var semester = new SemesterPlanner(config); - semester.Months.First().Month.Should().Be(12); - semester.Months.First().Year.Should().Be(2022); +// semester.Months.First().Month.Should().Be(12); +// semester.Months.First().Year.Should().Be(2022); - semester.Months.Last().Month.Should().Be(1); - semester.Months.Last().Year.Should().Be(2023); - } +// semester.Months.Last().Month.Should().Be(1); +// semester.Months.Last().Year.Should().Be(2023); +// } - [Test] - public void TestSemesterTracksDaysOfWeek() - { - DayOfWeek[] days = new DayOfWeek[] { DayOfWeek.Monday }; - var config = new SemesterCalendarConfig( - StartDate: new DateTime(2022, 12, 1), - EndDate: new DateTime(2023, 1, 1), - days - ); +// [Test] +// public void TestSemesterTracksDaysOfWeek() +// { +// DayOfWeek[] days = new DayOfWeek[] { DayOfWeek.Monday }; +// var config = new SemesterCalendarConfig( +// StartDate: new DateTime(2022, 12, 1), +// EndDate: new DateTime(2023, 1, 1), +// days +// ); - var semester = new SemesterPlanner(config); - semester.Days.Should().BeEquivalentTo(days); - } -} \ No newline at end of file +// var semester = new SemesterPlanner(config); +// semester.Days.Should().BeEquivalentTo(days); +// } +// } \ No newline at end of file diff --git a/Management.Web/Pages/Index.razor b/Management.Web/Pages/Index.razor index 5edd309..604451d 100644 --- a/Management.Web/Pages/Index.razor +++ b/Management.Web/Pages/Index.razor @@ -13,9 +13,17 @@ @code { private bool showNewFile { get; set; } = false; - protected override void OnInitialized() +protected override void OnInitialized() { - planner.StateHasChanged += () => this.InvokeAsync(this.StateHasChanged); + planner.StateHasChanged += reload; + } + private void reload() + { + this.InvokeAsync(this.StateHasChanged); + } + public void Dispose() + { + planner.StateHasChanged -= reload; } } diff --git a/Management.Web/Pages/_Host.cshtml b/Management.Web/Pages/_Host.cshtml index c7cfa20..069fdcd 100644 --- a/Management.Web/Pages/_Host.cshtml +++ b/Management.Web/Pages/_Host.cshtml @@ -9,13 +9,15 @@ - + @* *@ + + - +
diff --git a/Management.Web/Shared/Components/Modal.razor b/Management.Web/Shared/Components/Modal.razor new file mode 100644 index 0000000..3eb46d9 --- /dev/null +++ b/Management.Web/Shared/Components/Modal.razor @@ -0,0 +1,52 @@ +@using Management.Web.Shared.Components + +@code { + [Parameter, EditorRequired] + public RenderFragment? Title { get; set; } + + [Parameter, EditorRequired] + public RenderFragment? Body { get; set; } + + [Parameter, EditorRequired] + public RenderFragment? Footer { get; set; } + + [Parameter] + public Action OnShow { get; set; } = () => { }; + + [Parameter] + public Action OnHide { get; set; } = () => { }; + + private string modalClass = "hide-modal"; + private bool showBackdrop = false; + public void Show() + { + modalClass = "show-modal"; + showBackdrop = true; + OnShow(); + } + + public void Hide() + { + modalClass = "hide-modal"; + showBackdrop = false; + OnHide(); + } +} + + + +@if (showBackdrop) +{ + +} diff --git a/Management.Web/Shared/Components/Modal.razor.css b/Management.Web/Shared/Components/Modal.razor.css new file mode 100644 index 0000000..46eda54 --- /dev/null +++ b/Management.Web/Shared/Components/Modal.razor.css @@ -0,0 +1,16 @@ + +.show-modal { + animation: enter 250ms; + display: block; + opacity: 1; +} + +@keyframes enter { + from { + display: block; + opacity: 0; + } + to { + opacity: 1; + } +} diff --git a/Management.Web/Shared/Course/CourseDetails.razor b/Management.Web/Shared/Course/CourseDetails.razor index d819306..d89b337 100644 --- a/Management.Web/Shared/Course/CourseDetails.razor +++ b/Management.Web/Shared/Course/CourseDetails.razor @@ -10,7 +10,15 @@ private bool showEditCourseSettings = false; protected override void OnInitialized() { - planner.StateHasChanged += () => this.InvokeAsync(this.StateHasChanged); + planner.StateHasChanged += reload; + } + private void reload() + { + this.InvokeAsync(this.StateHasChanged); + } + public void Dispose() + { + planner.StateHasChanged -= reload; } }
@@ -42,7 +50,7 @@ else } }
-
+
\ No newline at end of file diff --git a/Management.Web/Shared/MainLayout.razor b/Management.Web/Shared/MainLayout.razor index e07dcdb..e5fa9d5 100644 --- a/Management.Web/Shared/MainLayout.razor +++ b/Management.Web/Shared/MainLayout.razor @@ -3,14 +3,15 @@ Management.Web
- *@
-
+ @* maybe put some common buttons up here *@ + @*
About -
+
*@
@Body diff --git a/Management.Web/Shared/Module/Assignment/AssignmentCard.razor b/Management.Web/Shared/Module/Assignment/AssignmentCard.razor deleted file mode 100644 index 818d910..0000000 --- a/Management.Web/Shared/Module/Assignment/AssignmentCard.razor +++ /dev/null @@ -1,24 +0,0 @@ -@inject AssignmentDragContainer dragContainer - -@code { - [Parameter] - [Required] - public LocalAssignment assignment { get; set; } = new(); - private void HandleDragStart() - { - dragContainer.AssignmentBeingDragged = assignment; - System.Console.WriteLine("assignment set"); - } -} - -
-
-
-
@assignment.name
-
-
-
diff --git a/Management.Web/Shared/Module/Assignment/AssignmentDetails.razor b/Management.Web/Shared/Module/Assignment/AssignmentDetails.razor new file mode 100644 index 0000000..84c60f2 --- /dev/null +++ b/Management.Web/Shared/Module/Assignment/AssignmentDetails.razor @@ -0,0 +1,98 @@ +@using Management.Web.Shared.Components + +@inject AssignmentDragContainer dragContainer +@inject CoursePlanner planner + +@code { + [Parameter] + [EditorRequired] + public LocalAssignment assignment { get; set; } = new(); + [Parameter] + [EditorRequired] + public LocalModule module { get; set; } = new(); + private bool showUpdateForm = false; + + protected override void OnInitialized() + { + planner.StateHasChanged += reload; + } + private void reload() + { + this.InvokeAsync(this.StateHasChanged); + } + public void Dispose() + { + planner.StateHasChanged -= reload; + } + private Modal? assignmentEditorModal {get; set;} + private void HandleDragStart() + { + dragContainer.DropCallback = (DateTime dropDate) => { + if (planner.LocalCourse != null) + { + var newCourse = planner.LocalCourse with + { + Modules = planner.LocalCourse.Modules.Select(m => + m.Name != module.Name + ? m + : m with + { + Assignments = module.Assignments.Select(a => + a.id != assignment.id + ? a + : a with + { + due_at=dropDate + } + ) + } + ) + }; + planner.LocalCourse = newCourse; + } + }; + } + + private void HandleDragEnd() + { + dragContainer.DropCallback = null; + } + +} + +
+
+
+
@assignment.name
+
+ @assignment.description +
Due At: @assignment.due_at
+
Lock At: @assignment.lock_at
+
Points: @assignment.points_possible
+ @if(assignment.canvasId != null) + { +
Synced with canvas
+ } + else + { +
Not synced with canvas
+ } + @JsonSerializer.Serialize(@assignment.rubric) +
+ +
+
+
+ + \ No newline at end of file diff --git a/Management.Web/Shared/Module/Assignment/AssignmentForm.razor b/Management.Web/Shared/Module/Assignment/AssignmentForm.razor new file mode 100644 index 0000000..474f790 --- /dev/null +++ b/Management.Web/Shared/Module/Assignment/AssignmentForm.razor @@ -0,0 +1,59 @@ +@using Management.Web.Shared.Components + +@code { + [Parameter] + [EditorRequired] + public LocalAssignment assignment + { + get; + set; + } = default!; + + [Parameter] + [EditorRequired] + public bool Show { get; set; } + + [Parameter] + public Action OnHide { get; set; } = () => { }; + public Modal AssignmentModal { get; set; } + + private string description { get; set; } + + protected override void OnParametersSet() + { + if(Show) + { + AssignmentModal.Show(); + } + description = assignment.description; + } + + private void submitHandler() + { + + } +} + + + @assignment.name + +
+ +