@using Markdig @inject CoursePlanner planner @code { 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!; public bool? UseTemplate { get; set; } = null; public string? TemplateId { get; set; } public Dictionary VariableValues { get; set; } = new Dictionary(); protected override void OnParametersSet() { Description = Assignment.Description; Preview = Markdown.ToHtml(Assignment.Description); if (currentDescription == null) currentDescription = Description; TemplateId = Assignment.TemplateId; if (UseTemplate == null) { UseTemplate = Assignment.TemplateId != null && Assignment.TemplateId != ""; } Console.WriteLine(Description) } private AssignmentTemplate? selectedTemplate => planner .LocalCourse? .AssignmentTemplates .FirstOrDefault(t => t.Id == Assignment.TemplateId); public string Preview { get; set; } 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 }; } } private Timer _debounceTimer; private void SaveDescription() { Console.WriteLine("saving description"); _debounceTimer?.Dispose(); SaveAssignment(Assignment with { Description = currentDescription }); } private string? currentDescription { get; set; } = null; private void OnInputChanged(ChangeEventArgs e) { // Dispose of any existing timer _debounceTimer?.Dispose(); // Create a new timer that waits for 500ms before executing SaveData _debounceTimer = new Timer( (_) => SaveDescription(), null, 500, Timeout.Infinite ); } }
@if (UseTemplate ?? false) { @if (planner.LocalCourse != null) {
VARIABLES: @if (selectedTemplate != null) { var variables = AssignmentTemplate.GetVariables(selectedTemplate.Markdown); @foreach (var variable in variables) {
} }
} } else {
HTML Preview