@using Management.Web.Shared.Components @using Management.Web.Shared.Components.AssignmentForm @using Management.Web.Shared.Components.Forms @using CanvasModel.Assignments @inject CoursePlanner planner @inject CanvasService canvas @inject NavigationManager Navigation @inject AssignmentEditorContext assignmentContext @code { protected override void OnInitialized() { assignmentContext.StateHasChanged += reload; reload(); } private void reload() { if (assignmentContext.Assignment != null) { name = assignmentContext.Assignment.Name; lockAtDueDate = assignmentContext.Assignment.LockAtDueDate; } this.InvokeAsync(this.StateHasChanged); } public void Dispose() { assignmentContext.StateHasChanged -= reload; } private void OnHide() { assignmentContext.Assignment = null; name = ""; lockAtDueDate = false; } private string name { get; set; } = String.Empty; private bool lockAtDueDate { get; set; } private bool addingAssignmentToCanvas = false; private bool deletingAssignmentFromCanvas = false; private void submitHandler() { if (assignmentContext.Assignment != null) { var newAssignment = assignmentContext.Assignment with { Name = name, LockAtDueDate = lockAtDueDate, }; assignmentContext.SaveAssignment(newAssignment); } assignmentContext.Assignment = null; } private async Task HandleDelete() { if (planner.LocalCourse != null && assignmentContext.Assignment != null) { var assignment = assignmentContext.Assignment; var currentModule = planner .LocalCourse .Modules .First(m => m.Assignments.Contains(assignment) ) ?? 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 != assignment).ToArray() } : m ) .ToArray(); planner.LocalCourse = planner.LocalCourse with { Modules = newModules }; if (assignmentInCanvas != null && planner.LocalCourse.Settings.CanvasId != null) { ulong courseId = planner.LocalCourse.Settings.CanvasId ?? throw new Exception("cannot delete if no course id"); await canvas.Assignments.Delete(courseId, assignmentInCanvas.Id, assignment.Name); } } } private void handleNameChange(ChangeEventArgs e) { if (assignmentContext.Assignment != null) { var newAssignment = assignmentContext.Assignment with { Name = e.Value?.ToString() ?? "" }; assignmentContext.SaveAssignment(newAssignment); } } private void handleLockAtDueDateChange(ChangeEventArgs e) { if (assignmentContext.Assignment != null) { var lockAtDueDate = (bool)(e.Value ?? false); var lockAtDate = lockAtDueDate ? assignmentContext.Assignment.DueAt : assignmentContext.Assignment.LockAt; var newAssignment = assignmentContext.Assignment with { LockAtDueDate = lockAtDueDate, LockAt = lockAtDate, }; assignmentContext.SaveAssignment(newAssignment); } } private void setAssignmentGroup(LocalAssignmentGroup? group) { if (assignmentContext.Assignment == null) return; var newAssignment = assignmentContext.Assignment with { LocalAssignmentGroupId = group?.Id }; assignmentContext.SaveAssignment(newAssignment); } private LocalAssignmentGroup? selectedAssignmentGroup => planner .LocalCourse? .Settings .AssignmentGroups .FirstOrDefault(g => g.Id == assignmentContext.Assignment?.LocalAssignmentGroupId); private async Task addToCanvas() { addingAssignmentToCanvas = true; await assignmentContext.AddAssignmentToCanvas(); await planner.LoadCanvasData(); addingAssignmentToCanvas = false; } private CanvasAssignment? assignmentInCanvas => planner.CanvasAssignments?.FirstOrDefault(a => a.Name == assignmentContext.Assignment?.Name); private string canvasAssignmentUrl => $"https://snow.instructure.com/courses/{planner.LocalCourse?.Settings.CanvasId}/assignments/{assignmentInCanvas?.Id}"; private async Task deleteFromCanvas() { if (assignmentInCanvas == null || planner.LocalCourse.Settings.CanvasId == null || assignmentContext.Assignment == null) return; deletingAssignmentFromCanvas = true; await canvas.Assignments.Delete( (ulong)planner.LocalCourse.Settings.CanvasId, assignmentInCanvas.Id, assignmentContext.Assignment.Name); await planner.LoadCanvasData(); StateHasChanged(); deletingAssignmentFromCanvas = false; } } @assignmentContext.Assignment?.Name @if (assignmentContext.Assignment != null) {

}
@if (assignmentInCanvas != null) { View in Canvas }
@if (addingAssignmentToCanvas || deletingAssignmentFromCanvas) { }