mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
resolved warnings
This commit is contained in:
@@ -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)"
|
||||
class="btn btn-primary"
|
||||
>
|
||||
Select New Course
|
||||
</button>
|
||||
</div>
|
||||
<Calendar />
|
||||
<div class="">
|
||||
<button
|
||||
@onclick="@(() => planner.LocalCourse = null)"
|
||||
class="btn btn-primary"
|
||||
>
|
||||
Select New Course
|
||||
</button>
|
||||
</div>
|
||||
<CourseDetails />
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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>
|
||||
48
Management.Web/Shared/Course/CourseDetails.razor
Normal file
48
Management.Web/Shared/Course/CourseDetails.razor
Normal 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>
|
||||
99
Management.Web/Shared/Course/CourseSettings.razor
Normal file
99
Management.Web/Shared/Course/CourseSettings.razor
Normal 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>
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
@code {
|
||||
|
||||
[Parameter, EditorRequired]
|
||||
public string ModuleName { get; set; }
|
||||
public string ModuleName { get; set; } = "";
|
||||
|
||||
[Parameter]
|
||||
public EventCallback OnSubmit { get; set; }
|
||||
|
||||
@@ -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>
|
||||
@@ -26,9 +26,9 @@
|
||||
DayOfWeek? weekDay = date?.DayOfWeek;
|
||||
DayOfWeek notNullDay = weekDay ?? default;
|
||||
var dayInSemester =
|
||||
planner.LocalCourse.DaysOfWeek.Contains(notNullDay)
|
||||
&& date < planner.LocalCourse.EndDate
|
||||
&& date > planner.LocalCourse.StartDate;
|
||||
planner.LocalCourse?.DaysOfWeek.Contains(notNullDay) ?? false
|
||||
&& date < planner.LocalCourse.EndDate
|
||||
&& date > planner.LocalCourse.StartDate;
|
||||
|
||||
var totalClasses = dayInSemester ? $"bg-light {baseClasses}" : baseClasses;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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)
|
||||
// {
|
||||
// planner.Modules =
|
||||
// storedModules.Value
|
||||
// ?? throw new Exception("stored modules was null, it shouldn't have been");
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Console.WriteLine("no stored modules");
|
||||
// }
|
||||
// public async Task LoadStoredConfig()
|
||||
// {
|
||||
// // 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 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 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()
|
||||
{
|
||||
// await storage.SetAsync(moduleStorageKey, planner.Modules);
|
||||
// await storage.SetAsync(assignmentStorageKey, planner.Assignments);
|
||||
// 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);
|
||||
}
|
||||
// // if (planner.Course != null)
|
||||
// // await storage.SetAsync(courseIdKey, planner.Course.Id);
|
||||
// // else
|
||||
// // await storage.DeleteAsync(courseIdKey);
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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/";
|
||||
|
||||
Reference in New Issue
Block a user