@page "/" @using CanvasModel.EnrollmentTerms @using Management.Web.Shared.Semester @using CanvasModel.Courses @using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage @inject CanvasService canvas @inject CoursePlanner planner @inject ProtectedLocalStorage BrowserStorage @code { private string semesterConfigurationKey = "semesterCalendarConfiguration"; private IEnumerable? terms { get; set; } = null; private bool loadingCourses = false; private IEnumerable? courses {get; set;} = null; private ulong? _selectedTermId { get; set; } private ulong? selectedTermId { get => _selectedTermId; set { _selectedTermId = value; updateCourses(); } } private EnrollmentTermModel? selectedTerm { get => terms?.FirstOrDefault(t => t.Id == selectedTermId); } private ulong? selectedCourseId { get => planner.Course?.Id; set { planner.Course = courses?.First(c => c.Id == value); updateModules(); } } private List days { get; set; } = new(); private bool saved { get; set; } = false; protected override async Task OnInitializedAsync() { terms = await canvas.GetCurrentTermsFor(); readTermFromConfig(); readDaysFromConfig(); } protected override async Task OnAfterRenderAsync(bool firstRender) { if(firstRender) { var storedConfiguration = await BrowserStorage.GetAsync(semesterConfigurationKey); if (storedConfiguration.Success) { planner.SemesterCalendar = storedConfiguration.Value; } else { Console.WriteLine("no stored configuration"); } StateHasChanged(); } } private async Task updateCourses() { if(selectedTermId != null) { loadingCourses = true; courses = await canvas.GetCourses((ulong)selectedTermId); loadingCourses = false; } else courses = null; StateHasChanged(); } private async Task updateModules() { if(planner.Course != null) { planner.Modules = await canvas.GetModules(planner.Course.Id); } StateHasChanged(); } private void readTermFromConfig() { if (terms == null || planner.SemesterCalendar == null) return; foreach (var term in terms) { var termInConfiguration = planner.SemesterCalendar.StartDate == term.StartAt; if (termInConfiguration) { selectedTermId = term.Id; } } } private void readDaysFromConfig() { if (terms == null || planner.SemesterCalendar == null) return; days = planner.SemesterCalendar.Days.ToList(); } public async void HandleSave() { saved = true; planner.SetConfiguration( selectedTerm ?? throw new Exception("cannot save configuration without selecting term"), days.ToArray() ); await BrowserStorage.SetAsync( semesterConfigurationKey, planner.SemesterCalendar ?? throw new Exception("Semester Calendar configuration not properly configured") ); } } Index @if (terms != null) {
} @if (selectedTerm is not null) {
Select Days Of Week
@foreach (DayOfWeek day in (DayOfWeek[])Enum.GetValues(typeof(DayOfWeek))) {
} @if(loadingCourses) { }
@if(courses != null) {
}
} @if(planner.Modules != null) {
@JsonSerializer.Serialize(planner.Modules)
} @if (planner.SemesterCalendar is not null) {
Config complete
}