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
{
private bool showNewFile { get; set; } = false;
protected override void OnInitialized()
{
planner.StateHasChanged += () => this.InvokeAsync(this.StateHasChanged);
}
}
<PageTitle>Index</PageTitle>
<CurrentFiles />
@if(planner.LocalCourse == null)
{
<CurrentFiles />
@if(!showNewFile)
{
<div class="text-center">
<button
@onclick="@(()=>showNewFile = true)"
class="btn btn-primary"
>
Create New File
</button>
</div>
}
<InitializeYamlFromCanvas />
@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 />
</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.Courses;
global using CanvasModel;
global using LocalModels;
using Microsoft.AspNetCore.Components;
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
@inject YamlManager yamlManager
@inject CoursePlanner planner
@code
{
@@ -9,6 +10,9 @@
{
localCourses = await yamlManager.LoadSavedCourses();
}
}
@if(localCourses != null)
@@ -16,6 +20,19 @@
<h3>Stored Courses</h3>
@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 {
[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();
}
}

View File

@@ -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)
{
<NewAssignment ModuleId="Module.Id" OnSubmit="() => showAddAssignment = false" />
<NewAssignment ModuleName="Module.Name" OnSubmit="() => showAddAssignment = false" />
}
<h5>Assignments</h5>

View File

@@ -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
<NewModule OnSubmit="() => showNewModule = false" />
}
@foreach (var module in configurationManagement.Modules)
@if (planner.LocalCourse != null)
{
@foreach (var module in planner.LocalCourse.Modules)
{
<hr>
<ModuleDetail Module="module" />
}
}
<hr>

View File

@@ -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();

View File

@@ -14,11 +14,6 @@
<span class="oi oi-home" aria-hidden="true"></span> Home
</NavLink>
</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>
</div>

View File

@@ -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;

View File

@@ -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 @@
<div class="row text-center fw-bold">
@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>
@@ -41,7 +42,7 @@
{
<div class="@baseClasses"></div>
} *@
<Day date="day" Semester="Semester"></Day>
<Day date="day"></Day>
}
</div>
}

View File

@@ -47,17 +47,17 @@ public class BrowserStorageManagement
// Console.WriteLine("no stored assignments");
// }
var storedCourseId = await storage.GetAsync<ulong>(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<ulong>(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);
}
}

View File

@@ -2,28 +2,20 @@ using CanvasModel.EnrollmentTerms;
public class SemesterPlanner
{
public DateTime FirstDay { get; }
public DateTime LastDay { get; }
public IEnumerable<CalendarMonth> Months { get; }
public IEnumerable<DayOfWeek> Days { get; }
public SemesterPlanner(SemesterCalendarConfig configuration)
public static IEnumerable<CalendarMonth> 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;
}
}

View File

@@ -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<CourseModule> Modules { get; set; } = new CourseModule[] { };
public IEnumerable<LocalAssignment> Assignments { get; set; } = new LocalAssignment[] { };
public CourseModel? Course { get; set; } = null;
}
public event Action? StateHasChanged;
}

View File

@@ -6,4 +6,6 @@ public record LocalCourse
public string Name { get; init; } = string.Empty;
public IEnumerable<DayOfWeek> DaysOfWeek { get; init; } = Enumerable.Empty<DayOfWeek>();
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
);