@page "/" @using CanvasModel.EnrollmentTerms @using Management.Web.Shared.Semester @using CanvasModel.Courses @using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage @inject CanvasService canvasService @inject CoursePlanner configurationManagement @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 => configurationManagement.Course?.Id; set { configurationManagement.Course = courses?.First(c => c.Id == value); } } private List days { get; set; } = new(); private bool saved { get; set; } = false; protected override async Task OnInitializedAsync() { terms = await canvasService.GetCurrentTermsFor(); readTermFromConfig(); readDaysFromConfig(); } protected override async Task OnAfterRenderAsync(bool firstRender) { if(firstRender) { var storedConfiguration = await BrowserStorage.GetAsync(semesterConfigurationKey); if (storedConfiguration.Success) { Console.WriteLine(JsonSerializer.Serialize(storedConfiguration.Value)); configurationManagement.SemesterCalendar = storedConfiguration.Value; } else { Console.WriteLine("no stored configuration"); } StateHasChanged(); } } private async Task updateCourses() { if(selectedTermId != null) { loadingCourses = true; courses = await canvasService.GetCourses((ulong)selectedTermId); System.Console.WriteLine(courses); System.Console.WriteLine(selectedTermId); loadingCourses = false; } else courses = null; StateHasChanged(); } private void readTermFromConfig() { if (terms == null || configurationManagement.SemesterCalendar == null) return; foreach (var term in terms) { var termInConfiguration = configurationManagement.SemesterCalendar.StartDate == term.StartAt; if (termInConfiguration) { selectedTermId = term.Id; } } } private void readDaysFromConfig() { if (terms == null || configurationManagement.SemesterCalendar == null) return; days = configurationManagement.SemesterCalendar.Days.ToList(); } public async void HandleSave() { saved = true; configurationManagement.SetConfiguration( selectedTerm ?? throw new Exception("cannot save configuration without selecting term"), days.ToArray() ); await BrowserStorage.SetAsync( semesterConfigurationKey, configurationManagement.SemesterCalendar ?? throw new Exception("Semester Calendar configuration not properly configured") ); Console.WriteLine(JsonSerializer.Serialize(await BrowserStorage.GetAsync(semesterConfigurationKey))); } } 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 (configurationManagement.SemesterCalendar is not null) {
Config complete
}