mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-26 07:38:33 -06:00
247 lines
6.8 KiB
Plaintext
247 lines
6.8 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 h-100">
|
|
<div>
|
|
@assignmentContext.Assignment?.Name
|
|
</div>
|
|
<div class="flex-grow-1 d-flex flex-column">
|
|
@if (assignmentContext.Assignment != null)
|
|
{
|
|
<div class="m-1">
|
|
<label class="form-label">
|
|
Name
|
|
</label>
|
|
<input class="form-control" @bind="name" @oninput="handleNameChange" />
|
|
</div>
|
|
|
|
<ButtonSelect
|
|
Label="Assignment Group"
|
|
Options="planner.LocalCourse?.Settings.AssignmentGroups"
|
|
GetName="(g) => g?.Name"
|
|
OnSelect="(g) => setAssignmentGroup(g)"
|
|
SelectedOption="selectedAssignmentGroup"
|
|
/>
|
|
<div class="m-1 flex-grow-1">
|
|
<AssignmentMarkdownEditor />
|
|
</div>
|
|
|
|
@* <div class="container">
|
|
<RubricMarkdownEditor />
|
|
<hr>
|
|
<div class="mx-5 px-5">
|
|
<SubmissionTypeSelector />
|
|
</div>
|
|
</div> *@
|
|
}
|
|
</div>
|
|
|
|
<div class="d-flex justify-content-end p-3">
|
|
|
|
<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>
|
|
|
|
@if (addingAssignmentToCanvas || deletingAssignmentFromCanvas)
|
|
{
|
|
<div>
|
|
<Spinner />
|
|
</div>
|
|
}
|
|
</div> |