@using Management.Web.Shared.Components @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; } this.InvokeAsync(this.StateHasChanged); } public void Dispose() { assignmentContext.StateHasChanged -= reload; } private void OnHide() { assignmentContext.Assignment = null; name = ""; } private string name { get; set; } = String.Empty; private bool addingAssignmentToCanvas = false; private bool deletingAssignmentFromCanvas = false; private bool showHelp = false; private void toggleHelp() => showHelp = !showHelp; private void submitHandler() { if (assignmentContext.Assignment != null) { var newAssignment = assignmentContext.Assignment with { Name = name, }; 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); } Navigation.NavigateTo("/course/" + planner.LocalCourse?.Settings.Name); } } private void handleNameChange(ChangeEventArgs e) { if (assignmentContext.Assignment != null) { var newAssignment = assignmentContext.Assignment with { Name = e.Value?.ToString() ?? "" }; assignmentContext.SaveAssignment(newAssignment); } } private void setAssignmentGroup(LocalAssignmentGroup? group) { if (assignmentContext.Assignment == null) return; var newAssignment = assignmentContext.Assignment with { LocalAssignmentGroupName = group?.Name }; assignmentContext.SaveAssignment(newAssignment); } private LocalAssignmentGroup? selectedAssignmentGroup => planner .LocalCourse? .Settings .AssignmentGroups .FirstOrDefault(g => g.Name == assignmentContext.Assignment?.LocalAssignmentGroupName); private async Task addToCanvas() { addingAssignmentToCanvas = true; await assignmentContext.AddAssignmentToCanvas(); await planner.LoadCanvasData(); addingAssignmentToCanvas = false; } private async Task updateInCanvas() { if(assignmentInCanvas != null) { addingAssignmentToCanvas = true; await assignmentContext.UpdateInCanvas(assignmentInCanvas.Id); 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(); deletingAssignmentFromCanvas = false; StateHasChanged(); } }