can select course from existing file

This commit is contained in:
2023-07-24 13:39:22 -06:00
parent 04274bd6c5
commit 6232a7a94e
17 changed files with 168 additions and 118 deletions

View File

@@ -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);
}
}
<br>
<div class="row">
<div class="col">
@if (semester != null)
{
@foreach (var month in semester.Months)
{
<MonthDetail Month="month" Semester="semester" />
<hr />
}
}
</div>
<div class="col">
<Modules />
</div>
</div>

View File

@@ -12,9 +12,59 @@
@code @code
{ {
private bool showNewFile { get; set; } = false;
protected override void OnInitialized()
{
planner.StateHasChanged += () => this.InvokeAsync(this.StateHasChanged);
}
} }
<PageTitle>Index</PageTitle> <PageTitle>Index</PageTitle>
@if(planner.LocalCourse == null)
{
<CurrentFiles /> <CurrentFiles />
@if(!showNewFile)
{
<div class="text-center">
<button
@onclick="@(()=>showNewFile = true)"
class="btn btn-primary"
>
Create New File
</button>
</div>
}
@if(showNewFile)
{
<div class="text-center">
<button
@onclick="@(()=>showNewFile = false)"
class="btn btn-primary"
>
Hide File Initialization
</button>
</div>
<div class="row justify-content-center">
<div class="col-auto border rounded bg-light p-3">
<InitializeYamlFromCanvas /> <InitializeYamlFromCanvas />
</div>
</div>
}
}
@if(planner.LocalCourse != null)
{
<div class="">
<button
@onclick="@(() => planner.LocalCourse = default)"
class="btn btn-primary"
>
Select New Course
</button>
</div>
<Calendar />
}

View File

@@ -4,6 +4,7 @@ global using System.ComponentModel.DataAnnotations;
global using CanvasModel.EnrollmentTerms; global using CanvasModel.EnrollmentTerms;
global using CanvasModel.Courses; global using CanvasModel.Courses;
global using CanvasModel; global using CanvasModel;
global using LocalModels;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.Web;

View File

@@ -0,0 +1,25 @@
@using CanvasModel.EnrollmentTerms
@using Management.Web.Shared.Module
@using Management.Web.Shared.Semester
@inject CoursePlanner planner
<br>
<div class="row">
<div class="col">
@if (planner.LocalCourse != null)
{
@foreach (var month in SemesterPlanner.GetMonthsBetweenDates(planner.LocalCourse.StartDate, planner.LocalCourse.EndDate))
{
<MonthDetail Month="month" />
<hr />
}
}
</div>
<div class="col">
<Modules />
</div>
</div>

View File

@@ -1,6 +1,7 @@
@using LocalModels @using LocalModels
@inject YamlManager yamlManager @inject YamlManager yamlManager
@inject CoursePlanner planner
@code @code
{ {
@@ -9,6 +10,9 @@
{ {
localCourses = await yamlManager.LoadSavedCourses(); localCourses = await yamlManager.LoadSavedCourses();
} }
} }
@if(localCourses != null) @if(localCourses != null)
@@ -16,6 +20,19 @@
<h3>Stored Courses</h3> <h3>Stored Courses</h3>
@foreach (var course in localCourses) @foreach (var course in localCourses)
{ {
<div>@course.Name</div> void SetCourse()
{
planner.LocalCourse = course;
this.StateHasChanged();
}
<div>
<button
class="btn btn-outline-primary"
@onclick="@SetCourse"
>
Use
</button>
@course.Name
</div>
} }
} }

View File

@@ -1,10 +1,10 @@
@inject CoursePlanner configurationManagement @inject CoursePlanner planner
@code { @code {
[Parameter, EditorRequired] [Parameter, EditorRequired]
public ulong ModuleId { get; set; } public string ModuleName { get; set; }
[Parameter] [Parameter]
public EventCallback OnSubmit { get; set; } public EventCallback OnSubmit { get; set; }
@@ -28,7 +28,7 @@
points_possible = 10, points_possible = 10,
submission_types = new SubmissionType[] { SubmissionType.online_text_entry } submission_types = new SubmissionType[] { SubmissionType.online_text_entry }
}; };
configurationManagement.Assignments = configurationManagement.Assignments.Append(newAssignment); @* planner.LocalCourse.Assignments = planner.Assignments.Append(newAssignment); *@
await OnSubmit.InvokeAsync(); await OnSubmit.InvokeAsync();
} }
} }

View File

@@ -1,9 +1,11 @@
@using Management.Web.Shared.Module.Assignment @using Management.Web.Shared.Module.Assignment
@using LocalModels
@inject CoursePlanner configurationManagement @inject CoursePlanner configurationManagement
@code { @code {
[Parameter, EditorRequired] [Parameter, EditorRequired]
public CourseModule Module { get; set; } = default!; public LocalModule Module { get; set; } = default!;
private bool showAddAssignment { get; set; } = false; private bool showAddAssignment { get; set; } = false;
@@ -20,7 +22,7 @@
@if (showAddAssignment) @if (showAddAssignment)
{ {
<NewAssignment ModuleId="Module.Id" OnSubmit="() => showAddAssignment = false" /> <NewAssignment ModuleName="Module.Name" OnSubmit="() => showAddAssignment = false" />
} }
<h5>Assignments</h5> <h5>Assignments</h5>

View File

@@ -2,7 +2,7 @@
@using System.Linq @using System.Linq
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage @using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@inject CoursePlanner configurationManagement @inject CoursePlanner planner
@inject ProtectedLocalStorage BrowserStorage @inject ProtectedLocalStorage BrowserStorage
@inject BrowserStorageManagement storage @inject BrowserStorageManagement storage
@@ -34,11 +34,14 @@ else
<NewModule OnSubmit="() => showNewModule = false" /> <NewModule OnSubmit="() => showNewModule = false" />
} }
@foreach (var module in configurationManagement.Modules) @if (planner.LocalCourse != null)
{
@foreach (var module in planner.LocalCourse.Modules)
{ {
<hr> <hr>
<ModuleDetail Module="module" /> <ModuleDetail Module="module" />
} }
}
<hr> <hr>
<div class="text-center"> <div class="text-center">

View File

@@ -12,10 +12,18 @@
private async Task submitHandler() private async Task submitHandler()
{ {
if(planner.Course != null && Name != "") if(planner.LocalCourse != null && Name != "")
{ {
await canvas.CreateModule(planner.Course.Id, Name); var newModule = new LocalModule
planner.Modules = await canvas.GetModules(planner.Course.Id); {
Name=Name
};
planner.LocalCourse = planner.LocalCourse with
{
Modules = planner.LocalCourse.Modules.Append(newModule)
};
} }
Name = ""; Name = "";
await OnSubmit.InvokeAsync(); await OnSubmit.InvokeAsync();

View File

@@ -14,11 +14,6 @@
<span class="oi oi-home" aria-hidden="true"></span> Home <span class="oi oi-home" aria-hidden="true"></span> Home
</NavLink> </NavLink>
</div> </div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="/calendar">
<span class="oi oi-plus" aria-hidden="true"></span> Calendar
</NavLink>
</div>
</nav> </nav>
</div> </div>

View File

@@ -1,15 +1,14 @@
@inject AssignmentDragContainer dragContainer @inject AssignmentDragContainer dragContainer
@inject CoursePlanner configurationManagement @inject CoursePlanner configurationManagement
@inject CoursePlanner planner
@code @code
{ {
[Parameter, EditorRequired] [Parameter, EditorRequired]
public DateTime? date { get; set; } = public DateTime? date { get; set; } =
default!; default!;
[Parameter, EditorRequired]
public SemesterPlanner Semester { get; set; } = default!;
private bool isWeekDay { private bool isWeekDay {
get => date?.DayOfWeek != null; get => date?.DayOfWeek != null;
} }
@@ -27,9 +26,9 @@
DayOfWeek? weekDay = date?.DayOfWeek; DayOfWeek? weekDay = date?.DayOfWeek;
DayOfWeek notNullDay = weekDay ?? default; DayOfWeek notNullDay = weekDay ?? default;
var dayInSemester = var dayInSemester =
Semester.Days.Contains(notNullDay) planner.LocalCourse.DaysOfWeek.Contains(notNullDay)
&& date < Semester.LastDay && date < planner.LocalCourse.EndDate
&& date > Semester.FirstDay; && date > planner.LocalCourse.StartDate;
var totalClasses = dayInSemester ? $"bg-light {baseClasses}" : baseClasses; var totalClasses = dayInSemester ? $"bg-light {baseClasses}" : baseClasses;

View File

@@ -1,11 +1,12 @@
@using System.Linq; @using System.Linq
@inject CoursePlanner planner
@code @code
{ {
[Parameter, EditorRequired] [Parameter, EditorRequired]
public CalendarMonth Month { get; set; } = default!; public CalendarMonth Month { get; set; } = default!;
[Parameter, EditorRequired]
public SemesterPlanner Semester { get; set; } = default!;
public DayOfWeek[] WeekDaysList { get => (DayOfWeek[])Enum.GetValues(typeof(DayOfWeek)); } public DayOfWeek[] WeekDaysList { get => (DayOfWeek[])Enum.GetValues(typeof(DayOfWeek)); }
public string MonthName { get => Month?.DaysByWeek.First().FirstOrDefault(d => d != null)?.ToString("MMMM") ?? ""; } public string MonthName { get => Month?.DaysByWeek.First().FirstOrDefault(d => d != null)?.ToString("MMMM") ?? ""; }
@@ -18,7 +19,7 @@
<div class="row text-center fw-bold"> <div class="row text-center fw-bold">
@foreach (DayOfWeek day in WeekDaysList) @foreach (DayOfWeek day in WeekDaysList)
{ {
<div class="@(Semester.Days.Contains(day) ? "col" : "col text-secondary")">@day</div> <div class="@(planner.LocalCourse.DaysOfWeek.Contains(day) ? "col" : "col text-secondary")">@day</div>
} }
</div> </div>
@@ -41,7 +42,7 @@
{ {
<div class="@baseClasses"></div> <div class="@baseClasses"></div>
} *@ } *@
<Day date="day" Semester="Semester"></Day> <Day date="day"></Day>
} }
</div> </div>
} }

View File

@@ -47,17 +47,17 @@ public class BrowserStorageManagement
// Console.WriteLine("no stored assignments"); // Console.WriteLine("no stored assignments");
// } // }
var storedCourseId = await storage.GetAsync<ulong>(courseIdKey); // var storedCourseId = await storage.GetAsync<ulong>(courseIdKey);
if (storedCourseId.Success) // if (storedCourseId.Success)
{ // {
// var courses = // // var courses =
planner.Course = await canvas.GetCourse(storedCourseId.Value); // planner.Course = await canvas.GetCourse(storedCourseId.Value);
planner.Modules = await canvas.GetModules(planner.Course.Id); // planner.Modules = await canvas.GetModules(planner.Course.Id);
} // }
else // else
{ // {
Console.WriteLine("no stored assignments"); // Console.WriteLine("no stored assignments");
} // }
} }
public async Task Save() public async Task Save()
@@ -65,9 +65,9 @@ public class BrowserStorageManagement
// await storage.SetAsync(moduleStorageKey, planner.Modules); // await storage.SetAsync(moduleStorageKey, planner.Modules);
// await storage.SetAsync(assignmentStorageKey, planner.Assignments); // await storage.SetAsync(assignmentStorageKey, planner.Assignments);
if (planner.Course != null) // if (planner.Course != null)
await storage.SetAsync(courseIdKey, planner.Course.Id); // await storage.SetAsync(courseIdKey, planner.Course.Id);
else // else
await storage.DeleteAsync(courseIdKey); // await storage.DeleteAsync(courseIdKey);
} }
} }

View File

@@ -2,28 +2,20 @@ using CanvasModel.EnrollmentTerms;
public class SemesterPlanner public class SemesterPlanner
{ {
public DateTime FirstDay { get; } public static IEnumerable<CalendarMonth> GetMonthsBetweenDates(
public DateTime LastDay { get; } DateTime startDate,
DateTime endDate
public IEnumerable<CalendarMonth> Months { get; } )
public IEnumerable<DayOfWeek> Days { get; }
public SemesterPlanner(SemesterCalendarConfig configuration)
{ {
FirstDay = configuration.StartDate; var monthsInTerm = 1 + ((endDate.Year - startDate.Year) * 12) + endDate.Month - startDate.Month;
LastDay = configuration.EndDate;
var monthsInTerm = return Enumerable
1 + ((LastDay.Year - FirstDay.Year) * 12)
+ LastDay.Month - FirstDay.Month;
Months = Enumerable
.Range(0, monthsInTerm) .Range(0, monthsInTerm)
.Select(monthDiff => .Select(monthDiff =>
{ {
var month = ((FirstDay.Month + monthDiff - 1) % 12) + 1; var month = ((startDate.Month + monthDiff - 1) % 12) + 1;
var year = FirstDay.Year + ((FirstDay.Month + monthDiff - 1) / 12); var year = startDate.Year + ((startDate.Month + monthDiff - 1) / 12);
return new CalendarMonth(year, month); return new CalendarMonth(year, month);
}); });
Days = configuration.Days;
} }
} }

View File

@@ -1,24 +1,19 @@
using CanvasModel.EnrollmentTerms; using CanvasModel.EnrollmentTerms;
using CanvasModel.Courses; using CanvasModel.Courses;
using CanvasModel; using CanvasModel;
using LocalModels;
public class CoursePlanner public class CoursePlanner
{ {
public void SetConfiguration(EnrollmentTermModel canvasTerm, DayOfWeek[] daysOfWeek) public LocalCourse _localCourse { get; set; } = default!;
public LocalCourse LocalCourse
{ {
var start = get => _localCourse;
canvasTerm.StartAt set
?? throw new Exception($"Canvas Term must have a start date. Term: {canvasTerm.Name}"); {
var end = _localCourse = value;
canvasTerm.EndAt StateHasChanged?.Invoke();
?? throw new Exception($"Canvas Term must have a end date. Term: {canvasTerm.Name}");
SemesterCalendar = new SemesterCalendarConfig(StartDate: start, EndDate: end, Days: daysOfWeek);
} }
}
public SemesterCalendarConfig? SemesterCalendar { get; set; } = null; public event Action? StateHasChanged;
public IEnumerable<CourseModule> Modules { get; set; } = new CourseModule[] { };
public IEnumerable<LocalAssignment> Assignments { get; set; } = new LocalAssignment[] { };
public CourseModel? Course { get; set; } = null;
} }

View File

@@ -6,4 +6,6 @@ public record LocalCourse
public string Name { get; init; } = string.Empty; public string Name { get; init; } = string.Empty;
public IEnumerable<DayOfWeek> DaysOfWeek { get; init; } = Enumerable.Empty<DayOfWeek>(); public IEnumerable<DayOfWeek> DaysOfWeek { get; init; } = Enumerable.Empty<DayOfWeek>();
public ulong? CanvasId { get; init; } public ulong? CanvasId { get; init; }
public DateTime StartDate { get; init; }
public DateTime EndDate { get; init; }
} }

View File

@@ -1,5 +0,0 @@
public record SemesterCalendarConfig(
DateTime StartDate,
DateTime EndDate,
IEnumerable<DayOfWeek> Days
);