Files
canvasManagement/Management.Web/Shared/Components/AssignmentForm/RubricEditor.razor

141 lines
3.0 KiB
Plaintext

@using Management.Web.Shared.Components
@inject CoursePlanner planner
@inject AssignmentEditorContext assignmentContext
@code
{
private IEnumerable<RubricItem> rubric { get; set; } = Array.Empty<RubricItem>();
protected override void OnInitialized()
{
assignmentContext.StateHasChanged += reload;
reload();
}
private void reload()
{
if (assignmentContext.Assignment != null)
{
rubric = assignmentContext.Assignment.Rubric;
}
this.InvokeAsync(this.StateHasChanged);
}
public void Dispose()
{
assignmentContext.StateHasChanged -= reload;
}
private void save()
{
if (assignmentContext.Assignment != null)
{
var totalRubricPoints = rubric
.Where(r => !r.Label.Contains(RubricItem.extraCredit))
.Select(s => s.Points)
.Sum();
var newAssignment = assignmentContext.Assignment with
{
Rubric = rubric,
PointsPossible = totalRubricPoints,
};
assignmentContext.SaveAssignment(newAssignment);
StateHasChanged();
}
}
private void addItem()
{
if (assignmentContext.Assignment != null)
{
rubric = rubric.Append(new RubricItem
{
Id = Guid.NewGuid().ToString(),
Label = "",
Points = 0
});
}
}
private void removeItem()
{
if (assignmentContext.Assignment != null)
{
rubric = rubric.Take(rubric.Count() - 1);
save();
}
}
private void editItem(RubricItem newItem)
{
if (assignmentContext.Assignment != null)
{
rubric = rubric.Select(i => i.Id == newItem.Id ? newItem : i);
save();
}
}
private void MoveUp(RubricItem item)
{
if (assignmentContext.Assignment != null)
{
var rubricList = rubric.ToList();
var index = rubricList.IndexOf(item);
if (index > 0)
{
var previous = rubricList[index - 1];
rubricList[index - 1] = item;
rubricList[index] = previous;
rubric = rubricList;
save();
}
}
}
private void MoveDown(RubricItem item)
{
if (assignmentContext.Assignment != null)
{
var rubricList = rubric.ToList();
var index = rubricList.IndexOf(item);
if (index < rubricList.Count())
{
var next = rubricList[index + 1];
rubricList[index + 1] = item;
rubricList[index] = next;
rubric = rubricList;
save();
}
}
}
}
<br>
<h5>Rubric</h5>
<ul class="list-group">
@foreach (var rubricItem in rubric)
{
<RubricEditorItem
RubricItem="rubricItem"
OnUpdate="editItem"
MoveUp="() => MoveUp(rubricItem)"
MoveDown="() => MoveDown(rubricItem)"
/>
}
</ul>
<div class="text-end my-1">
<button
@onclick:preventDefault="true"
@onclick="removeItem"
type="button"
class="btn btn-outline-danger"
>
- rubric item
</button>
<button
@onclick:preventDefault="true"
@onclick="addItem"
type="button"
class="btn btn-outline-primary"
>
+ rubric item
</button>
</div>