@using Management.Web.Shared.Components @using Management.Web.Shared.Module.Assignment.AssignmentForm @inject AssignmentDragContainer dragContainer @inject CoursePlanner planner @code { [Parameter] [EditorRequired] public LocalAssignment Assignment { get; set; } = new(); [Parameter] [EditorRequired] public LocalModule Module { get; set; } = new(); private bool showUpdateForm = false; protected override void OnInitialized() { planner.StateHasChanged += reload; } private void reload() { this.InvokeAsync(this.StateHasChanged); } public void Dispose() { planner.StateHasChanged -= reload; } private Modal? assignmentEditorModal {get; set;} private void dropOnDate(DateTime dropDate) { if (planner.LocalCourse == null) return; var currentModule = planner .LocalCourse .Modules .First(m => m.Assignments .Select(a => a.id) .Contains(Assignment.id) ) ?? throw new Exception("in day callback, could not find module"); var defaultDueTimeDate = new DateTime( year: dropDate.Year, month: dropDate.Month, day: dropDate.Day, hour: planner.LocalCourse.DefaultDueTime.Hour, minute: planner.LocalCourse.DefaultDueTime.Minute, second: 0 ); var moduleWithUpdatedAssignment = currentModule with { Assignments = currentModule.Assignments.Select(a => a.id != Assignment.id ? a : a with { due_at=defaultDueTimeDate } ) }; var updatedModules = planner.LocalCourse.Modules .Select(m => m.Name == moduleWithUpdatedAssignment.Name ? moduleWithUpdatedAssignment : m ); var newCourse = planner.LocalCourse with { Modules = updatedModules }; planner.LocalCourse = newCourse; } private void dropOnModule(LocalModule module) { if (planner.LocalCourse == null) return; var newModules = planner.LocalCourse.Modules.Select(m => m.Name != module.Name ? m with { Assignments = m.Assignments.Where(a => a.id != Assignment.id).DistinctBy(a => a.id) } : m with { Assignments = m.Assignments.Append(Assignment).DistinctBy(a => a.id) } ); var newCourse = planner.LocalCourse with { Modules = newModules }; planner.LocalCourse = newCourse; } private void DropCallback (DateTime? dropDate, LocalModule? module) { if (module == null) { dropOnDate(dropDate ?? Assignment.due_at); } else { dropOnModule(module); } } private void HandleDragStart() { dragContainer.DropCallback = DropCallback; } private void HandleDragEnd() { dragContainer.DropCallback = null; } private bool isSyncedWithCanvas => planner .CanvasAssignments? .FirstOrDefault( a => a.Id == Assignment.canvasId ) != null; }

@Assignment.name

@if(isSyncedWithCanvas) { @if(planner.LocalCourse != null && planner.LocalCourse.CanvasId != null && planner.CanvasAssignments != null && planner.CanvasModules != null && planner.AssignmentNeedsUpdates(Assignment) ) {
need to update canvas
} else {
Canvas is up to date
} } else {
Not Synced with Canvas
}
@if(Assignment.use_template) { var template = planner.LocalCourse?.AssignmentTemplates.First((t) => t.Id == Assignment.template_id); if(template == null) { System.Console.WriteLine($"Could not find template fof assignment, {Assignment.template_id}"); } else { var html = AssignmentTemplate.GetHtml(template, Assignment); @((MarkupString) html) } } else { @Assignment.description }
Points: @Assignment.points_possible
Due At: @Assignment.due_at
Lock At: @Assignment.lock_at
@if(Assignment.canvasId != null) {
Synced with canvas
} else {
Not synced with canvas
}
Rubric
@foreach(var rubricItem in Assignment.rubric) {
@rubricItem.Label
@rubricItem.Points
}
Submission Types:
    @foreach(var type in Assignment.submission_types) {
  • @type
  • }