mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
can create modules without syncing
This commit is contained in:
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
@using Management.Web.Shared.Components
|
@using Management.Web.Shared.Components
|
||||||
@using Management.Web.Shared.Components.Quiz
|
@using Management.Web.Shared.Components.Quiz
|
||||||
@using Management.Web.Shared.Module.Assignment
|
@using Management.Web.Shared.Module.Assignment
|
||||||
@@ -14,6 +13,7 @@
|
|||||||
[Parameter, EditorRequired]
|
[Parameter, EditorRequired]
|
||||||
public LocalModule Module { get; set; } = default!;
|
public LocalModule Module { get; set; } = default!;
|
||||||
private bool dragging { get; set; } = false;
|
private bool dragging { get; set; } = false;
|
||||||
|
private bool publishing = false;
|
||||||
private string _notes { get; set; } = "";
|
private string _notes { get; set; } = "";
|
||||||
private string notes
|
private string notes
|
||||||
{
|
{
|
||||||
@@ -59,21 +59,25 @@
|
|||||||
planner.StateHasChanged -= reload;
|
planner.StateHasChanged -= reload;
|
||||||
}
|
}
|
||||||
|
|
||||||
private string accordionId {
|
private string accordionId
|
||||||
|
{
|
||||||
get => Module.Name.Replace(" ", "").Replace("#", "") + "-AccordionItem";
|
get => Module.Name.Replace(" ", "").Replace("#", "") + "-AccordionItem";
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnDragEnter() {
|
void OnDragEnter()
|
||||||
|
{
|
||||||
dragging = true;
|
dragging = true;
|
||||||
}
|
}
|
||||||
void OnDragLeave() {
|
void OnDragLeave()
|
||||||
|
{
|
||||||
dragging = false;
|
dragging = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnDrop()
|
void OnDrop()
|
||||||
{
|
{
|
||||||
dragging = false;
|
dragging = false;
|
||||||
if(dragContainer.DropCallback == null){
|
if (dragContainer.DropCallback == null)
|
||||||
|
{
|
||||||
System.Console.WriteLine("no drop callback set");
|
System.Console.WriteLine("no drop callback set");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -85,23 +89,19 @@
|
|||||||
.FirstOrDefault(
|
.FirstOrDefault(
|
||||||
cm => cm.Name == Module.Name
|
cm => cm.Name == Module.Name
|
||||||
) != null;
|
) != null;
|
||||||
|
private async Task Publish()
|
||||||
|
{
|
||||||
|
publishing = true;
|
||||||
|
await planner.CreateModule(Module);
|
||||||
|
publishing = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
<div
|
<div class="@("accordion-item " + (dragging ? "" : ""))" @ondrop="@(() => OnDrop())" @ondragenter="OnDragEnter"
|
||||||
class="@("accordion-item " + (dragging ? "" : ""))"
|
@ondragleave="OnDragLeave" ondragover="event.preventDefault();">
|
||||||
@ondrop="@(() => OnDrop())"
|
|
||||||
@ondragenter="OnDragEnter"
|
|
||||||
@ondragleave="OnDragLeave"
|
|
||||||
ondragover="event.preventDefault();"
|
|
||||||
>
|
|
||||||
<h2 class="accordion-header">
|
<h2 class="accordion-header">
|
||||||
<button
|
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
||||||
class="accordion-button collapsed"
|
data-bs-target="@("#" + accordionId)" aria-controls="@accordionId">
|
||||||
type="button"
|
|
||||||
data-bs-toggle="collapse"
|
|
||||||
data-bs-target="@("#" + accordionId)"
|
|
||||||
aria-controls="@accordionId"
|
|
||||||
>
|
|
||||||
<div class="w-100 d-flex justify-content-between pe-3">
|
<div class="w-100 d-flex justify-content-between pe-3">
|
||||||
<div>
|
<div>
|
||||||
@Module.Name
|
@Module.Name
|
||||||
@@ -118,10 +118,7 @@
|
|||||||
</button>
|
</button>
|
||||||
|
|
||||||
</h2>
|
</h2>
|
||||||
<div
|
<div id="@accordionId" class="accordion-collapse collapse">
|
||||||
id="@accordionId"
|
|
||||||
class="accordion-collapse collapse"
|
|
||||||
>
|
|
||||||
<div class="accordion-body pt-1">
|
<div class="accordion-body pt-1">
|
||||||
@* <textarea
|
@* <textarea
|
||||||
class="form-control"
|
class="form-control"
|
||||||
@@ -134,13 +131,28 @@
|
|||||||
<div class="col my-auto">
|
<div class="col my-auto">
|
||||||
<RenameModule Module="Module" />
|
<RenameModule Module="Module" />
|
||||||
</div>
|
</div>
|
||||||
<div class="col-auto">
|
<div class="col my-auto">
|
||||||
<NewQuiz
|
@if(publishing)
|
||||||
Module="Module"
|
{
|
||||||
/>
|
<Spinner />
|
||||||
<NewAssignment
|
}
|
||||||
Module="Module"
|
else
|
||||||
/>
|
{
|
||||||
|
if(!isSyncedWithCanvas)
|
||||||
|
{
|
||||||
|
<button
|
||||||
|
class="btn btn-outline-primary"
|
||||||
|
@onclick="Publish"
|
||||||
|
disabled="@publishing"
|
||||||
|
>
|
||||||
|
Publish
|
||||||
|
</button>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
<div class="col-auto my-auto">
|
||||||
|
<NewQuiz Module="Module" />
|
||||||
|
<NewAssignment Module="Module" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<h5>Assignments</h5>
|
<h5>Assignments</h5>
|
||||||
|
|||||||
@@ -165,8 +165,6 @@ public class CoursePlanner
|
|||||||
await LocalCourse.SortCanvasModulesByLocalOrder(canvasId, CanvasModules, canvas);
|
await LocalCourse.SortCanvasModulesByLocalOrder(canvasId, CanvasModules, canvas);
|
||||||
CanvasModulesItems = await canvas.Modules.GetAllModulesItems(canvasId, CanvasModules);
|
CanvasModulesItems = await canvas.Modules.GetAllModulesItems(canvasId, CanvasModules);
|
||||||
|
|
||||||
LocalCourse = await LocalCourse.GetCanvasIdsForLocalModules(canvasId, canvas);
|
|
||||||
|
|
||||||
LocalCourse = await LocalCourse.SyncAssignmentsWithCanvas(canvasId, CanvasAssignments, canvas);
|
LocalCourse = await LocalCourse.SyncAssignmentsWithCanvas(canvasId, CanvasAssignments, canvas);
|
||||||
CanvasAssignments = await canvas.Assignments.GetAll(canvasId);
|
CanvasAssignments = await canvas.Assignments.GetAll(canvasId);
|
||||||
|
|
||||||
@@ -180,6 +178,15 @@ public class CoursePlanner
|
|||||||
Console.WriteLine("done syncing with canvas\n");
|
Console.WriteLine("done syncing with canvas\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task CreateModule(LocalModule newModule)
|
||||||
|
{
|
||||||
|
if(LocalCourse == null)
|
||||||
|
return;
|
||||||
|
var canvasCourseId =
|
||||||
|
LocalCourse.Settings.CanvasId ?? throw new Exception("no course canvas id to use to create module");
|
||||||
|
await canvas.Modules.CreateModule(canvasCourseId, newModule.Name);
|
||||||
|
CanvasModules = await canvas.Modules.GetModules(canvasCourseId);
|
||||||
|
}
|
||||||
|
|
||||||
public void Clear()
|
public void Clear()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -51,23 +51,6 @@ public static partial class ModuleSyncronizationExtensions
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static async Task<LocalCourse> GetCanvasIdsForLocalModules(
|
|
||||||
this LocalCourse localCourse,
|
|
||||||
ulong canvasId,
|
|
||||||
CanvasService canvas
|
|
||||||
)
|
|
||||||
{
|
|
||||||
// var canvasModules = await canvas.Modules.GetModules(canvasId);
|
|
||||||
return localCourse;
|
|
||||||
// {
|
|
||||||
// Modules = localCourse.Modules.Select(m =>
|
|
||||||
// {
|
|
||||||
// var canvasModule = canvasModules.FirstOrDefault(cm => cm.Name == m.Name);
|
|
||||||
// return canvasModule == null ? m : m with { CanvasId = canvasModule.Id };
|
|
||||||
// })
|
|
||||||
// };
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async Task SortModuleItems(
|
public static async Task SortModuleItems(
|
||||||
this LocalModule localModule,
|
this LocalModule localModule,
|
||||||
ulong canvasId,
|
ulong canvasId,
|
||||||
@@ -150,6 +133,17 @@ public static partial class ModuleSyncronizationExtensions
|
|||||||
// var moduleCanvasId =
|
// var moduleCanvasId =
|
||||||
// localModule.CanvasId
|
// localModule.CanvasId
|
||||||
// ?? throw new Exception("cannot sync canvas modules items if module not synced with canvas");
|
// ?? throw new Exception("cannot sync canvas modules items if module not synced with canvas");
|
||||||
|
await localModule.SyncAndSortCanvasModule(courseCanvasId, canvasModulesItems, canvas);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async Task SyncAndSortCanvasModule(
|
||||||
|
this LocalModule localModule,
|
||||||
|
ulong courseCanvasId,
|
||||||
|
Dictionary<CanvasModule, IEnumerable<CanvasModuleItem>> canvasModulesItems,
|
||||||
|
CanvasService canvas
|
||||||
|
)
|
||||||
|
{
|
||||||
var canvasModule = canvasModulesItems.Keys.FirstOrDefault(k => k.Name == localModule.Name);
|
var canvasModule = canvasModulesItems.Keys.FirstOrDefault(k => k.Name == localModule.Name);
|
||||||
if (canvasModule == null)
|
if (canvasModule == null)
|
||||||
{
|
{
|
||||||
@@ -170,4 +164,3 @@ public static partial class ModuleSyncronizationExtensions
|
|||||||
await localModule.SortModuleItems(courseCanvasId, canvasModule.Id, canvas);
|
await localModule.SortModuleItems(courseCanvasId, canvasModule.Id, canvas);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user