moved settings into their own object

This commit is contained in:
2023-09-22 12:58:37 -06:00
parent e53222e35d
commit fa792f1f23
20 changed files with 81 additions and 70 deletions

View File

@@ -45,6 +45,7 @@
private AssignmentTemplate? selectedTemplate => private AssignmentTemplate? selectedTemplate =>
planner planner
.LocalCourse? .LocalCourse?
.Settings
.AssignmentTemplates .AssignmentTemplates
.FirstOrDefault(t => t.Id == TemplateId); .FirstOrDefault(t => t.Id == TemplateId);
@@ -133,7 +134,7 @@
@oninput="saveTemplateId" @oninput="saveTemplateId"
> >
<option value=""></option> <option value=""></option>
@foreach (var template in planner.LocalCourse.AssignmentTemplates) @foreach (var template in planner.LocalCourse.Settings.AssignmentTemplates)
{ {
<option value="@template.Id">@template.Name</option> <option value="@template.Id">@template.Name</option>
} }

View File

@@ -128,6 +128,7 @@
private LocalAssignmentGroup? selectedAssignmentGroup => private LocalAssignmentGroup? selectedAssignmentGroup =>
planner planner
.LocalCourse? .LocalCourse?
.Settings
.AssignmentGroups .AssignmentGroups
.FirstOrDefault(g => g.Id == assignmentContext.Assignment?.LocalAssignmentGroupId); .FirstOrDefault(g => g.Id == assignmentContext.Assignment?.LocalAssignmentGroupId);
} }
@@ -148,7 +149,7 @@
</div> </div>
<ButtonSelect <ButtonSelect
Label="Assignment Group" Label="Assignment Group"
Options="planner.LocalCourse.AssignmentGroups" Options="planner.LocalCourse?.Settings.AssignmentGroups"
GetId="(g) => g.Id" GetId="(g) => g.Id"
GetName="(g) => g.Name" GetName="(g) => g.Name"
OnSelect="(g) => setAssignmentGroup(g)" OnSelect="(g) => setAssignmentGroup(g)"

View File

@@ -35,8 +35,8 @@ public class DroppableQuiz : ComponentBase
year: dropDate.Year, year: dropDate.Year,
month: dropDate.Month, month: dropDate.Month,
day: dropDate.Day, day: dropDate.Day,
hour: planner.LocalCourse.DefaultDueTime.Hour, hour: planner.LocalCourse.Settings.DefaultDueTime.Hour,
minute: planner.LocalCourse.DefaultDueTime.Minute, minute: planner.LocalCourse.Settings.DefaultDueTime.Minute,
second: 0 second: 0
); );

View File

@@ -74,6 +74,7 @@
private LocalAssignmentGroup? selectedAssignmentGroup => private LocalAssignmentGroup? selectedAssignmentGroup =>
planner planner
.LocalCourse? .LocalCourse?
.Settings
.AssignmentGroups .AssignmentGroups
.FirstOrDefault(g => g.Id == quizContext.Quiz?.LocalAssignmentGroupId); .FirstOrDefault(g => g.Id == quizContext.Quiz?.LocalAssignmentGroupId);
} }
@@ -95,9 +96,9 @@
</div> </div>
<ButtonSelect <ButtonSelect
Label="Assignment Group" Label="Assignment Group"
Options="planner.LocalCourse.AssignmentGroups" Options="planner.LocalCourse.Settings.AssignmentGroups"
GetId="(g) => g.Id" GetId="(g) => g?.Id"
GetName="(g) => g.Name" GetName="(g) => g?.Name"
OnSelect="(g) => setAssignmentGroup(g)" OnSelect="(g) => setAssignmentGroup(g)"
SelectedOption="selectedAssignmentGroup" SelectedOption="selectedAssignmentGroup"
/> />

View File

@@ -28,10 +28,13 @@
Id = Guid.NewGuid().ToString() Id = Guid.NewGuid().ToString()
}; };
var updatedGroups = planner.LocalCourse.AssignmentGroups.Append(newGroup); var updatedGroups = planner.LocalCourse.Settings.AssignmentGroups.Append(newGroup);
planner.LocalCourse = planner.LocalCourse with planner.LocalCourse = planner.LocalCourse with
{ {
AssignmentGroups = updatedGroups Settings = planner.LocalCourse.Settings with
{
AssignmentGroups = updatedGroups
}
}; };
} }
} }
@@ -43,14 +46,17 @@
if(planner.LocalCourse != null) if(planner.LocalCourse != null)
{ {
var newName = e.Value?.ToString() ?? ""; var newName = e.Value?.ToString() ?? "";
var newGroups = planner.LocalCourse.AssignmentGroups.Select( var newGroups = planner.LocalCourse.Settings.AssignmentGroups.Select(
g => g.Id == groupId g => g.Id == groupId
? g with { Name = newName } ? g with { Name = newName }
: g : g
); );
planner.LocalCourse = planner.LocalCourse with planner.LocalCourse = planner.LocalCourse with
{ {
AssignmentGroups = newGroups Settings = planner.LocalCourse.Settings with
{
AssignmentGroups = newGroups
}
}; };
} }
}; };
@@ -62,14 +68,17 @@
if(planner.LocalCourse != null) if(planner.LocalCourse != null)
{ {
var newWeight = double.Parse(e.Value?.ToString() ?? "0"); var newWeight = double.Parse(e.Value?.ToString() ?? "0");
var newGroups = planner.LocalCourse.AssignmentGroups.Select( var newGroups = planner.LocalCourse.Settings.AssignmentGroups.Select(
g => g.Id == groupId g => g.Id == groupId
? g with { Weight = newWeight } ? g with { Weight = newWeight }
: g : g
); );
planner.LocalCourse = planner.LocalCourse with planner.LocalCourse = planner.LocalCourse with
{ {
AssignmentGroups = newGroups Settings = planner.LocalCourse.Settings with
{
AssignmentGroups = newGroups
}
}; };
} }
}; };
@@ -79,7 +88,7 @@
@if(planner.LocalCourse != null) @if(planner.LocalCourse != null)
{ {
<h4 class="text-center">Assignment Groups</h4> <h4 class="text-center">Assignment Groups</h4>
@foreach (var group in planner.LocalCourse.AssignmentGroups) @foreach (var group in planner.LocalCourse.Settings.AssignmentGroups)
{ {
var groupName = group.Name; var groupName = group.Name;
var nameInputCallback = saveGroupName(group.Id); var nameInputCallback = saveGroupName(group.Id);

View File

@@ -78,17 +78,20 @@
<div class="col"> <div class="col">
<button <button
class="@( class="@(
planner.LocalCourse?.DaysOfWeek.Contains(day) ?? false planner.LocalCourse?.Settings.DaysOfWeek.Contains(day) ?? false
? "btn btn-secondary" ? "btn btn-secondary"
: "btn btn-outline-secondary" : "btn btn-outline-secondary"
)" )"
@onclick="() => @onclick="() =>
{ {
if(planner.LocalCourse?.DaysOfWeek.Contains(day) ?? false) if(planner.LocalCourse?.Settings.DaysOfWeek.Contains(day) ?? false)
{ {
planner.LocalCourse = planner.LocalCourse with planner.LocalCourse = planner.LocalCourse with
{ {
DaysOfWeek = planner.LocalCourse.DaysOfWeek.Where((d) => d != day) Settings = planner.LocalCourse.Settings with
{
DaysOfWeek = planner.LocalCourse.Settings.DaysOfWeek.Where((d) => d != day)
}
}; };
} }
else else
@@ -97,7 +100,10 @@
{ {
planner.LocalCourse = planner.LocalCourse with planner.LocalCourse = planner.LocalCourse with
{ {
DaysOfWeek = planner.LocalCourse.DaysOfWeek.Append(day) Settings = planner.LocalCourse.Settings with
{
DaysOfWeek = planner.LocalCourse.Settings.DaysOfWeek.Append(day)
}
}; };
} }
} }
@@ -137,12 +143,10 @@
<div class="row justify-content-center m-3 text-center"> <div class="row justify-content-center m-3 text-center">
<div class="col-auto"> <div class="col-auto">
<div>Default Assignment Due Time</div> <div>Default Assignment Due Time</div>
<TimePicker <TimePicker Time="planner.LocalCourse.Settings.DefaultDueTime" UpdateTime="@((newTime) =>
Time="planner.LocalCourse.DefaultDueTime"
UpdateTime="@((newTime) =>
planner.LocalCourse = planner.LocalCourse =
planner.LocalCourse with planner.LocalCourse with
{ DefaultDueTime=newTime } { Settings = planner.LocalCourse.Settings with { DefaultDueTime=newTime } }
)" )"
/> />
</div> </div>

View File

@@ -61,12 +61,12 @@
var course = new LocalCourse var course = new LocalCourse
{ {
Modules = new LocalModule[] {}, Modules = new LocalModule[] {},
DaysOfWeek = days,
Settings = new LocalCourseSettings() { Settings = new LocalCourseSettings() {
Name = selectedCourse.Name, Name = selectedCourse.Name,
CanvasId = selectedCourse.Id, CanvasId = selectedCourse.Id,
StartDate = selectedTerm?.StartAt ?? new DateTime(), StartDate = selectedTerm?.StartAt ?? new DateTime(),
EndDate = selectedTerm?.EndAt ?? new DateTime(), EndDate = selectedTerm?.EndAt ?? new DateTime(),
DaysOfWeek = days,
} }
}; };
await yamlManager.SaveCourseAsync(course); await yamlManager.SaveCourseAsync(course);

View File

@@ -78,8 +78,8 @@
&& planner.CanvasModules != null && planner.CanvasModules != null
&& Assignment.NeedsUpdates( && Assignment.NeedsUpdates(
planner.CanvasAssignments, planner.CanvasAssignments,
planner.LocalCourse.AssignmentTemplates, planner.LocalCourse.Settings.AssignmentTemplates,
Assignment.GetCanvasAssignmentGroupId(planner.LocalCourse.AssignmentGroups) Assignment.GetCanvasAssignmentGroupId(planner.LocalCourse.Settings.AssignmentGroups)
) )
) )
{ {
@@ -110,7 +110,7 @@
<div class="card-text"> <div class="card-text">
<div class="px-3 py-1 bg-dark-subtle my-1"> <div class="px-3 py-1 bg-dark-subtle my-1">
@((MarkupString) @Assignment.GetDescriptionHtml(planner.LocalCourse?.AssignmentTemplates)) @((MarkupString) @Assignment.GetDescriptionHtml(planner.LocalCourse?.Settings.AssignmentTemplates))
</div> </div>
<section class="px-3"> <section class="px-3">

View File

@@ -25,8 +25,8 @@ public class DroppableAssignment : ComponentBase
year: dropDate.Year, year: dropDate.Year,
month: dropDate.Month, month: dropDate.Month,
day: dropDate.Day, day: dropDate.Day,
hour: planner.LocalCourse.DefaultDueTime.Hour, hour: planner.LocalCourse.Settings.DefaultDueTime.Hour,
minute: planner.LocalCourse.DefaultDueTime.Minute, minute: planner.LocalCourse.Settings.DefaultDueTime.Minute,
second: 0 second: 0
); );

View File

@@ -30,6 +30,7 @@
private AssignmentTemplate? selectedTemplate => private AssignmentTemplate? selectedTemplate =>
planner planner
.LocalCourse? .LocalCourse?
.Settings
.AssignmentTemplates .AssignmentTemplates
.FirstOrDefault(t => t.Id == selectedTemplateId); .FirstOrDefault(t => t.Id == selectedTemplateId);
@@ -44,7 +45,10 @@
}; };
planner.LocalCourse = planner.LocalCourse with planner.LocalCourse = planner.LocalCourse with
{ {
AssignmentTemplates = planner.LocalCourse.AssignmentTemplates.Append(newOne) Settings = planner.LocalCourse.Settings with
{
AssignmentTemplates = planner.LocalCourse.Settings.AssignmentTemplates.Append(newOne)
}
}; };
newTemplateName = ""; newTemplateName = "";
} }
@@ -71,7 +75,7 @@
<label for="termselect">Templates</label> <label for="termselect">Templates</label>
<select id="termselect" class="form-select" @bind="selectedTemplateId"> <select id="termselect" class="form-select" @bind="selectedTemplateId">
<option></option> <option></option>
@foreach (var template in planner.LocalCourse.AssignmentTemplates) @foreach (var template in planner.LocalCourse.Settings.AssignmentTemplates)
{ {
<option value="@template.Id">@template.Name</option> <option value="@template.Id">@template.Name</option>
} }

View File

@@ -17,14 +17,17 @@
{ {
if(planner.LocalCourse != null) if(planner.LocalCourse != null)
{ {
var newTemplates = planner.LocalCourse.AssignmentTemplates.Select(t => var newTemplates = planner.LocalCourse.Settings.AssignmentTemplates.Select(t =>
t.Id == Template.Id t.Id == Template.Id
? t with { Name=newName } ? t with { Name=newName }
: t : t
); );
planner.LocalCourse = planner.LocalCourse with planner.LocalCourse = planner.LocalCourse with
{ {
AssignmentTemplates=newTemplates Settings = planner.LocalCourse.Settings with
{
AssignmentTemplates=newTemplates
}
}; };
} }
} }
@@ -32,14 +35,17 @@
{ {
if(planner.LocalCourse != null) if(planner.LocalCourse != null)
{ {
var newTemplates = planner.LocalCourse.AssignmentTemplates.Select(t => var newTemplates = planner.LocalCourse.Settings.AssignmentTemplates.Select(t =>
t.Id == Template.Id t.Id == Template.Id
? t with { Markdown=newMarkdown } ? t with { Markdown=newMarkdown }
: t : t
); );
planner.LocalCourse = planner.LocalCourse with planner.LocalCourse = planner.LocalCourse with
{ {
AssignmentTemplates=newTemplates Settings = planner.LocalCourse.Settings with
{
AssignmentTemplates=newTemplates
}
}; };
} }
} }

View File

@@ -67,7 +67,7 @@
DayOfWeek? weekDay = date?.DayOfWeek; DayOfWeek? weekDay = date?.DayOfWeek;
DayOfWeek notNullDay = weekDay ?? default; DayOfWeek notNullDay = weekDay ?? default;
var isClassDay = planner.LocalCourse?.DaysOfWeek.Contains(notNullDay) ?? false; var isClassDay = planner.LocalCourse?.Settings.DaysOfWeek.Contains(notNullDay) ?? false;
var dayInSemester = var dayInSemester =
isClassDay isClassDay
&& date <= planner.LocalCourse?.Settings.EndDate && date <= planner.LocalCourse?.Settings.EndDate

View File

@@ -34,7 +34,7 @@
@foreach (DayOfWeek day in WeekDaysList) @foreach (DayOfWeek day in WeekDaysList)
{ {
<div class="@( <div class="@(
planner.LocalCourse?.DaysOfWeek.Contains(day) ?? false planner.LocalCourse?.Settings.DaysOfWeek.Contains(day) ?? false
? "col" ? "col"
: "col text-secondary" : "col text-secondary"
)"> )">

View File

@@ -9,8 +9,6 @@ public class SemesterPlanner
{ {
var monthsInTerm = 1 + ((endDate.Year - startDate.Year) * 12) + endDate.Month - startDate.Month; var monthsInTerm = 1 + ((endDate.Year - startDate.Year) * 12) + endDate.Month - startDate.Month;
Console.WriteLine(monthsInTerm);
return Enumerable return Enumerable
.Range(0, monthsInTerm) .Range(0, monthsInTerm)
.Select(monthDiff => .Select(monthDiff =>

View File

@@ -38,25 +38,11 @@ public class CoursePlanner
return; return;
} }
var courseWithSettings = value with var verifiedCourse = value.GeneralCourseCleanup();
{
Settings = value.Settings with
{
AssignmentGroups = value.AssignmentGroups,
Name = value.Settings.Name,
DaysOfWeek = value.DaysOfWeek,
CanvasId = value.Settings.CanvasId,
StartDate = value.Settings.StartDate,
DefaultDueTime = value.DefaultDueTime,
AssignmentTemplates = value.AssignmentTemplates,
}
};
var verifiedCourse = courseWithSettings.GeneralCourseCleanup();
_debounceTimer?.Dispose(); _debounceTimer?.Dispose();
_debounceTimer = new Timer( _debounceTimer = new Timer(
async (_) => await saveCourseToFile(courseWithSettings), async (_) => await saveCourseToFile(verifiedCourse),
null, null,
_debounceInterval, _debounceInterval,
Timeout.Infinite Timeout.Infinite
@@ -160,7 +146,13 @@ public class CoursePlanner
var newAssignmentGroups = await LocalCourse.EnsureAllAssignmentGroupsExistInCanvas( var newAssignmentGroups = await LocalCourse.EnsureAllAssignmentGroupsExistInCanvas(
canvasId, canvasAssignmentGroups, canvas); canvasId, canvasAssignmentGroups, canvas);
LocalCourse = LocalCourse with { AssignmentGroups = newAssignmentGroups }; LocalCourse = LocalCourse with
{
Settings = LocalCourse.Settings with
{
AssignmentGroups = newAssignmentGroups
}
};
var newModules = await LocalCourse.EnsureAllModulesExistInCanvas( var newModules = await LocalCourse.EnsureAllModulesExistInCanvas(

View File

@@ -61,7 +61,7 @@ public static class CoursePlannerExtensions
.ToArray(); .ToArray();
var canvasAssignmentGroupIds = canvasAssignmentGroups.Select(g => g.Id).ToArray(); var canvasAssignmentGroupIds = canvasAssignmentGroups.Select(g => g.Id).ToArray();
var correctAssignmentGroups = localCourse.AssignmentGroups.Select( var correctAssignmentGroups = localCourse.Settings.AssignmentGroups.Select(
g => g =>
{ {
var groupCanvasId = g.CanvasId ?? 0; var groupCanvasId = g.CanvasId ?? 0;
@@ -74,7 +74,10 @@ public static class CoursePlannerExtensions
return localCourse with return localCourse with
{ {
Modules = correctedModules, Modules = correctedModules,
AssignmentGroups = correctAssignmentGroups, Settings = localCourse.Settings with
{
AssignmentGroups = correctAssignmentGroups,
}
}; };
} }

View File

@@ -15,7 +15,7 @@ public static partial class AssignmentGroupSyncronizationExtensions
) )
{ {
var canvasAssignmentGroupIds = canvasAssignmentGroups.Select(g => g.Id).ToArray(); var canvasAssignmentGroupIds = canvasAssignmentGroups.Select(g => g.Id).ToArray();
var assignmentGroups = await Task.WhenAll((Task<LocalAssignmentGroup>[])localCourse.AssignmentGroups.Select( var assignmentGroups = await Task.WhenAll((Task<LocalAssignmentGroup>[])localCourse.Settings.AssignmentGroups.Select(
async assignmentGroup => async assignmentGroup =>
{ {
var canvasGroupWithSameName = canvasAssignmentGroups.FirstOrDefault( var canvasGroupWithSameName = canvasAssignmentGroups.FirstOrDefault(

View File

@@ -25,10 +25,10 @@ public static partial class AssignmentSyncronizationExtensions
ca => ca.Id == localAssignment.CanvasId ca => ca.Id == localAssignment.CanvasId
); );
string localHtmlDescription = localAssignment.GetDescriptionHtml( string localHtmlDescription = localAssignment.GetDescriptionHtml(
localCourse.AssignmentTemplates localCourse.Settings.AssignmentTemplates
); );
var canvasAssignmentGroupId = localAssignment.GetCanvasAssignmentGroupId(localCourse.AssignmentGroups); var canvasAssignmentGroupId = localAssignment.GetCanvasAssignmentGroupId(localCourse.Settings.AssignmentGroups);
return canvasAssignment != null return canvasAssignment != null
? await updateAssignmentIfNeeded( ? await updateAssignmentIfNeeded(
@@ -55,7 +55,7 @@ public static partial class AssignmentSyncronizationExtensions
{ {
var assignmentNeedsUpdates = localAssignment.NeedsUpdates( var assignmentNeedsUpdates = localAssignment.NeedsUpdates(
canvasAssignments, canvasAssignments,
localCourse.AssignmentTemplates, localCourse.Settings.AssignmentTemplates,
canvasAssignmentGroupId, canvasAssignmentGroupId,
quiet: false quiet: false
); );

View File

@@ -43,7 +43,7 @@ public static partial class QuizSyncronizationExtensions
) )
{ {
var isCreated = localQuiz.QuizIsCreated(canvasQuizzes); var isCreated = localQuiz.QuizIsCreated(canvasQuizzes);
var canvasAssignmentGroupId = localQuiz.GetCanvasAssignmentGroupId(localCourse.AssignmentGroups); var canvasAssignmentGroupId = localQuiz.GetCanvasAssignmentGroupId(localCourse.Settings.AssignmentGroups);
if (isCreated) if (isCreated)
{ {
// TODO write update // TODO write update

View File

@@ -3,14 +3,6 @@ namespace LocalModels;
public record LocalCourse public record LocalCourse
{ {
public IEnumerable<LocalModule> Modules { get; init; } = Enumerable.Empty<LocalModule>(); public IEnumerable<LocalModule> Modules { get; init; } = Enumerable.Empty<LocalModule>();
public IEnumerable<LocalAssignmentGroup> AssignmentGroups { get; init; } =
Enumerable.Empty<LocalAssignmentGroup>();
public IEnumerable<DayOfWeek> DaysOfWeek { get; init; } = Enumerable.Empty<DayOfWeek>();
public SimpleTimeOnly DefaultDueTime { get; init; } = new SimpleTimeOnly();
public IEnumerable<AssignmentTemplate> AssignmentTemplates { get; init; } =
Enumerable.Empty<AssignmentTemplate>();
public LocalCourseSettings Settings { get; set; } public LocalCourseSettings Settings { get; set; }
} }