restructured components so that there are more components in the pages

This commit is contained in:
2024-01-11 17:28:14 -07:00
parent 4fb5d9a25d
commit 5666d3dc85
22 changed files with 110 additions and 85 deletions

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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
) )
{ {

View File

@@ -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>

View File

@@ -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);

View File

@@ -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>

View 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; }

View 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; }
}

View File

@@ -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>();
} }