mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 15:18:32 -06:00
224 lines
6.2 KiB
Plaintext
224 lines
6.2 KiB
Plaintext
@using Management.Web.Shared.Components
|
|
@using Management.Web.Shared.Components.AssignmentForm
|
|
@using Management.Web.Shared.Components.Forms
|
|
@using CanvasModel.Assignments
|
|
|
|
@inject CoursePlanner planner
|
|
@inject CanvasService canvas
|
|
@inject NavigationManager Navigation
|
|
@inject AssignmentEditorContext assignmentContext
|
|
|
|
@code {
|
|
protected override void OnInitialized()
|
|
{
|
|
assignmentContext.StateHasChanged += reload;
|
|
reload();
|
|
}
|
|
private void reload()
|
|
{
|
|
if (assignmentContext.Assignment != null)
|
|
{
|
|
name = assignmentContext.Assignment.Name;
|
|
}
|
|
this.InvokeAsync(this.StateHasChanged);
|
|
}
|
|
public void Dispose()
|
|
{
|
|
assignmentContext.StateHasChanged -= reload;
|
|
}
|
|
|
|
private void OnHide()
|
|
{
|
|
assignmentContext.Assignment = null;
|
|
name = "";
|
|
}
|
|
private string name { get; set; } = String.Empty;
|
|
private bool addingAssignmentToCanvas = false;
|
|
private bool deletingAssignmentFromCanvas = false;
|
|
|
|
private void submitHandler()
|
|
{
|
|
if (assignmentContext.Assignment != null)
|
|
{
|
|
var newAssignment = assignmentContext.Assignment with
|
|
{
|
|
Name = name,
|
|
};
|
|
|
|
assignmentContext.SaveAssignment(newAssignment);
|
|
}
|
|
assignmentContext.Assignment = null;
|
|
}
|
|
|
|
private async Task HandleDelete()
|
|
{
|
|
if (planner.LocalCourse != null && assignmentContext.Assignment != null)
|
|
{
|
|
var assignment = assignmentContext.Assignment;
|
|
|
|
var currentModule = planner
|
|
.LocalCourse
|
|
.Modules
|
|
.First(m =>
|
|
m.Assignments.Contains(assignment)
|
|
) ?? throw new Exception("handling assignment delete, could not find module");
|
|
|
|
var newModules = planner.LocalCourse.Modules.Select(m =>
|
|
m.Name == currentModule.Name
|
|
? m with
|
|
{
|
|
Assignments = m.Assignments.Where(a => a != assignment).ToArray()
|
|
}
|
|
: m
|
|
)
|
|
.ToArray();
|
|
|
|
planner.LocalCourse = planner.LocalCourse with
|
|
{
|
|
Modules = newModules
|
|
};
|
|
|
|
if (assignmentInCanvas != null && planner.LocalCourse.Settings.CanvasId != null)
|
|
{
|
|
ulong courseId = planner.LocalCourse.Settings.CanvasId ?? throw new Exception("cannot delete if no course id");
|
|
await canvas.Assignments.Delete(courseId, assignmentInCanvas.Id, assignment.Name);
|
|
}
|
|
Navigation.NavigateTo("/course/" + planner.LocalCourse?.Settings.Name);
|
|
}
|
|
}
|
|
|
|
private void handleNameChange(ChangeEventArgs e)
|
|
{
|
|
if (assignmentContext.Assignment != null)
|
|
{
|
|
var newAssignment = assignmentContext.Assignment with { Name = e.Value?.ToString() ?? "" };
|
|
assignmentContext.SaveAssignment(newAssignment);
|
|
}
|
|
}
|
|
|
|
private void setAssignmentGroup(LocalAssignmentGroup? group)
|
|
{
|
|
if (assignmentContext.Assignment == null)
|
|
return;
|
|
|
|
var newAssignment = assignmentContext.Assignment with
|
|
{
|
|
LocalAssignmentGroupName = group?.Name
|
|
};
|
|
|
|
assignmentContext.SaveAssignment(newAssignment);
|
|
}
|
|
|
|
private LocalAssignmentGroup? selectedAssignmentGroup =>
|
|
planner
|
|
.LocalCourse?
|
|
.Settings
|
|
.AssignmentGroups
|
|
.FirstOrDefault(g => g.Name == assignmentContext.Assignment?.LocalAssignmentGroupName);
|
|
|
|
private async Task addToCanvas()
|
|
{
|
|
addingAssignmentToCanvas = true;
|
|
await assignmentContext.AddAssignmentToCanvas();
|
|
await planner.LoadCanvasData();
|
|
addingAssignmentToCanvas = false;
|
|
}
|
|
private async Task updateInCanvas()
|
|
{
|
|
if(assignmentInCanvas != null)
|
|
{
|
|
addingAssignmentToCanvas = true;
|
|
await assignmentContext.UpdateInCanvas(assignmentInCanvas.Id);
|
|
await planner.LoadCanvasData();
|
|
addingAssignmentToCanvas = false;
|
|
}
|
|
}
|
|
|
|
private CanvasAssignment? assignmentInCanvas =>
|
|
planner.CanvasAssignments?.FirstOrDefault(a => a.Name == assignmentContext.Assignment?.Name);
|
|
|
|
private string canvasAssignmentUrl =>
|
|
$"https://snow.instructure.com/courses/{planner.LocalCourse?.Settings.CanvasId}/assignments/{assignmentInCanvas?.Id}";
|
|
|
|
private async Task deleteFromCanvas()
|
|
{
|
|
if (assignmentInCanvas == null
|
|
|| planner?.LocalCourse?.Settings.CanvasId == null
|
|
|| assignmentContext.Assignment == null
|
|
)
|
|
return;
|
|
|
|
deletingAssignmentFromCanvas = true;
|
|
await canvas.Assignments.Delete(
|
|
(ulong)planner.LocalCourse.Settings.CanvasId,
|
|
assignmentInCanvas.Id,
|
|
assignmentContext.Assignment.Name
|
|
);
|
|
await planner.LoadCanvasData();
|
|
deletingAssignmentFromCanvas = false;
|
|
StateHasChanged();
|
|
}
|
|
}
|
|
|
|
<div class="d-flex flex-column p-2 h-100" style="height: 100%;" >
|
|
<div>
|
|
@assignmentContext.Assignment?.Name
|
|
</div>
|
|
|
|
<section class="flex-1 p-1 border rounded-4 bg-dark-subtle" style="min-height: 0;">
|
|
@if (assignmentContext.Assignment != null)
|
|
{
|
|
<AssignmentMarkdownEditor />
|
|
}
|
|
</section>
|
|
|
|
<div class="d-flex justify-content-end p-3">
|
|
@if (addingAssignmentToCanvas || deletingAssignmentFromCanvas)
|
|
{
|
|
<div>
|
|
<Spinner />
|
|
</div>
|
|
}
|
|
|
|
<ConfirmationModal Label="Delete" Class="btn btn-danger" OnConfirmAsync="HandleDelete" />
|
|
<button
|
|
class="btn btn-outline-secondary mx-3"
|
|
disabled="@(addingAssignmentToCanvas || deletingAssignmentFromCanvas)"
|
|
@onclick="addToCanvas"
|
|
>
|
|
Add To Canvas
|
|
</button>
|
|
@if (assignmentInCanvas != null)
|
|
{
|
|
<a
|
|
class="btn btn-outline-secondary me-1"
|
|
href="@canvasAssignmentUrl"
|
|
target="_blank"
|
|
disabled="@(addingAssignmentToCanvas || deletingAssignmentFromCanvas)"
|
|
>
|
|
View in Canvas
|
|
</a>
|
|
<button
|
|
class="btn btn-outline-secondary mx-3"
|
|
disabled="@(addingAssignmentToCanvas || deletingAssignmentFromCanvas)"
|
|
@onclick="updateInCanvas"
|
|
>
|
|
Update In Canvas
|
|
</button>
|
|
<ConfirmationModal
|
|
Disabled="@(addingAssignmentToCanvas || deletingAssignmentFromCanvas)"
|
|
Label="Delete from Canvas"
|
|
Class="btn btn-outline-danger mx-3"
|
|
OnConfirmAsync="deleteFromCanvas"
|
|
/>
|
|
}
|
|
<button class="btn btn-primary mx-2" @onclick="@(() => {
|
|
assignmentContext.Assignment = null;
|
|
Navigation.NavigateTo("/course/" + planner.LocalCourse?.Settings.Name);
|
|
})">
|
|
Done
|
|
</button>
|
|
</div>
|
|
|
|
|
|
</div> |