resolved warnings

This commit is contained in:
2023-07-24 14:31:20 -06:00
parent 6232a7a94e
commit d1383fe1d4
17 changed files with 261 additions and 134 deletions

View File

@@ -1,5 +1,6 @@
@page "/"
@using CanvasModel.EnrollmentTerms
@using Management.Web.Shared.Course
@using Management.Web.Shared.Semester
@using CanvasModel.Courses
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@@ -8,7 +9,6 @@
@inject CanvasService canvas
@inject CoursePlanner planner
@inject ProtectedLocalStorage BrowserStorage
@inject YamlManager yamlManager
@code
{
@@ -57,14 +57,13 @@
@if(planner.LocalCourse != null)
{
<div class="">
<button
@onclick="@(() => planner.LocalCourse = default)"
@onclick="@(() => planner.LocalCourse = null)"
class="btn btn-primary"
>
Select New Course
</button>
</div>
<Calendar />
<CourseDetails />
}

View File

@@ -5,6 +5,7 @@ global using CanvasModel.EnrollmentTerms;
global using CanvasModel.Courses;
global using CanvasModel;
global using LocalModels;
global using Management.Web.Shared.Course;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web;
@@ -19,10 +20,10 @@ builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddSingleton<IWebRequestor, WebRequestor>();
builder.Services.AddSingleton<CanvasService, CanvasService>();
builder.Services.AddSingleton<YamlManager>();
builder.Services.AddSingleton<CoursePlanner>();
builder.Services.AddSingleton<AssignmentDragContainer>();
builder.Services.AddScoped<BrowserStorageManagement>();
builder.Services.AddScoped<YamlManager>();
var app = builder.Build();

View File

@@ -1,25 +0,0 @@
@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

@@ -0,0 +1,48 @@
@using CanvasModel.EnrollmentTerms
@using Management.Web.Shared.Module
@using Management.Web.Shared.Semester
@inject CoursePlanner planner
@code
{
private bool showEditCourseSettings = false;
protected override void OnInitialized()
{
planner.StateHasChanged += () => this.InvokeAsync(this.StateHasChanged);
}
}
<br>
@if(!showEditCourseSettings)
{
<button class="btn btn-outline-secondary" @onclick="@(() => showEditCourseSettings = true)">Edit Course Settings</button>
}
else
{
<CourseSettings />
<button
class="btn btn-outline-secondary"
@onclick="@(() => showEditCourseSettings = false)"
>
Done Editing Course Settings
</button>
}
<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

@@ -0,0 +1,99 @@
@inject CanvasService canvas
@inject CoursePlanner planner
@code
{
private IEnumerable<EnrollmentTermModel>? terms { get; set; } = null;
private ulong? _selectedTermId {get; set;}
private ulong? selectedTermId {
get => _selectedTermId;
set
{
_selectedTermId = value;
if(selectedTerm != null && planner.LocalCourse != null)
{
planner.LocalCourse = planner.LocalCourse with
{
StartDate=selectedTerm.StartAt ?? new DateTime(),
EndDate=selectedTerm.EndAt ?? new DateTime(),
};
}
}
}
private EnrollmentTermModel? selectedTerm
{
get => terms?.FirstOrDefault(t => t.Id == selectedTermId);
}
private bool loading = false;
protected override async Task OnInitializedAsync()
{
if(planner.LocalCourse != null && planner.LocalCourse.CanvasId != null)
{
loading = true;
ulong id = planner.LocalCourse?.CanvasId ?? throw new Exception("wtf how did i get here");
var canvasCourse = await canvas.GetCourse(id);
terms = await canvas.GetCurrentTermsFor(canvasCourse.StartAt);
loading = false;
}
}
}
<h5>Select Days Of Week</h5>
<div class="row m-3">
@foreach (DayOfWeek day in (DayOfWeek[])Enum.GetValues(typeof(DayOfWeek)))
{
<div class="col">
<button
class="@(
planner.LocalCourse?.DaysOfWeek.Contains(day) ?? false
? "btn btn-secondary"
: "btn btn-outline-secondary"
)"
@onclick="() =>
{
if(planner.LocalCourse?.DaysOfWeek.Contains(day) ?? false)
{
planner.LocalCourse = planner.LocalCourse with
{
DaysOfWeek = planner.LocalCourse.DaysOfWeek.Where((d) => d != day)
};
}
else
{
if (planner.LocalCourse != null)
{
planner.LocalCourse = planner.LocalCourse with
{
DaysOfWeek = planner.LocalCourse.DaysOfWeek.Append(day)
};
}
}
}"
>
@day
</button>
</div>
}
</div>
@if(loading)
{
<Spinner />
}
@if (terms != null)
{
<div class="row justify-content-center">
<div class="col-auto">
<form>
<lablel for="termselect">Select Term for Start and End Date:</lablel>
<select id="termselect" class="form-select" @bind="selectedTermId">
@foreach (var term in terms)
{
<option value="@term.Id">@term.Name</option>
}
</select>
</form>
</div>
</div>
}

View File

@@ -5,14 +5,11 @@
@code
{
public IEnumerable<LocalCourse> localCourses { get; set; }
public IEnumerable<LocalCourse>? localCourses { get; set; }
protected override async Task OnInitializedAsync()
{
localCourses = await yamlManager.LoadSavedCourses();
}
}
@if(localCourses != null)

View File

@@ -10,7 +10,7 @@
@code {
private bool loadingCourses = false;
public IEnumerable<LocalCourse> localCourses { get; set; }
public IEnumerable<LocalCourse>? localCourses { get; set; }
private IEnumerable<EnrollmentTermModel>? terms { get; set; } = null;
private IEnumerable<CourseModel>? courses { get; set;} = null;
private ulong? _selectedTermId { get; set; }
@@ -20,7 +20,10 @@
set
{
_selectedTermId = value;
updateCourses();
@* updateCourses(); *@
var task = Task.Run(async () => await updateCourses());
task.Wait();
StateHasChanged();
}
}
private EnrollmentTermModel? selectedTerm
@@ -58,7 +61,7 @@
CanvasId = selectedCourse.Id,
DaysOfWeek = days,
};
await yamlManager.SaveCourse(course);
await yamlManager.SaveCourseAsync(course);
}
await updateCourses();
}

View File

@@ -4,7 +4,7 @@
[Parameter]
[Required]
public LocalAssignment assignment { get; set; } = new();
private async Task HandleDragStart()
private void HandleDragStart()
{
dragContainer.AssignmentBeingDragged = assignment;
System.Console.WriteLine("assignment set");
@@ -13,7 +13,7 @@
<div
draggable="true"
ondragstart="@HandleDragStart"
@ondragstart="HandleDragStart"
class="col-2"
>
<div class="card">

View File

@@ -4,7 +4,7 @@
@code {
[Parameter, EditorRequired]
public string ModuleName { get; set; }
public string ModuleName { get; set; } = "";
[Parameter]
public EventCallback OnSubmit { get; set; }

View File

@@ -8,16 +8,6 @@
@code {
private bool showNewModule { get; set; } = false;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if(firstRender)
{
await storage.LoadStoredConfig();
StateHasChanged();
}
}
}
@if (!showNewModule)
@@ -42,13 +32,3 @@ else
<ModuleDetail Module="module" />
}
}
<hr>
<div class="text-center">
<button
class="btn btn-primary"
@onclick="@(async () => await storage.Save())"
>
Save Modules
</button>
</div>

View File

@@ -26,7 +26,7 @@
DayOfWeek? weekDay = date?.DayOfWeek;
DayOfWeek notNullDay = weekDay ?? default;
var dayInSemester =
planner.LocalCourse.DaysOfWeek.Contains(notNullDay)
planner.LocalCourse?.DaysOfWeek.Contains(notNullDay) ?? false
&& date < planner.LocalCourse.EndDate
&& date > planner.LocalCourse.StartDate;
@@ -45,7 +45,7 @@
Console.WriteLine("on drag start");
}
async Task OnDrop()
void OnDrop()
{
Console.WriteLine("on drop");
dragging = false;
@@ -58,10 +58,10 @@
dragContainer.AssignmentBeingDragged = null;
}
async Task OnDragEnter() {
void OnDragEnter() {
dragging = true;
}
async Task OnDragLeave() {
void OnDragLeave() {
dragging = false;
}
}

View File

@@ -19,7 +19,14 @@
<div class="row text-center fw-bold">
@foreach (DayOfWeek day in WeekDaysList)
{
<div class="@(planner.LocalCourse.DaysOfWeek.Contains(day) ? "col" : "col text-secondary")">@day</div>
<div class="@(
planner.LocalCourse?.DaysOfWeek.Contains(day) ?? false
? "col"
: "col text-secondary"
)"
>
@day
</div>
}
</div>

View File

@@ -2,9 +2,9 @@ using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage;
public class BrowserStorageManagement
{
private string moduleStorageKey = "module storage key";
private string assignmentStorageKey = "assignment storage key";
private string courseIdKey = "course id storage key";
// private string moduleStorageKey = "module storage key";
// private string assignmentStorageKey = "assignment storage key";
// private string courseIdKey = "course id storage key";
private CoursePlanner planner { get; }
private ProtectedLocalStorage storage { get; }
@@ -21,53 +21,53 @@ public class BrowserStorageManagement
canvas = canvasService;
}
public async Task LoadStoredConfig()
{
// var storedModules = await storage.GetAsync<IEnumerable<CourseModule>>(moduleStorageKey);
// if (storedModules.Success)
// public async Task LoadStoredConfig()
// {
// planner.Modules =
// storedModules.Value
// ?? throw new Exception("stored modules was null, it shouldn't have been");
// }
// else
// {
// Console.WriteLine("no stored modules");
// // var storedModules = await storage.GetAsync<IEnumerable<CourseModule>>(moduleStorageKey);
// // if (storedModules.Success)
// // {
// // planner.Modules =
// // storedModules.Value
// // ?? throw new Exception("stored modules was null, it shouldn't have been");
// // }
// // else
// // {
// // Console.WriteLine("no stored modules");
// // }
// // var storedAssignments = await storage.GetAsync<IEnumerable<CourseModule>>(assignmentStorageKey);
// // if (storedAssignments.Success)
// // {
// // planner.Modules =
// // storedAssignments.Value
// // ?? throw new Exception("stored assignments are null, it shouldn't have been");
// // }
// // 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");
// // }
// }
// var storedAssignments = await storage.GetAsync<IEnumerable<CourseModule>>(assignmentStorageKey);
// if (storedAssignments.Success)
// public async Task Save()
// {
// planner.Modules =
// storedAssignments.Value
// ?? throw new Exception("stored assignments are null, it shouldn't have been");
// }
// else
// {
// Console.WriteLine("no stored assignments");
// }
// // await storage.SetAsync(moduleStorageKey, planner.Modules);
// // await storage.SetAsync(assignmentStorageKey, planner.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");
// // if (planner.Course != null)
// // await storage.SetAsync(courseIdKey, planner.Course.Id);
// // else
// // await storage.DeleteAsync(courseIdKey);
// }
}
public async Task Save()
{
// 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);
}
}

View File

@@ -5,12 +5,24 @@ using LocalModels;
public class CoursePlanner
{
public LocalCourse _localCourse { get; set; } = default!;
public LocalCourse LocalCourse
private readonly YamlManager yamlManager;
public CoursePlanner(YamlManager yamlManager)
{
this.yamlManager = yamlManager;
}
private LocalCourse? _localCourse { get; set; }
public LocalCourse? LocalCourse
{
get => _localCourse;
set
{
// ignore initial load of course
if (_localCourse != null && value != null)
{
yamlManager.SaveCourse(value);
}
_localCourse = value;
StateHasChanged?.Invoke();
}

View File

@@ -41,7 +41,7 @@ public class CanvasService : ICanvasService
public async Task<CourseModel> GetCourse(ulong courseId)
{
var url = $"course/{courseId}";
var url = $"courses/{courseId}";
var request = new RestRequest(url);
var (data, response) = await webRequestor.GetAsync<CourseModel>(request);
@@ -127,7 +127,8 @@ public class CanvasService : ICanvasService
var currentTerms = terms
.Where(t => t.EndAt != null && t.EndAt > queryDate && t.EndAt < queryDate.AddYears(1))
.Take(3);
.Take(3)
.OrderBy(t => t.StartAt);
return currentTerms;
}

View File

@@ -58,7 +58,7 @@ public class WebRequestor : IWebRequestor
}
try
{
var data = JsonSerializer.Deserialize<T>(response.Content);
var data = JsonSerializer.Deserialize<T>(response.Content!);
if (data == null)
{

View File

@@ -6,30 +6,35 @@ public class YamlManager
{
public string CourseToYaml(LocalCourse course)
{
var serializer = new SerializerBuilder()
.Build();
var serializer = new SerializerBuilder().Build();
var yaml = serializer.Serialize(course);
System.Console.WriteLine(yaml);
// System.Console.WriteLine(yaml);
return yaml;
}
public LocalCourse ParseCourse(string rawCourse)
{
var deserializer = new DeserializerBuilder()
.Build();
var deserializer = new DeserializerBuilder().Build();
var person = deserializer.Deserialize<LocalCourse>(rawCourse);
return person;
}
public async Task SaveCourse(LocalCourse course)
public async Task SaveCourseAsync(LocalCourse course)
{
var courseString = CourseToYaml(course);
await File.WriteAllTextAsync($"../storage/{course.Name}.yml", courseString);
}
public void SaveCourse(LocalCourse course)
{
var courseString = CourseToYaml(course);
File.WriteAllText($"../storage/{course.Name}.yml", courseString);
}
public async Task<IEnumerable<LocalCourse>> LoadSavedCourses()
{
string path = "../storage/";