mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
can select course from existing file
This commit is contained in:
@@ -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>
|
|
||||||
@@ -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 />
|
||||||
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
25
Management.Web/Shared/Calendar.razor
Normal file
25
Management.Web/Shared/Calendar.razor
Normal 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>
|
||||||
@@ -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>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
public record SemesterCalendarConfig(
|
|
||||||
DateTime StartDate,
|
|
||||||
DateTime EndDate,
|
|
||||||
IEnumerable<DayOfWeek> Days
|
|
||||||
);
|
|
||||||
Reference in New Issue
Block a user