diff --git a/Management.Web/Program.cs b/Management.Web/Program.cs index 2bb3584..2f3704f 100644 --- a/Management.Web/Program.cs +++ b/Management.Web/Program.cs @@ -39,7 +39,7 @@ builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); -builder.Services.AddScoped(); +builder.Services.AddScoped(); var app = builder.Build(); diff --git a/Management.Web/Shared/Components/AssignmentForm/AssignmentDescriptionEditor.razor b/Management.Web/Shared/Components/AssignmentForm/AssignmentDescriptionEditor.razor index 1ca9bce..74948f6 100644 --- a/Management.Web/Shared/Components/AssignmentForm/AssignmentDescriptionEditor.razor +++ b/Management.Web/Shared/Components/AssignmentForm/AssignmentDescriptionEditor.razor @@ -2,74 +2,118 @@ @inject CoursePlanner planner -@code +@code { - [Parameter] + protected override void OnInitialized() + { + planner.StateHasChanged += reload; + } + private void reload() + { + this.InvokeAsync(this.StateHasChanged); + } + public void Dispose() + { + planner.StateHasChanged -= reload; + } + + + [Parameter, EditorRequired] + public LocalAssignment Assignment { get; set; } = default!; + + public string Description { get; set; } = default!; - [Parameter] - public EventCallback DescriptionChanged { get; set; } - - [Parameter] public bool UseTemplate { get; set; } - [Parameter] - public EventCallback UseTemplateChanged { get; set; } - [Parameter] public string? TemplateId { get; set; } - [Parameter] - public EventCallback TemplateIdChanged { get; set; } - [Parameter] public Dictionary VariableValues { get; set; } = new Dictionary(); - [Parameter] - public EventCallback> VariableValuesChanged { get; set; } + + protected override void OnParametersSet() + { + Description = Assignment.Description; + TemplateId = Assignment.TemplateId; + UseTemplate = Assignment.TemplateId != null && Assignment.TemplateId != ""; + } - private AssignmentTemplate? selectedTemplate => + private AssignmentTemplate? selectedTemplate => planner .LocalCourse? .AssignmentTemplates - .FirstOrDefault(t => t.Id == TemplateId); - public string Preview => Markdown.ToHtml(Description); + .FirstOrDefault(t => t.Id == Assignment.TemplateId); + public string Preview => Markdown.ToHtml(Assignment.Description); + + private void SaveAssignment(LocalAssignment newAssignment) + { + if(planner.LocalCourse != null) + { + var currentModule = planner + .LocalCourse + .Modules + .First(m => + m.Assignments + .Select(a => a.Id) + .Contains(Assignment.Id) + ) ?? throw new Exception("could not find current module in assignment description form"); + + var updatedModules = planner.LocalCourse.Modules.Select(m => + m.Name == currentModule.Name + ? currentModule with + { + Assignments=currentModule.Assignments.Select(a => + a.Id == newAssignment.Id + ? newAssignment + : a + ).ToArray() + } + : m + ).ToArray(); + + planner.LocalCourse = planner.LocalCourse with + { + Modules=updatedModules + }; + } + } }
-
-@if(UseTemplate) +@if (UseTemplate) { - @if(planner.LocalCourse != null) + @if (planner.LocalCourse != null) {
-
-
- - + + @foreach (var template in planner.LocalCourse.AssignmentTemplates) { } @@ -78,30 +122,30 @@
VARIABLES: - @if(selectedTemplate != null) + @if (selectedTemplate != null) { var variables = AssignmentTemplate.GetVariables(selectedTemplate.Markdown); - @foreach(var variable in variables) + @foreach (var variable in variables) {
-
} } @@ -111,34 +155,36 @@ } else { - -
-
- -
-
- HTML Preview -
+
+
+
+
+ HTML Preview + +
+