mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
restructured components so that there are more components in the pages
This commit is contained in:
@@ -1,9 +1,6 @@
|
|||||||
@page "/course/{CourseName}/assignment/{AssignmentName}"
|
@page "/course/{CourseName}/assignment/{AssignmentName}"
|
||||||
|
|
||||||
@using CanvasModel.EnrollmentTerms
|
@using CanvasModel.EnrollmentTerms
|
||||||
@using Management.Web.Shared.Components.AssignmentForm
|
|
||||||
@using Management.Web.Shared.Course
|
|
||||||
@using Management.Web.Shared.Semester
|
|
||||||
@using CanvasModel.Courses
|
@using CanvasModel.Courses
|
||||||
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
|
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
|
||||||
@using LocalModels
|
@using LocalModels
|
||||||
@@ -67,4 +64,4 @@
|
|||||||
{
|
{
|
||||||
<AssignmentForm />
|
<AssignmentForm />
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
@using Markdig
|
@using Markdig
|
||||||
@using Shared.Components.AssignmentForm
|
@using Management.Web.Shared.Components
|
||||||
|
|
||||||
@inject CoursePlanner planner
|
@inject CoursePlanner planner
|
||||||
@inject AssignmentEditorContext assignmentContext
|
@inject AssignmentEditorContext assignmentContext
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
rawText = newRawAssignment;
|
rawText = newRawAssignment;
|
||||||
if (newRawAssignment != string.Empty)
|
if (newRawAssignment != string.Empty)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var parsed = LocalAssignment.ParseMarkdown(newRawAssignment);
|
var parsed = LocalAssignment.ParseMarkdown(newRawAssignment);
|
||||||
error = null;
|
error = null;
|
||||||
@@ -75,7 +75,7 @@ SubmissionTypes:
|
|||||||
Assignment Group Names:
|
Assignment Group Names:
|
||||||
- {groupNames}
|
- {groupNames}
|
||||||
";
|
";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
<div class="d-flex w-100 h-100 flex-row">
|
<div class="d-flex w-100 h-100 flex-row">
|
||||||
@@ -92,7 +92,7 @@ Assignment Group Names:
|
|||||||
{
|
{
|
||||||
<div class="row h-100 w-100">
|
<div class="row h-100 w-100">
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
|
|
||||||
<MonacoTextArea Value=@rawText OnChange=@handleChange />
|
<MonacoTextArea Value=@rawText OnChange=@handleChange />
|
||||||
</div>
|
</div>
|
||||||
<div class="col-6 overflow-y-auto h-100" >
|
<div class="col-6 overflow-y-auto h-100" >
|
||||||
@@ -101,7 +101,7 @@ Assignment Group Names:
|
|||||||
<p class="text-danger text-truncate">Error: @error</p>
|
<p class="text-danger text-truncate">Error: @error</p>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
<div>Due At: @assignmentContext.Assignment.DueAt</div>
|
<div>Due At: @assignmentContext.Assignment.DueAt</div>
|
||||||
<div>Lock At: @assignmentContext.Assignment.LockAt</div>
|
<div>Lock At: @assignmentContext.Assignment.LockAt</div>
|
||||||
<div>Assignment Group Name @assignmentContext.Assignment.LocalAssignmentGroupName</div>
|
<div>Assignment Group Name @assignmentContext.Assignment.LocalAssignmentGroupName</div>
|
||||||
@@ -121,4 +121,4 @@ Assignment Group Names:
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
@page "/course/{CourseName}"
|
@page "/course/{CourseName}"
|
||||||
@using CanvasModel.EnrollmentTerms
|
@using CanvasModel.EnrollmentTerms
|
||||||
@using Management.Web.Shared.Course
|
|
||||||
@using Management.Web.Shared.Semester
|
|
||||||
@using CanvasModel.Courses
|
@using CanvasModel.Courses
|
||||||
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
|
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
|
||||||
@using LocalModels
|
@using LocalModels
|
||||||
@@ -41,7 +39,7 @@
|
|||||||
|
|
||||||
<PageTitle>@CourseName</PageTitle>
|
<PageTitle>@CourseName</PageTitle>
|
||||||
<div style="height: 100vh;">
|
<div style="height: 100vh;">
|
||||||
|
|
||||||
|
|
||||||
@if (loading)
|
@if (loading)
|
||||||
{
|
{
|
||||||
@@ -73,4 +71,4 @@
|
|||||||
<CourseDetails />
|
<CourseDetails />
|
||||||
}
|
}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
@using System.Linq
|
@using System.Linq
|
||||||
@using Management.Web.Shared.Semester.Day
|
@using Management.Web.Pages.Course.CourseCalendar.Day
|
||||||
|
|
||||||
@inject CoursePlanner planner
|
@inject CoursePlanner planner
|
||||||
|
|
||||||
@@ -18,11 +18,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
<h3 class="text-center">
|
<h3 class="text-center">
|
||||||
<a
|
<a
|
||||||
role="button"
|
role="button"
|
||||||
data-bs-toggle="collapse"
|
data-bs-toggle="collapse"
|
||||||
data-bs-target="@("#" + htmlLabel)"
|
data-bs-target="@("#" + htmlLabel)"
|
||||||
aria-expanded="@( isInPast ? "false" : "true")"
|
aria-expanded="@( isInPast ? "false" : "true")"
|
||||||
aria-controls="@htmlLabel"
|
aria-controls="@htmlLabel"
|
||||||
>
|
>
|
||||||
@MonthName
|
@MonthName
|
||||||
@@ -34,8 +34,8 @@
|
|||||||
@foreach (DayOfWeek day in WeekDaysList)
|
@foreach (DayOfWeek day in WeekDaysList)
|
||||||
{
|
{
|
||||||
<div class="@(
|
<div class="@(
|
||||||
planner.LocalCourse?.Settings.DaysOfWeek.Contains(day) ?? false
|
planner.LocalCourse?.Settings.DaysOfWeek.Contains(day) ?? false
|
||||||
? "col"
|
? "col"
|
||||||
: "col text-secondary"
|
: "col text-secondary"
|
||||||
)">
|
)">
|
||||||
@day
|
@day
|
||||||
@@ -52,4 +52,4 @@
|
|||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
@@ -1,10 +1,7 @@
|
|||||||
|
|
||||||
@using CanvasModel.EnrollmentTerms
|
@using CanvasModel.EnrollmentTerms
|
||||||
@using Management.Web.Shared.Module
|
@using Management.Web.Shared.Module
|
||||||
@using Management.Web.Shared.Semester
|
@using Management.Web.Pages.Course.CourseCalendar
|
||||||
@using Management.Web.Shared.Components.AssignmentForm
|
|
||||||
@using Management.Web.Shared.Components.Quiz
|
|
||||||
@using Management.Web.Shared.Components.Quiz.Markdown
|
|
||||||
|
|
||||||
@inject CanvasService canvas
|
@inject CanvasService canvas
|
||||||
@inject CoursePlanner planner
|
@inject CoursePlanner planner
|
||||||
@@ -20,8 +17,8 @@
|
|||||||
if(firstRender)
|
if(firstRender)
|
||||||
{
|
{
|
||||||
if(
|
if(
|
||||||
planner.CanvasAssignments == null
|
planner.CanvasAssignments == null
|
||||||
&& planner.LocalCourse != null
|
&& planner.LocalCourse != null
|
||||||
&& planner.LocalCourse.Settings.CanvasId != null
|
&& planner.LocalCourse.Settings.CanvasId != null
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -2,15 +2,12 @@
|
|||||||
|
|
||||||
@using CanvasModel.EnrollmentTerms
|
@using CanvasModel.EnrollmentTerms
|
||||||
@using CanvasModel.Quizzes
|
@using CanvasModel.Quizzes
|
||||||
@using Management.Web.Shared.Components.AssignmentForm
|
@using Management.Web.Shared.Components
|
||||||
@using Management.Web.Shared.Course
|
|
||||||
@using Management.Web.Shared.Semester
|
|
||||||
@using CanvasModel.Courses
|
@using CanvasModel.Courses
|
||||||
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
|
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
|
||||||
@using LocalModels
|
@using LocalModels
|
||||||
@using Management.Web.Shared.Module.Assignment
|
@using Management.Web.Shared.Module.Assignment
|
||||||
@using Management.Web.Shared.Components
|
@using Management.Web.Shared.Components
|
||||||
@using Management.Web.Shared.Components.Quiz.Markdown
|
|
||||||
|
|
||||||
@inject FileStorageManager fileStorageManager
|
@inject FileStorageManager fileStorageManager
|
||||||
@inject CanvasService canvas
|
@inject CanvasService canvas
|
||||||
@@ -210,7 +207,7 @@ this is a matching question
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<button
|
<button
|
||||||
class="btn btn-outline-secondary mt-3"
|
class="btn btn-outline-secondary mt-3"
|
||||||
@onclick="@(() => showHelp = !showHelp)"
|
@onclick="@(() => showHelp = !showHelp)"
|
||||||
>
|
>
|
||||||
@@ -222,11 +219,11 @@ this is a matching question
|
|||||||
{
|
{
|
||||||
<div class="row justify-content-end">
|
<div class="row justify-content-end">
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
<ConfirmationModal
|
<ConfirmationModal
|
||||||
Label="Delete"
|
Label="Delete"
|
||||||
Class="btn btn-danger"
|
Class="btn btn-danger"
|
||||||
OnConfirm="deleteQuiz"
|
OnConfirm="deleteQuiz"
|
||||||
Disabled="@addingQuizToCanvas"
|
Disabled="@addingQuizToCanvas"
|
||||||
/>
|
/>
|
||||||
<button class="btn btn-outline-secondary me-1" @onclick="addToCanvas" disabled="@addingQuizToCanvas">
|
<button class="btn btn-outline-secondary me-1" @onclick="addToCanvas" disabled="@addingQuizToCanvas">
|
||||||
Add to Canvas
|
Add to Canvas
|
||||||
@@ -249,4 +246,4 @@ this is a matching question
|
|||||||
<Spinner />
|
<Spinner />
|
||||||
}
|
}
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
@using CanvasModel.EnrollmentTerms
|
@using CanvasModel.EnrollmentTerms
|
||||||
@using Management.Web.Shared.Components
|
@using Management.Web.Shared.Components
|
||||||
@using Management.Web.Shared.Semester
|
|
||||||
@using CanvasModel.Courses
|
@using CanvasModel.Courses
|
||||||
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
|
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
|
||||||
@using LocalModels
|
@using LocalModels
|
||||||
@@ -110,9 +109,9 @@
|
|||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
<label for="termselect">Select Term:</label>
|
<label for="termselect">Select Term:</label>
|
||||||
<select
|
<select
|
||||||
id="termselect"
|
id="termselect"
|
||||||
class="form-select"
|
class="form-select"
|
||||||
@bind="selectedTermId"
|
@bind="selectedTermId"
|
||||||
>
|
>
|
||||||
@foreach (var term in terms)
|
@foreach (var term in terms)
|
||||||
@@ -148,9 +147,9 @@
|
|||||||
<div class="row justify-content-center m-3">
|
<div class="row justify-content-center m-3">
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
<label for="directorySelect">Select Storage Directory:</label>
|
<label for="directorySelect">Select Storage Directory:</label>
|
||||||
<select
|
<select
|
||||||
id="directorySelect"
|
id="directorySelect"
|
||||||
class="form-select"
|
class="form-select"
|
||||||
@bind="selectedStorageDirectory"
|
@bind="selectedStorageDirectory"
|
||||||
>
|
>
|
||||||
<option></option>
|
<option></option>
|
||||||
@@ -168,12 +167,12 @@
|
|||||||
@foreach (DayOfWeek day in (DayOfWeek[])Enum.GetValues(typeof(DayOfWeek)))
|
@foreach (DayOfWeek day in (DayOfWeek[])Enum.GetValues(typeof(DayOfWeek)))
|
||||||
{
|
{
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<button
|
<button
|
||||||
class="@(
|
class="@(
|
||||||
days.Contains(day)
|
days.Contains(day)
|
||||||
? "btn btn-secondary"
|
? "btn btn-secondary"
|
||||||
: "btn btn-outline-secondary"
|
: "btn btn-outline-secondary"
|
||||||
)"
|
)"
|
||||||
@onclick="() => {
|
@onclick="() => {
|
||||||
if(days.Contains(day))
|
if(days.Contains(day))
|
||||||
days.Remove(day);
|
days.Remove(day);
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
@using Management.Web.Shared.Components
|
@using Management.Web.Shared.Components
|
||||||
@using Management.Web.Shared.Components.AssignmentForm
|
|
||||||
@using CanvasModel.Assignments;
|
@using CanvasModel.Assignments;
|
||||||
|
|
||||||
@inject DragContainer dragContainer
|
@inject DragContainer dragContainer
|
||||||
@@ -26,7 +25,7 @@
|
|||||||
}
|
}
|
||||||
private bool showAll { get; set; } = false;
|
private bool showAll { get; set; } = false;
|
||||||
|
|
||||||
|
|
||||||
private void HandleDragStart()
|
private void HandleDragStart()
|
||||||
{
|
{
|
||||||
dragContainer.DropCallback = DropCallback;
|
dragContainer.DropCallback = DropCallback;
|
||||||
@@ -43,9 +42,9 @@
|
|||||||
a => a.Name == Assignment.Name
|
a => a.Name == Assignment.Name
|
||||||
);
|
);
|
||||||
|
|
||||||
private bool existsInCanvas =>
|
private bool existsInCanvas =>
|
||||||
assignmentInCanvas != null;
|
assignmentInCanvas != null;
|
||||||
private void OnClick()
|
private void OnClick()
|
||||||
{
|
{
|
||||||
assignmentContext.Assignment = Assignment;
|
assignmentContext.Assignment = Assignment;
|
||||||
Navigation.NavigateTo("/course/" + planner.LocalCourse?.Settings.Name + "/assignment/" + Assignment.Name);
|
Navigation.NavigateTo("/course/" + planner.LocalCourse?.Settings.Name + "/assignment/" + Assignment.Name);
|
||||||
@@ -54,15 +53,15 @@
|
|||||||
private bool NeedsToBeUpdatedInCanvas => planner.LocalCourse != null
|
private bool NeedsToBeUpdatedInCanvas => planner.LocalCourse != null
|
||||||
&& planner.LocalCourse.Settings.CanvasId != null
|
&& planner.LocalCourse.Settings.CanvasId != null
|
||||||
&& planner.CanvasAssignments != null
|
&& planner.CanvasAssignments != null
|
||||||
&& planner.CanvasModules != null
|
&& planner.CanvasModules != null
|
||||||
&& assignmentInCanvas != null
|
&& assignmentInCanvas != null
|
||||||
&& Assignment.NeedsUpdates(
|
&& Assignment.NeedsUpdates(
|
||||||
(CanvasAssignment)assignmentInCanvas,
|
(CanvasAssignment)assignmentInCanvas,
|
||||||
Assignment.GetCanvasAssignmentGroupId(planner.LocalCourse.Settings.AssignmentGroups)
|
Assignment.GetCanvasAssignmentGroupId(planner.LocalCourse.Settings.AssignmentGroups)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
<div
|
<div
|
||||||
draggable="true"
|
draggable="true"
|
||||||
@ondragstart="HandleDragStart"
|
@ondragstart="HandleDragStart"
|
||||||
@ondragend="HandleDragEnd"
|
@ondragend="HandleDragEnd"
|
||||||
@@ -99,15 +98,15 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
@if(
|
@if(
|
||||||
planner.LocalCourse != null
|
planner.LocalCourse != null
|
||||||
&& existsInCanvas
|
&& existsInCanvas
|
||||||
&& NeedsToBeUpdatedInCanvas
|
&& NeedsToBeUpdatedInCanvas
|
||||||
&& assignmentInCanvas != null
|
&& assignmentInCanvas != null
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
<div class="mx-3 text-body-tertiary">
|
<div class="mx-3 text-body-tertiary">
|
||||||
@Assignment.GetUpdateReason(
|
@Assignment.GetUpdateReason(
|
||||||
(CanvasAssignment)assignmentInCanvas,
|
(CanvasAssignment)assignmentInCanvas,
|
||||||
Assignment.GetCanvasAssignmentGroupId(planner.LocalCourse.Settings.AssignmentGroups))
|
Assignment.GetCanvasAssignmentGroupId(planner.LocalCourse.Settings.AssignmentGroups))
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
@@ -149,25 +148,25 @@
|
|||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@if(!showAll)
|
@if(!showAll)
|
||||||
{
|
{
|
||||||
<div
|
<div
|
||||||
class="text-center fs-3 fw-bold lh-1 text-primary"
|
class="text-center fs-3 fw-bold lh-1 text-primary"
|
||||||
role="button"
|
role="button"
|
||||||
@onclick:preventDefault="true"
|
@onclick:preventDefault="true"
|
||||||
@onclick:stopPropagation="true"
|
@onclick:stopPropagation="true"
|
||||||
@onclick="() => showAll = true"
|
@onclick="() => showAll = true"
|
||||||
>
|
>
|
||||||
<svg
|
<svg
|
||||||
width="30"
|
width="30"
|
||||||
height="30"
|
height="30"
|
||||||
viewBox="0 0 20 20"
|
viewBox="0 0 20 20"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
>
|
>
|
||||||
<path
|
<path
|
||||||
d="M6 10a2 2 0 11-4.001-.001A2 2 0 016 10zm6 0a2 2 0 11-4.001-.001A2 2 0 0112 10zm6 0a2 2 0 11-4.001-.001A2 2 0 0118 10z"
|
d="M6 10a2 2 0 11-4.001-.001A2 2 0 016 10zm6 0a2 2 0 11-4.001-.001A2 2 0 0112 10zm6 0a2 2 0 11-4.001-.001A2 2 0 0118 10z"
|
||||||
fill="var(--bs-primary)"
|
fill="var(--bs-primary)"
|
||||||
/>
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
@@ -175,21 +174,21 @@
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<div
|
<div
|
||||||
class="text-center fs-3 fw-bold lh-1 text-primary"
|
class="text-center fs-3 fw-bold lh-1 text-primary"
|
||||||
role="button"
|
role="button"
|
||||||
@onclick:preventDefault="true"
|
@onclick:preventDefault="true"
|
||||||
@onclick:stopPropagation="true"
|
@onclick:stopPropagation="true"
|
||||||
@onclick="() => showAll = false"
|
@onclick="() => showAll = false"
|
||||||
>
|
>
|
||||||
<svg
|
<svg
|
||||||
width="30"
|
width="30"
|
||||||
height="30"
|
height="30"
|
||||||
viewBox="0 0 20 20"
|
viewBox="0 0 20 20"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
>
|
>
|
||||||
<path
|
<path
|
||||||
d="M6 10a2 2 0 11-4.001-.001A2 2 0 016 10zm6 0a2 2 0 11-4.001-.001A2 2 0 0112 10zm6 0a2 2 0 11-4.001-.001A2 2 0 0118 10z"
|
d="M6 10a2 2 0 11-4.001-.001A2 2 0 016 10zm6 0a2 2 0 11-4.001-.001A2 2 0 0112 10zm6 0a2 2 0 11-4.001-.001A2 2 0 0118 10z"
|
||||||
fill="var(--bs-primary)"
|
fill="var(--bs-primary)"
|
||||||
/>
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
32
Management/Models/CanvasModels/Pages/CanvasPage.cs
Normal file
32
Management/Models/CanvasModels/Pages/CanvasPage.cs
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
|
||||||
|
namespace CanvasModel.Pages;
|
||||||
|
public record PageModel (
|
||||||
|
[property: JsonPropertyName("page_id")] string PageId,
|
||||||
|
[property: JsonPropertyName("url")] string Url,
|
||||||
|
[property: JsonPropertyName("title")] string Title,
|
||||||
|
[property: JsonPropertyName("published")] bool Published,
|
||||||
|
[property: JsonPropertyName("front_page")] bool FrontPage,
|
||||||
|
[property: JsonPropertyName("body")] string? Body
|
||||||
|
);
|
||||||
|
// [JsonPropertyName("created_at")]
|
||||||
|
// public DateTime CreatedAt { get; set; }
|
||||||
|
|
||||||
|
// [JsonPropertyName("updated_at")]
|
||||||
|
// public DateTime UpdatedAt { get; set; }
|
||||||
|
|
||||||
|
// [JsonPropertyName("editing_roles")]
|
||||||
|
// public string EditingRoles { get; set; }
|
||||||
|
|
||||||
|
// [JsonPropertyName("last_edited_by")]
|
||||||
|
// public UserDisplayModel LastEditedBy { get; set; }
|
||||||
|
|
||||||
|
// [JsonPropertyName("locked_for_user")]
|
||||||
|
// public bool LockedForUser { get; set; }
|
||||||
|
|
||||||
|
// [JsonPropertyName("lock_info")]
|
||||||
|
// public LockInfoModel? LockInfo { get; set; }
|
||||||
|
|
||||||
|
// [JsonPropertyName("lock_explanation")]
|
||||||
|
// public string? LockExplanation { get; set; }
|
||||||
|
|
||||||
|
|
||||||
8
Management/Models/Local/LocalCoursePage.cs
Normal file
8
Management/Models/Local/LocalCoursePage.cs
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
namespace LocalModels;
|
||||||
|
|
||||||
|
public record LocalCoursePage
|
||||||
|
{
|
||||||
|
public required string Title { get; init; }
|
||||||
|
public required string Text { get; set; }
|
||||||
|
public DateTime? DueDateForOrdering { get; init; }
|
||||||
|
}
|
||||||
@@ -4,9 +4,7 @@ public record LocalModule
|
|||||||
{
|
{
|
||||||
public string Name { get; init; } = string.Empty;
|
public string Name { get; init; } = string.Empty;
|
||||||
public string Notes { get; set; } = string.Empty;
|
public string Notes { get; set; } = string.Empty;
|
||||||
public IEnumerable<LocalAssignment> Assignments { get; init; } =
|
public IEnumerable<LocalAssignment> Assignments { get; init; } = [];
|
||||||
Enumerable.Empty<LocalAssignment>();
|
public IEnumerable<LocalQuiz> Quizzes { get; init; } = [];
|
||||||
|
public IEnumerable<LocalCoursePage> Pages { get; init; } = [];
|
||||||
public IEnumerable<LocalQuiz> Quizzes { get; init; } = Enumerable.Empty<LocalQuiz>();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user