Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 28 additions & 6 deletions admin/TwoWeeksReady.Admin/Data/FunctionsRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ public Task<IEnumerable<BaseKit>> GetAllBaseKits()
throw new NotImplementedException();
}

public Task<IEnumerable<HazardHunt>> GetAllHazardHunts()
public async Task<IEnumerable<HazardHunt>> GetAllHazardHunts()
{
throw new NotImplementedException();
return await _httpClient.GetFromJsonAsync<IList<HazardHunt>>("hazardhunt-list");
}

public async Task<IEnumerable<HazardInfo>> GetAllHazardInfos()
Expand All @@ -40,9 +40,9 @@ public Task<BaseKit> GetBaseKitById(string id)
throw new NotImplementedException();
}

public Task<HazardHunt> GetHazardHuntById(string id)
public async Task<HazardHunt> GetHazardHuntById(string id)
{
throw new NotImplementedException();
return await _httpClient.GetFromJsonAsync<HazardHunt>($"hazardhunt-by-id/{id}");
}

public async Task<HazardInfo> GetHazardInfoById(string id)
Expand All @@ -55,9 +55,17 @@ public Task<BaseKitItem> SaveBaseKitItem(BaseKitItem kit)
throw new NotImplementedException();
}

public Task<HazardHunt> SaveHazardHunt(HazardHunt hazardHunt)
public async Task<HazardHunt> SaveHazardHunt(HazardHunt hazardHunt)
{
throw new NotImplementedException();
var response = await _httpClient.PutAsJsonAsync("hazardhunt-update", hazardHunt);
if (response.IsSuccessStatusCode)
{
return await response.Content.ReadFromJsonAsync<HazardHunt>();
}
else
{
throw new Exception("Error saving hazard hunt");
}
}

public async Task<HazardInfo> SaveHazardInfo(HazardInfo hazardInfo)
Expand All @@ -73,6 +81,7 @@ public async Task<HazardInfo> SaveHazardInfo(HazardInfo hazardInfo)
}
}


public async Task<HazardInfo> CreateHazardInfo(HazardInfo hazardInfo)
{
var response = await _httpClient.PostAsJsonAsync("hazardinfo-create", hazardInfo);
Expand All @@ -85,5 +94,18 @@ public async Task<HazardInfo> CreateHazardInfo(HazardInfo hazardInfo)
throw new Exception("Error saving hazard info");
}
}

public async Task<HazardHunt> CreateHazardHunt(HazardHunt hazardHunt)
{
var response = await _httpClient.PostAsJsonAsync("hazardhunt-create", hazardHunt);
if (response.IsSuccessStatusCode)
{
return await response.Content.ReadFromJsonAsync<HazardHunt>();
}
else
{
throw new Exception("Error saving hazard hunt");
}
}
}
}
2 changes: 2 additions & 0 deletions admin/TwoWeeksReady.Admin/Data/IRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ public interface IRepository
Task<HazardInfo> SaveHazardInfo(HazardInfo hazardInfo);

Task<HazardInfo> CreateHazardInfo(HazardInfo hazardInfo);

Task<HazardHunt> CreateHazardHunt(HazardHunt hazardHunt);
}

}
4 changes: 4 additions & 0 deletions admin/TwoWeeksReady.Admin/Data/StubRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,10 @@ public Task<HazardInfo> CreateHazardInfo(HazardInfo hazardInfo)
return Task.FromResult(hazardInfo);
}

public Task<HazardHunt> CreateHazardHunt(HazardHunt hazardHunt)
{
return Task.FromResult(hazardHunt);
}

}

Expand Down
126 changes: 113 additions & 13 deletions admin/TwoWeeksReady.Admin/Pages/HazardHunts/Details.razor
Original file line number Diff line number Diff line change
@@ -1,18 +1,90 @@
@page "/HazardHunts/{id}"
@page "/HazardHunts/new"
@attribute [Authorize(Roles = "admin")]

@using TinyMCE.Blazor
@using System.IO;
@using System.Linq;

@inject IRepository repository
@inject IJSRuntime JS
@inject Microsoft.Extensions.Configuration.IConfiguration configuration
@inject ClientImageService clientImages

@{
var tinyMCEApiKey = configuration["TinyMCEApiKey"];
}

@if(Hazard == null)
{
<p><em>Loading...</em></p>
}
else
{
<h3>Details</h3>
<EditForm Model="@Hazard">
<div class="form-group">
<label for="name">Hazard Name</label>
<input type="text" class="form-control" name="name" @bind="@Hazard.Name">
</div>
<div class="form-group">
<label for="description">Short Description:</label>
<textarea class="form-control" name="description" @bind="@Hazard.Description" rows="5"></textarea>
</div>
<div class="form-group">
<label for="iconUrl">Icon Url</label>

<InputSelect id="iconUrl" class="form-control" @bind-Value="Hazard.IconUrl">
@foreach(var image in clientImages.Images)
{
<option value="@image.RelativePath">@image.RelativePath</option>
}
</InputSelect>
<img src="@clientImages.ToAbsolutePath(Hazard.IconUrl)"/>

</div>
<div class="form-group">
<label for="mediaUrl">Media Url</label>
<InputSelect id="mediaUrl" class="form-control" @bind-Value="Hazard.MediaUrl">
@foreach(var image in clientImages.Images)
{
<option value="@image.RelativePath">@image.RelativePath</option>
}
</InputSelect>
<img src="@clientImages.ToAbsolutePath(Hazard.MediaUrl)"/>
</div>

<div class="form-group">
<label for="beforeSafetyDetails">Before Safety Details</label>
<Editor Id="beforeSafetyDetails" Conf="@EditorConfig" ApiKey="@tinyMCEApiKey" @bind-Value="@Hazard.BeforeSafetyDetails" />
</div>

<div class="form-group">
<label for="duringSafetyDetails">During Safety Details</label>
<Editor Id="duringSafetyDetails" Conf="@EditorConfig" ApiKey="@tinyMCEApiKey" @bind-Value="@Hazard.DuringSafetyDetails" />
</div>

<div class="form-group">
<label for="afterSafetyDetails">After Safety Details</label>
<Editor Id="afterSafetyDetails" Conf="@EditorConfig" ApiKey="@tinyMCEApiKey" @bind-Value="@Hazard.AfterSafetyDetails" />
</div>

<h3>Details</h3>
Hazard Name:
<input type="text" @bind="@Hazard.Name" />
<br />
Short Description:
<input type="text" @bind="@Hazard.Description" />
<span class="btn btn-secondary float-right" style="cursor: pointer" @onclick="@Save">Save</span>

<div class="form-group">
<label for="externalLinks">External Links (One link per line)</label>
<textarea rows="6" class="form-control" name="externalLinks" @bind="@ExternalLinks"></textarea>
</div>

<button type="button" class="btn btn-primary" @onclick="@Save">Submit</button>
</EditForm>
}

@code {
public Dictionary<string, object> EditorConfig = new Dictionary<string, object>
{
{ "plugins", "image" },
{ "toolbar", "image" },
};

[Parameter]
public string Id { get; set; }
Expand All @@ -22,19 +94,47 @@ Short Description:

private HazardHunt Hazard { get; set; }

private string ExternalLinks
{
get
{
return string.Join(Environment.NewLine, Hazard?.ExternalLinks ?? new string[0]);
}
set
{
var links = value.Split(new string[] { "\n", Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()).Where(s => !string.IsNullOrEmpty(s));
Hazard.ExternalLinks = links.ToArray();
}
}


protected override async Task OnInitializedAsync()
{
Hazard = await repository.GetHazardHuntById(Id);
if (string.IsNullOrEmpty(Id))
{
Hazard = new HazardHunt();
}
else
{
Hazard = await repository.GetHazardHuntById(Id);
}
EditorConfig["image_list"] = clientImages.Images.Select(i => new { title = i.RelativePath, value = i.AbsolutePath }).ToArray();
}



public async Task Save()
{
await repository.SaveHazardHunt(Hazard);
await OnSave.InvokeAsync(Hazard);
if (string.IsNullOrEmpty(Hazard.Id))
{
Hazard = await repository.CreateHazardHunt(Hazard);
}
else
{
Hazard = await repository.SaveHazardHunt(Hazard);
}

//await OnSave.InvokeAsync(Hazard);

await JS.InvokeVoidAsync("alert", new object[] { "Hazard Hunt Saved" });
await JS.InvokeVoidAsync("alert", new object[] { "Hazard Info Saved" });

}
}
3 changes: 1 addition & 2 deletions admin/TwoWeeksReady.Admin/Pages/HazardHunts/List.razor
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
@inject IRepository Repository
<h1>Administer Hazard Hunt for Two Weeks Ready</h1>

<h3>Current Hazards Defined:</h3>

@if (_HazardHunts != null && _HazardHunts.Any())
{

Expand Down Expand Up @@ -35,6 +33,7 @@
else
{
<p>No Hazards defined.</p>
<a class="btn btn-primary" href="/HazardHunts/new">Add New Hazard</a>
}

@code {
Expand Down
4 changes: 2 additions & 2 deletions admin/TwoWeeksReady.Admin/Pages/HazardInfos/Details.razor
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,12 @@ else
</div>

<div class="form-group">
<label for="duringSafetyDetails">DuringSafety Details</label>
<label for="duringSafetyDetails">During Safety Details</label>
<Editor Id="duringSafetyDetails" Conf="@EditorConfig" ApiKey="@tinyMCEApiKey" @bind-Value="@Hazard.DuringSafetyDetails" />
</div>

<div class="form-group">
<label for="afterSafetyDetails">Before Safety Details</label>
<label for="afterSafetyDetails">After Safety Details</label>
<Editor Id="afterSafetyDetails" Conf="@EditorConfig" ApiKey="@tinyMCEApiKey" @bind-Value="@Hazard.AfterSafetyDetails" />
</div>

Expand Down