@using Management.Web.Shared.Components @using CanvasModel.Pages @inject CoursePlanner planner @inject ICanvasService canvas @inject NavigationManager Navigation @inject PageEditorContext pageContext @code { protected override void OnInitialized() { pageContext.StateHasChanged += reload; reload(); } private void reload() { if (pageContext.Page != null) { name = pageContext.Page.Name; } this.InvokeAsync(this.StateHasChanged); } public void Dispose() { pageContext.StateHasChanged -= reload; } private string name { get; set; } = String.Empty; private bool addingPageToCanvas = false; private bool deletingPageFromCanvas = false; private CanvasPage? pageInCanvas => planner.CanvasPages?.FirstOrDefault(a => a.Title == pageContext.Page?.Name); private string canvasPageUrl => $"https://snow.instructure.com/courses/{planner.LocalCourse?.Settings.CanvasId}/assignments/{pageInCanvas?.PageId}"; private void submitHandler() { if (pageContext.Page != null) { var newPage = pageContext.Page with { Name = name, }; pageContext.SavePage(newPage); } pageContext.Page = null; } private async Task HandleDelete() { if (planner.LocalCourse != null && pageContext.Page != null) { var page = pageContext.Page; var currentModule = planner .LocalCourse .Modules .First(m => m.Pages.Contains(page) ) ?? throw new Exception("handling page delete, could not find module"); var newModules = planner.LocalCourse.Modules.Select(m => m.Name == currentModule.Name ? m with { Pages = m.Pages.Where(p => p != page).ToArray() } : m ) .ToArray(); planner.LocalCourse = planner.LocalCourse with { Modules = newModules }; if (pageInCanvas != null && planner.LocalCourse.Settings.CanvasId != null) { ulong courseId = planner.LocalCourse.Settings.CanvasId ?? throw new Exception("cannot delete if no course id"); await canvas.Pages.Delete(courseId, pageInCanvas.PageId); } Navigation.NavigateTo("/course/" + planner.LocalCourse?.Settings.Name); } } private void handleNameChange(ChangeEventArgs e) { if (pageContext.Page != null) { var newPage = pageContext.Page with { Name = e.Value?.ToString() ?? "" }; pageContext.SavePage(newPage); } } private async Task addToCanvas() { addingPageToCanvas = true; await pageContext.AddPageToCanvas(); await planner.LoadCanvasData(); addingPageToCanvas = false; } private async Task updateInCanvas() { if(pageInCanvas != null) { addingPageToCanvas = true; await pageContext.UpdateInCanvas(pageInCanvas.PageId); await planner.LoadCanvasData(); addingPageToCanvas = false; } } private async Task deleteFromCanvas() { if (pageInCanvas == null || planner?.LocalCourse?.Settings.CanvasId == null || pageContext.Page == null ) return; deletingPageFromCanvas = true; await canvas.Pages.Delete( (ulong)planner.LocalCourse.Settings.CanvasId, pageInCanvas.PageId ); await planner.LoadCanvasData(); deletingPageFromCanvas = false; StateHasChanged(); } }