@using Management.Web.Shared.Components @inject CoursePlanner planner @inject CanvasService canvas @code { protected override void OnInitialized() { planner.StateHasChanged += reload; } private void reload() { this.InvokeAsync(this.StateHasChanged); } public void Dispose() { planner.StateHasChanged -= reload; } [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; } = null; private string name { get; set; } = String.Empty; private bool lockAtDueDate { get; set; } private IEnumerable rubric { get; set; } = Enumerable.Empty(); private IEnumerable submissionTypes { get; set; } = Enumerable.Empty(); protected override void OnParametersSet() { if (Show) { AssignmentModal?.Show(); } name = Assignment.Name; lockAtDueDate = Assignment.LockAtDueDate; rubric = Assignment.Rubric; submissionTypes = Assignment.SubmissionTypes; } private void submitHandler() { var totalRubricPoints = rubric .Where(r => !r.Label.Contains(RubricItem.extraCredit)) .Select(s => s.Points) .Sum(); var newAssignment = Assignment with { Name = name, LockAtDueDate = lockAtDueDate, Rubric = rubric, PointsPossible = totalRubricPoints, SubmissionTypes = submissionTypes, }; 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 = updatedModules }; } AssignmentModal?.Hide(); } private void updateRubric(IEnumerable newRubric) { rubric = newRubric; StateHasChanged(); } private void SetTypes(IEnumerable newTypes) { submissionTypes = newTypes; StateHasChanged(); } private async Task HandleDelete() { if (planner.LocalCourse != null) { var assignment = Assignment; var currentModule = planner .LocalCourse .Modules .First(m => m.Assignments .Select(a => a.Id) .Contains(Assignment.Id) ) ?? throw new Exception("handling assignment delete, could not find module"); var newModules = planner.LocalCourse.Modules.Select(m => m.Name == currentModule.Name ? m with { Assignments = m.Assignments.Where(a => a.Id != assignment.Id).ToArray() } : m ).ToArray(); planner.LocalCourse = planner.LocalCourse with { Modules = newModules }; if (assignment.CanvasId != null && planner.LocalCourse.CanvasId != null) { ulong courseId = planner.LocalCourse.CanvasId ?? throw new Exception("cannot delete if no course id"); await canvas.Assignments.Delete(courseId, assignment); } } } } @Assignment.Name