diff --git a/Management.Web/Pages/AssignmentForm.razor b/Management.Web/Pages/AssignmentForm.razor new file mode 100644 index 0000000..e7c475a --- /dev/null +++ b/Management.Web/Pages/AssignmentForm.razor @@ -0,0 +1,33 @@ +@page "/course/{CourseName}/assignment/{AssignmentId}" +@using CanvasModel.EnrollmentTerms +@using Management.Web.Shared.Course +@using Management.Web.Shared.Module.Assignment.Templates +@using Management.Web.Shared.Semester +@using CanvasModel.Courses +@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage +@using LocalModels +@using Management.Web.Shared.Module.Assignment +@using Management.Web.Shared.Components + +@inject YamlManager yamlManager +@inject CanvasService canvas +@inject CoursePlanner planner + +@code { + [Parameter] + public string CourseName { get; set; } + [Parameter] + public string AssignmentId { get; set; } + + protected override async Task OnInitializedAsync() + { + if(planner.LocalCourse == null) + { + var courses = await yamlManager.LoadSavedCourses(); + planner.LocalCourse = courses.First(c => c.Name == CourseName); + } + base.OnInitialized(); + @* loading = false; *@ + } + +} \ No newline at end of file diff --git a/Management.Web/Shared/Module/Assignment/AssignmentDetails.razor b/Management.Web/Shared/Module/Assignment/AssignmentDetails.razor index 79fed0d..98cedba 100644 --- a/Management.Web/Shared/Module/Assignment/AssignmentDetails.razor +++ b/Management.Web/Shared/Module/Assignment/AssignmentDetails.razor @@ -5,10 +5,9 @@ @inject CoursePlanner planner @inject AssignmentEditorContext assignmentContext +@inherits DroppableAssignment + @code { - [Parameter] - [EditorRequired] - public LocalAssignment Assignment { get; set; } = new(); [Parameter] [EditorRequired] public LocalModule Module { get; set; } = new(); @@ -28,84 +27,7 @@ } private bool showAll { get; set; } = false; - private void dropOnDate(DateTime dropDate) - { - if (planner.LocalCourse == null) return; - var currentModule = planner - .LocalCourse - .Modules - .First(m => - m.Assignments - .Select(a => a.Id) - .Contains(Assignment.Id) - ) ?? throw new Exception("in day callback, could not find module"); - - - var defaultDueTimeDate = new DateTime( - year: dropDate.Year, - month: dropDate.Month, - day: dropDate.Day, - hour: planner.LocalCourse.DefaultDueTime.Hour, - minute: planner.LocalCourse.DefaultDueTime.Minute, - second: 0 - ); - - var moduleWithUpdatedAssignment = currentModule with - { - Assignments = currentModule.Assignments.Select(a => - a.Id != Assignment.Id - ? a - : a with - { - DueAt=defaultDueTimeDate - } - ) - }; - var updatedModules = planner.LocalCourse.Modules - .Select(m => - m.Name == moduleWithUpdatedAssignment.Name - ? moduleWithUpdatedAssignment - : m - ); - var newCourse = planner.LocalCourse with - { - Modules = updatedModules - }; - planner.LocalCourse = newCourse; - } - private void dropOnModule(LocalModule module) - { - if (planner.LocalCourse == null) return; - var newModules = planner.LocalCourse.Modules.Select(m => - m.Name != module.Name - ? m with - { - Assignments = m.Assignments.Where(a => a.Id != Assignment.Id).DistinctBy(a => a.Id) - } - : m with - { - Assignments = m.Assignments.Append(Assignment).DistinctBy(a => a.Id) - } - ); - - var newCourse = planner.LocalCourse with - { - Modules = newModules - }; - planner.LocalCourse = newCourse; - } - - private void DropCallback (DateTime? dropDate, LocalModule? module) - { - if (module == null) - { - dropOnDate(dropDate ?? Assignment.DueAt); - } - else - { - dropOnModule(module); - } - } + private void HandleDragStart() { dragContainer.DropCallback = DropCallback; diff --git a/Management.Web/Shared/Module/Assignment/DroppableAssignment.razor.cs b/Management.Web/Shared/Module/Assignment/DroppableAssignment.razor.cs new file mode 100644 index 0000000..68a88f6 --- /dev/null +++ b/Management.Web/Shared/Module/Assignment/DroppableAssignment.razor.cs @@ -0,0 +1,90 @@ +using Microsoft.AspNetCore.Components; + +namespace Management.Web.Shared.Module.Assignment; +public class DroppableAssignment : ComponentBase +{ + [Inject] + protected CoursePlanner planner { get; set; } = default!; + + [Parameter, EditorRequired] + public LocalAssignment Assignment { get; set; } = default!; + private void dropOnDate(DateTime dropDate) + { + if (planner.LocalCourse == null) return; + var currentModule = planner + .LocalCourse + .Modules + .First(m => + m.Assignments + .Select(a => a.Id) + .Contains(Assignment.Id) + ) ?? throw new Exception("in day callback, could not find module"); + + + var defaultDueTimeDate = new DateTime( + year: dropDate.Year, + month: dropDate.Month, + day: dropDate.Day, + hour: planner.LocalCourse.DefaultDueTime.Hour, + minute: planner.LocalCourse.DefaultDueTime.Minute, + second: 0 + ); + + var moduleWithUpdatedAssignment = currentModule with + { + Assignments = currentModule.Assignments.Select(a => + a.Id != Assignment.Id + ? a + : a with + { + DueAt = defaultDueTimeDate + } + ) + }; + var updatedModules = planner.LocalCourse.Modules + .Select(m => + m.Name == moduleWithUpdatedAssignment.Name + ? moduleWithUpdatedAssignment + : m + ); + var newCourse = planner.LocalCourse with + { + Modules = updatedModules + }; + planner.LocalCourse = newCourse; + } + private void dropOnModule(LocalModule module) + { + if (planner.LocalCourse == null) return; + var newModules = planner.LocalCourse.Modules.Select(m => + m.Name != module.Name + ? m with + { + Assignments = m.Assignments.Where(a => a.Id != Assignment.Id).DistinctBy(a => a.Id) + } + : m with + { + Assignments = m.Assignments.Append(Assignment).DistinctBy(a => a.Id) + } + ); + + var newCourse = planner.LocalCourse with + { + Modules = newModules + }; + planner.LocalCourse = newCourse; + } + + protected void DropCallback(DateTime? dropDate, LocalModule? module) + { + if (module == null) + { + dropOnDate(dropDate ?? Assignment.DueAt); + } + else + { + dropOnModule(module); + } + } + +} \ No newline at end of file diff --git a/Management.Web/Shared/Semester/Day/AssignmentInDay.razor b/Management.Web/Shared/Semester/Day/AssignmentInDay.razor index 867b12f..2d5f76d 100644 --- a/Management.Web/Shared/Semester/Day/AssignmentInDay.razor +++ b/Management.Web/Shared/Semester/Day/AssignmentInDay.razor @@ -1,12 +1,12 @@ +@using Management.Web.Shared.Module.Assignment @inject DragContainer dragContainer @inject CoursePlanner planner @inject AssignmentEditorContext assignmentContext +@inherits DroppableAssignment + @code { - [Parameter] - [EditorRequired] - public LocalAssignment Assignment { get; set; } = new(); protected override void OnInitialized() { planner.StateHasChanged += reload; @@ -20,84 +20,6 @@ planner.StateHasChanged -= reload; } - private void dropOnDate(DateTime dropDate) - { - - if (planner.LocalCourse == null) return; - var currentModule = planner - .LocalCourse - .Modules - .First(m => - m.Assignments - .Select(a => a.Id) - .Contains(Assignment.Id) - ) ?? throw new Exception("in day callback, could not find module"); - - var defaultDueTimeDate = new DateTime( - year: dropDate.Year, - month: dropDate.Month, - day: dropDate.Day, - hour: planner.LocalCourse.DefaultDueTime.Hour, - minute: planner.LocalCourse.DefaultDueTime.Minute, - second: 0 - ); - - var moduleWithUpdatedAssignment = currentModule with - { - Assignments = currentModule.Assignments.Select(a => - a.Id != Assignment.Id - ? a - : a with - { - DueAt=defaultDueTimeDate - } - ) - }; - var updatedModules = planner.LocalCourse.Modules - .Select(m => - m.Name == moduleWithUpdatedAssignment.Name - ? moduleWithUpdatedAssignment - : m - ); - var newCourse = planner.LocalCourse with - { - Modules = updatedModules - }; - planner.LocalCourse = newCourse; - } - private void dropOnModule(LocalModule module) - { - if (planner.LocalCourse == null) return; - var newModules = planner.LocalCourse.Modules.Select(m => - m.Name != module.Name - ? m with - { - Assignments = m.Assignments.Where(a => a.Id != Assignment.Id) - } - : m with - { - Assignments = m.Assignments.Append(Assignment) - } - ); - - var newCourse = planner.LocalCourse with - { - Modules = newModules - }; - planner.LocalCourse = newCourse; - } - - private void DropCallback (DateTime? dropDate, LocalModule? module) - { - if (module == null) - { - dropOnDate(dropDate ?? Assignment.DueAt); - } - else - { - dropOnModule(module); - } - } private void HandleDragStart() { dragContainer.DropCallback = DropCallback;