diff --git a/Management.Web/Pages/Calendar.razor b/Management.Web/Pages/Calendar.razor deleted file mode 100644 index 9d0c47c..0000000 --- a/Management.Web/Pages/Calendar.razor +++ /dev/null @@ -1,35 +0,0 @@ -@page "/calendar" -@using CanvasModel.EnrollmentTerms -@using Management.Web.Shared.Module -@using Management.Web.Shared.Semester - -@inject CoursePlanner configurationManagement - -@code -{ - private SemesterPlanner? semester { get; set; } - protected override void OnParametersSet() - { - if (configurationManagement.SemesterCalendar != null) - semester = new SemesterPlanner(configurationManagement.SemesterCalendar); - } - -} -
- -
-
- - @if (semester != null) - { - @foreach (var month in semester.Months) - { - -
- } - } -
-
- -
-
\ No newline at end of file diff --git a/Management.Web/Pages/Index.razor b/Management.Web/Pages/Index.razor index 3287db0..531e0a2 100644 --- a/Management.Web/Pages/Index.razor +++ b/Management.Web/Pages/Index.razor @@ -12,9 +12,59 @@ @code { + private bool showNewFile { get; set; } = false; + protected override void OnInitialized() + { + planner.StateHasChanged += () => this.InvokeAsync(this.StateHasChanged); + } + } Index - +@if(planner.LocalCourse == null) +{ + + @if(!showNewFile) + { +
+ +
+ } - + @if(showNewFile) + { +
+ +
+ +
+
+ +
+
+ } +} + +@if(planner.LocalCourse != null) +{ + +
+ +
+ +} diff --git a/Management.Web/Program.cs b/Management.Web/Program.cs index e6a38b6..c99cbf1 100644 --- a/Management.Web/Program.cs +++ b/Management.Web/Program.cs @@ -4,6 +4,7 @@ global using System.ComponentModel.DataAnnotations; global using CanvasModel.EnrollmentTerms; global using CanvasModel.Courses; global using CanvasModel; +global using LocalModels; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Web; diff --git a/Management.Web/Shared/Calendar.razor b/Management.Web/Shared/Calendar.razor new file mode 100644 index 0000000..74d228e --- /dev/null +++ b/Management.Web/Shared/Calendar.razor @@ -0,0 +1,25 @@ + +@using CanvasModel.EnrollmentTerms +@using Management.Web.Shared.Module +@using Management.Web.Shared.Semester + +@inject CoursePlanner planner + +
+ +
+
+ + @if (planner.LocalCourse != null) + { + @foreach (var month in SemesterPlanner.GetMonthsBetweenDates(planner.LocalCourse.StartDate, planner.LocalCourse.EndDate)) + { + +
+ } + } +
+
+ +
+
\ No newline at end of file diff --git a/Management.Web/Shared/CurrentFiles.razor b/Management.Web/Shared/CurrentFiles.razor index 152a364..01fd685 100644 --- a/Management.Web/Shared/CurrentFiles.razor +++ b/Management.Web/Shared/CurrentFiles.razor @@ -1,6 +1,7 @@ @using LocalModels @inject YamlManager yamlManager +@inject CoursePlanner planner @code { @@ -9,6 +10,9 @@ { localCourses = await yamlManager.LoadSavedCourses(); } + + + } @if(localCourses != null) @@ -16,6 +20,19 @@

Stored Courses

@foreach (var course in localCourses) { -
@course.Name
+ void SetCourse() + { + planner.LocalCourse = course; + this.StateHasChanged(); + } +
+ + @course.Name +
} } \ No newline at end of file diff --git a/Management.Web/Shared/Module/Assignment/NewAssignment.razor b/Management.Web/Shared/Module/Assignment/NewAssignment.razor index a1364c3..93a2528 100644 --- a/Management.Web/Shared/Module/Assignment/NewAssignment.razor +++ b/Management.Web/Shared/Module/Assignment/NewAssignment.razor @@ -1,10 +1,10 @@ -@inject CoursePlanner configurationManagement +@inject CoursePlanner planner @code { [Parameter, EditorRequired] - public ulong ModuleId { get; set; } + public string ModuleName { get; set; } [Parameter] public EventCallback OnSubmit { get; set; } @@ -28,7 +28,7 @@ points_possible = 10, submission_types = new SubmissionType[] { SubmissionType.online_text_entry } }; - configurationManagement.Assignments = configurationManagement.Assignments.Append(newAssignment); + @* planner.LocalCourse.Assignments = planner.Assignments.Append(newAssignment); *@ await OnSubmit.InvokeAsync(); } } diff --git a/Management.Web/Shared/Module/ModuleDetail.razor b/Management.Web/Shared/Module/ModuleDetail.razor index c63a791..e632699 100644 --- a/Management.Web/Shared/Module/ModuleDetail.razor +++ b/Management.Web/Shared/Module/ModuleDetail.razor @@ -1,9 +1,11 @@ @using Management.Web.Shared.Module.Assignment +@using LocalModels + @inject CoursePlanner configurationManagement @code { [Parameter, EditorRequired] - public CourseModule Module { get; set; } = default!; + public LocalModule Module { get; set; } = default!; private bool showAddAssignment { get; set; } = false; @@ -20,7 +22,7 @@ @if (showAddAssignment) { - + }
Assignments
diff --git a/Management.Web/Shared/Module/Modules.razor b/Management.Web/Shared/Module/Modules.razor index a870c2e..edb37a5 100644 --- a/Management.Web/Shared/Module/Modules.razor +++ b/Management.Web/Shared/Module/Modules.razor @@ -2,7 +2,7 @@ @using System.Linq @using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage -@inject CoursePlanner configurationManagement +@inject CoursePlanner planner @inject ProtectedLocalStorage BrowserStorage @inject BrowserStorageManagement storage @@ -34,10 +34,13 @@ else } -@foreach (var module in configurationManagement.Modules) +@if (planner.LocalCourse != null) { -
- + @foreach (var module in planner.LocalCourse.Modules) + { +
+ + } }
diff --git a/Management.Web/Shared/Module/NewModule.razor b/Management.Web/Shared/Module/NewModule.razor index 583b322..3bd1b17 100644 --- a/Management.Web/Shared/Module/NewModule.razor +++ b/Management.Web/Shared/Module/NewModule.razor @@ -12,10 +12,18 @@ private async Task submitHandler() { - if(planner.Course != null && Name != "") + if(planner.LocalCourse != null && Name != "") { - await canvas.CreateModule(planner.Course.Id, Name); - planner.Modules = await canvas.GetModules(planner.Course.Id); + var newModule = new LocalModule + { + Name=Name + }; + + + planner.LocalCourse = planner.LocalCourse with + { + Modules = planner.LocalCourse.Modules.Append(newModule) + }; } Name = ""; await OnSubmit.InvokeAsync(); diff --git a/Management.Web/Shared/NavMenu.razor b/Management.Web/Shared/NavMenu.razor index be8c887..8675057 100644 --- a/Management.Web/Shared/NavMenu.razor +++ b/Management.Web/Shared/NavMenu.razor @@ -14,11 +14,6 @@ Home - diff --git a/Management.Web/Shared/Semester/Day.razor b/Management.Web/Shared/Semester/Day.razor index d9f0e22..cfef739 100644 --- a/Management.Web/Shared/Semester/Day.razor +++ b/Management.Web/Shared/Semester/Day.razor @@ -1,15 +1,14 @@ @inject AssignmentDragContainer dragContainer @inject CoursePlanner configurationManagement +@inject CoursePlanner planner + @code { [Parameter, EditorRequired] public DateTime? date { get; set; } = default!; - [Parameter, EditorRequired] - public SemesterPlanner Semester { get; set; } = default!; - private bool isWeekDay { get => date?.DayOfWeek != null; } @@ -27,9 +26,9 @@ DayOfWeek? weekDay = date?.DayOfWeek; DayOfWeek notNullDay = weekDay ?? default; var dayInSemester = - Semester.Days.Contains(notNullDay) - && date < Semester.LastDay - && date > Semester.FirstDay; + planner.LocalCourse.DaysOfWeek.Contains(notNullDay) + && date < planner.LocalCourse.EndDate + && date > planner.LocalCourse.StartDate; var totalClasses = dayInSemester ? $"bg-light {baseClasses}" : baseClasses; diff --git a/Management.Web/Shared/Semester/MonthDetail.razor b/Management.Web/Shared/Semester/MonthDetail.razor index e7f673e..e74cd7b 100644 --- a/Management.Web/Shared/Semester/MonthDetail.razor +++ b/Management.Web/Shared/Semester/MonthDetail.razor @@ -1,11 +1,12 @@ -@using System.Linq; +@using System.Linq + +@inject CoursePlanner planner + @code { [Parameter, EditorRequired] public CalendarMonth Month { get; set; } = default!; - [Parameter, EditorRequired] - public SemesterPlanner Semester { get; set; } = default!; public DayOfWeek[] WeekDaysList { get => (DayOfWeek[])Enum.GetValues(typeof(DayOfWeek)); } public string MonthName { get => Month?.DaysByWeek.First().FirstOrDefault(d => d != null)?.ToString("MMMM") ?? ""; } @@ -18,7 +19,7 @@
@foreach (DayOfWeek day in WeekDaysList) { -
@day
+
@day
}
@@ -41,7 +42,7 @@ {
} *@ - + } } \ No newline at end of file diff --git a/Management.Web/Utils/StorageManagement.cs b/Management.Web/Utils/StorageManagement.cs index e2e7aeb..87f9c20 100644 --- a/Management.Web/Utils/StorageManagement.cs +++ b/Management.Web/Utils/StorageManagement.cs @@ -47,17 +47,17 @@ public class BrowserStorageManagement // Console.WriteLine("no stored assignments"); // } - var storedCourseId = await storage.GetAsync(courseIdKey); - if (storedCourseId.Success) - { - // var courses = - planner.Course = await canvas.GetCourse(storedCourseId.Value); - planner.Modules = await canvas.GetModules(planner.Course.Id); - } - else - { - Console.WriteLine("no stored assignments"); - } + // var storedCourseId = await storage.GetAsync(courseIdKey); + // if (storedCourseId.Success) + // { + // // var courses = + // planner.Course = await canvas.GetCourse(storedCourseId.Value); + // planner.Modules = await canvas.GetModules(planner.Course.Id); + // } + // else + // { + // Console.WriteLine("no stored assignments"); + // } } public async Task Save() @@ -65,9 +65,9 @@ public class BrowserStorageManagement // await storage.SetAsync(moduleStorageKey, planner.Modules); // await storage.SetAsync(assignmentStorageKey, planner.Assignments); - if (planner.Course != null) - await storage.SetAsync(courseIdKey, planner.Course.Id); - else - await storage.DeleteAsync(courseIdKey); + // if (planner.Course != null) + // await storage.SetAsync(courseIdKey, planner.Course.Id); + // else + // await storage.DeleteAsync(courseIdKey); } } diff --git a/Management/Features/Calendar/SemesterPlanner.cs b/Management/Features/Calendar/SemesterPlanner.cs index 51cc89f..2be03b8 100644 --- a/Management/Features/Calendar/SemesterPlanner.cs +++ b/Management/Features/Calendar/SemesterPlanner.cs @@ -2,28 +2,20 @@ using CanvasModel.EnrollmentTerms; public class SemesterPlanner { - public DateTime FirstDay { get; } - public DateTime LastDay { get; } - - public IEnumerable Months { get; } - public IEnumerable Days { get; } - public SemesterPlanner(SemesterCalendarConfig configuration) + public static IEnumerable GetMonthsBetweenDates( + DateTime startDate, + DateTime endDate + ) { - FirstDay = configuration.StartDate; - LastDay = configuration.EndDate; + var monthsInTerm = 1 + ((endDate.Year - startDate.Year) * 12) + endDate.Month - startDate.Month; - var monthsInTerm = - 1 + ((LastDay.Year - FirstDay.Year) * 12) - + LastDay.Month - FirstDay.Month; - - Months = Enumerable + return Enumerable .Range(0, monthsInTerm) .Select(monthDiff => { - var month = ((FirstDay.Month + monthDiff - 1) % 12) + 1; - var year = FirstDay.Year + ((FirstDay.Month + monthDiff - 1) / 12); + var month = ((startDate.Month + monthDiff - 1) % 12) + 1; + var year = startDate.Year + ((startDate.Month + monthDiff - 1) / 12); return new CalendarMonth(year, month); }); - Days = configuration.Days; } -} \ No newline at end of file +} diff --git a/Management/Features/Configuration/CoursePlanner.cs b/Management/Features/Configuration/CoursePlanner.cs index afe58f3..c9d0541 100644 --- a/Management/Features/Configuration/CoursePlanner.cs +++ b/Management/Features/Configuration/CoursePlanner.cs @@ -1,24 +1,19 @@ using CanvasModel.EnrollmentTerms; using CanvasModel.Courses; using CanvasModel; +using LocalModels; public class CoursePlanner { - public void SetConfiguration(EnrollmentTermModel canvasTerm, DayOfWeek[] daysOfWeek) + public LocalCourse _localCourse { get; set; } = default!; + public LocalCourse LocalCourse { - var start = - canvasTerm.StartAt - ?? throw new Exception($"Canvas Term must have a start date. Term: {canvasTerm.Name}"); - var end = - canvasTerm.EndAt - ?? throw new Exception($"Canvas Term must have a end date. Term: {canvasTerm.Name}"); - - SemesterCalendar = new SemesterCalendarConfig(StartDate: start, EndDate: end, Days: daysOfWeek); + get => _localCourse; + set + { + _localCourse = value; + StateHasChanged?.Invoke(); + } } - - public SemesterCalendarConfig? SemesterCalendar { get; set; } = null; - - public IEnumerable Modules { get; set; } = new CourseModule[] { }; - public IEnumerable Assignments { get; set; } = new LocalAssignment[] { }; - public CourseModel? Course { get; set; } = null; + public event Action? StateHasChanged; } diff --git a/Management/Models/Local/LocalCourse.cs b/Management/Models/Local/LocalCourse.cs index abb9339..170fbf5 100644 --- a/Management/Models/Local/LocalCourse.cs +++ b/Management/Models/Local/LocalCourse.cs @@ -6,4 +6,6 @@ public record LocalCourse public string Name { get; init; } = string.Empty; public IEnumerable DaysOfWeek { get; init; } = Enumerable.Empty(); public ulong? CanvasId { get; init; } + public DateTime StartDate { get; init; } + public DateTime EndDate { get; init; } } diff --git a/Management/Models/SemesterConfiguration.cs b/Management/Models/SemesterConfiguration.cs deleted file mode 100644 index b54d0ea..0000000 --- a/Management/Models/SemesterConfiguration.cs +++ /dev/null @@ -1,5 +0,0 @@ -public record SemesterCalendarConfig( - DateTime StartDate, - DateTime EndDate, - IEnumerable Days -); \ No newline at end of file