@inject AssignmentDragContainer dragContainer @inject CoursePlanner planner @code { [Parameter] [EditorRequired] public LocalAssignment Assignment { get; set; } = new(); 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 moduleWithUpdatedAssignment = currentModule with { Assignments = currentModule.Assignments.Select(a => a.id != Assignment.id ? a : a with { due_at=dropDate } ) }; 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) } : m with { Assignments = m.Assignments.Append(Assignment) } ); 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; } }
@Assignment.name