got assignment template variables and replacement working

This commit is contained in:
2023-07-27 19:51:36 -06:00
parent b03c699381
commit 7c857a3887
10 changed files with 63 additions and 81 deletions

View File

@@ -11,13 +11,11 @@
@inject CanvasService canvas
@inject CoursePlanner planner
@inject ICanvasTokenManagement tokenManagement
@code
{
private bool showNewFile { get; set; } = false;
private bool hasCanvasToken { get; set; } = false;
protected override void OnInitialized()
{
planner.StateHasChanged += reload;
@@ -32,29 +30,10 @@
{
planner.StateHasChanged -= reload;
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if(firstRender)
{
hasCanvasToken = await tokenManagement.GetCanvasToken() != null;
StateHasChanged();
}
}
private async Task SetToken(string newToken)
{
await tokenManagement.SaveCanvasToken(newToken);
hasCanvasToken = true;
StateHasChanged();
}
}
<PageTitle>Index</PageTitle>
@if(!hasCanvasToken)
{
<ValidateCanvasToken SetToken="SetToken" />
}
@if(planner.LocalCourse == null)
{
<CurrentFiles />

View File

@@ -19,7 +19,6 @@ var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddScoped<ICanvasTokenManagement, BrowserStorageManagement>();
builder.Services.AddScoped<IWebRequestor, WebRequestor>();
builder.Services.AddScoped<CanvasService, CanvasService>();
builder.Services.AddSingleton<YamlManager>();

View File

@@ -134,7 +134,23 @@
<div class="card-text">
<div class="row">
<div class="col">
@Assignment.description
@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
}
</div>
<div class="col-auto">

View File

@@ -9,6 +9,8 @@
public bool UseTemplate { get; set; }
[Parameter]
public string? TemplateId { get; set; }
[Parameter]
public Dictionary<string, string> VariableValues { get; set; } = new Dictionary<string, string>();
[Parameter]
public EventCallback<string> DescriptionChanged { get; set; }
@@ -19,12 +21,14 @@
[Parameter]
public EventCallback<string?> TemplateIdChanged { get; set; }
private string selectedTemplateId { get; set; }
[Parameter]
public EventCallback<Dictionary<string, string>> VariableValuesChanged { get; set; }
private AssignmentTemplate? selectedTemplate =>
planner
.LocalCourse?
.AssignmentTemplates
.FirstOrDefault(t => t.Id == selectedTemplateId);
.FirstOrDefault(t => t.Id == TemplateId);
}
@@ -55,8 +59,14 @@
<div class="col-auto text-center">
<form @onsubmit:preventDefault="true">
<label for="templateSelect">Templates</label>
<select id="templateSelect" class="form-select" @bind="selectedTemplateId">
<option></option>
<select
id="templateSelect"
class="form-select"
value="@TemplateId"
@onchange="async (e) =>
await TemplateIdChanged.InvokeAsync(e.Value?.ToString())"
>
<option value=""></option>
@foreach (var template in planner.LocalCourse.AssignmentTemplates)
{
<option value="@template.Id">@template.Name</option>
@@ -79,6 +89,16 @@
</label>
<input
class="form-control"
value="@VariableValues.GetValueOrDefault(variable, String.Empty)"
@oninput="async (e) =>
{
var newValue = e.Value?.ToString() ?? String.Empty;
var newDictionary = new Dictionary<string, string>(VariableValues);
newDictionary[variable] = newValue;
await VariableValuesChanged.InvokeAsync(newDictionary);
}
"
/>
</div>
}

View File

@@ -55,6 +55,7 @@
.Where(r => !r.Label.Contains(RubricItem.extraCredit))
.Select(s => s.Points)
.Sum();
var newAssignment = Assignment with
{
name=name,
@@ -117,6 +118,7 @@
@bind-Description="description"
@bind-UseTemplate="useTemplate"
@bind-TemplateId="templateId"
@bind-VariableValues="templateVariables"
/>
</div>

View File

@@ -1,28 +0,0 @@
using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage;
public class BrowserStorageManagement : ICanvasTokenManagement
{
// private string moduleStorageKey = "module storage key";
// private string assignmentStorageKey = "assignment storage key";
private string canvasKey = "canvas key";
private ProtectedLocalStorage storage { get; }
public BrowserStorageManagement(ProtectedLocalStorage BrowserStorage)
{
storage = BrowserStorage;
}
public async Task<string?> GetCanvasToken()
{
var result = await storage.GetAsync<string>(canvasKey);
if (!result.Success)
return null;
return result.Value;
}
public async Task SaveCanvasToken(string token)
{
await storage.SetAsync(canvasKey, token);
}
}