Help wanted #23
|
@ -12,6 +12,7 @@ EndProject
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{50B51580-9F09-41E2-BC78-DAD38C37B583}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{50B51580-9F09-41E2-BC78-DAD38C37B583}"
|
||||||
ProjectSection(SolutionItems) = preProject
|
ProjectSection(SolutionItems) = preProject
|
||||||
.dockerignore = .dockerignore
|
.dockerignore = .dockerignore
|
||||||
|
..\.gitignore = ..\.gitignore
|
||||||
database\12-add-real-name.sql = database\12-add-real-name.sql
|
database\12-add-real-name.sql = database\12-add-real-name.sql
|
||||||
database\16-job-listing.sql = database\16-job-listing.sql
|
database\16-job-listing.sql = database\16-job-listing.sql
|
||||||
JobsJobsJobs\Directory.Build.props = JobsJobsJobs\Directory.Build.props
|
JobsJobsJobs\Directory.Build.props = JobsJobsJobs\Directory.Build.props
|
||||||
|
|
|
@ -6,20 +6,36 @@
|
||||||
<PageTitle Title="My Job Listings" />
|
<PageTitle Title="My Job Listings" />
|
||||||
<h3>My Job Listings</h3>
|
<h3>My Job Listings</h3>
|
||||||
|
|
||||||
<ErrorList Errors=@ErrorMessages>
|
<Loading OnLoad=@OnLoad Message=@(new MarkupString("Loading job listings…"))>
|
||||||
@if (Loading)
|
<p>
|
||||||
|
<a class="btn" href="/listing/new/edit">Add a New Job Listing</a>
|
||||||
|
</p>
|
||||||
|
@if (Listings.Any())
|
||||||
{
|
{
|
||||||
<p>Loading job listings…</p>
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Action</th>
|
||||||
|
<th>Title</th>
|
||||||
|
<th>Created</th>
|
||||||
|
<th>Updated</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach (var listing in Listings)
|
||||||
|
{
|
||||||
|
<tr>
|
||||||
|
<td><a href="/listing/@listing.Id/edit">Edit</a></td>
|
||||||
|
<td>@listing.Title</td>
|
||||||
|
<td><FullDateTime TheDate=@listing.CreatedOn /></td>
|
||||||
|
<td><FullDateTime TheDate=@listing.UpdatedOn /></td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@if (Listings.Any())
|
<p><em>No job listings found</em></p>
|
||||||
{
|
|
||||||
<p>TODO: list them</p>
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
<p><em>No job listings found</em></p>
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</ErrorList>
|
</Loading>
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using JobsJobsJobs.Shared;
|
using JobsJobsJobs.Shared;
|
||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
@ -9,22 +8,16 @@ namespace JobsJobsJobs.Client.Pages.Listings
|
||||||
{
|
{
|
||||||
public partial class Mine : ComponentBase
|
public partial class Mine : ComponentBase
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// Whether the page is loading data
|
|
||||||
/// </summary>
|
|
||||||
private bool Loading { get; set; } = true;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Error messages encountered while searching for profiles
|
|
||||||
/// </summary>
|
|
||||||
private IList<string> ErrorMessages { get; } = new List<string>();
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The job listings entered by the current user
|
/// The job listings entered by the current user
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private IEnumerable<Listing> Listings { get; set; } = Enumerable.Empty<Listing>();
|
private IEnumerable<Listing> Listings { get; set; } = Enumerable.Empty<Listing>();
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
/// <summary>
|
||||||
|
/// Load the user's job listings
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="errors">Error collection for possible problems</param>
|
||||||
|
private async Task OnLoad(ICollection<string> errors)
|
||||||
{
|
{
|
||||||
var listings = await ServerApi.RetrieveMany<Listing>(http, "listing/mine");
|
var listings = await ServerApi.RetrieveMany<Listing>(http, "listing/mine");
|
||||||
|
|
||||||
|
@ -34,7 +27,7 @@ namespace JobsJobsJobs.Client.Pages.Listings
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ErrorMessages.Add(listings.Error);
|
errors.Add(listings.Error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ else
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public IList<string> Errors { get; set; } = default!;
|
public ICollection<string> Errors { get; set; } = default!;
|
||||||
|
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public RenderFragment ChildContent { get; set; } = default!;
|
public RenderFragment ChildContent { get; set; } = default!;
|
||||||
|
|
|
@ -2,17 +2,9 @@
|
||||||
{
|
{
|
||||||
<p>@Message</p>
|
<p>@Message</p>
|
||||||
}
|
}
|
||||||
else if (ErrorMessages.Count > 0)
|
else
|
||||||
{
|
{
|
||||||
<p>The following error@(ErrorMessages.Count == 1 ? "" : "s") occurred:</p>
|
<ErrorList Errors=@ErrorMessages>
|
||||||
<ul>
|
@ChildContent
|
||||||
@foreach (var msg in ErrorMessages)
|
</ErrorList>
|
||||||
{
|
|
||||||
<li><pre>@msg</pre></li>
|
|
||||||
}
|
|
||||||
</ul>
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
@ChildContent
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,12 +38,22 @@
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item px-3">
|
<li class="nav-item px-3">
|
||||||
<NavLink class="nav-link" href="/citizen/profile">
|
<NavLink class="nav-link" href="/citizen/profile">
|
||||||
<span class="oi oi-pencil" aria-hidden="true"></span> Edit Your Profile
|
<span class="oi oi-pencil" aria-hidden="true"></span> My Profile
|
||||||
|
</NavLink>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item separator px-3">
|
||||||
|
<NavLink class="nav-link" href="/profile/search">
|
||||||
|
<span class="oi oi-spreadsheet" aria-hidden="true"></span> View Profiles
|
||||||
</NavLink>
|
</NavLink>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item px-3">
|
<li class="nav-item px-3">
|
||||||
<NavLink class="nav-link" href="/profile/search">
|
<NavLink class="nav-link" href="/listings/mine">
|
||||||
<span class="oi oi-spreadsheet" aria-hidden="true"></span> View Profiles
|
<span class="oi oi-signpost" aria-hidden="true"></span> My Job Listings
|
||||||
|
</NavLink>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item separator px-3">
|
||||||
|
<NavLink class="nav-link" href="/listings/search">
|
||||||
|
<span class="oi oi-excerpt" aria-hidden="true"></span> View Listings
|
||||||
</NavLink>
|
</NavLink>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item px-3">
|
<li class="nav-item px-3">
|
||||||
|
@ -53,7 +63,7 @@
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item px-3">
|
<li class="nav-item px-3">
|
||||||
<NavLink class="nav-link" href="/citizen/log-off">
|
<NavLink class="nav-link" href="/citizen/log-off">
|
||||||
<span class="oi oi-plus" aria-hidden="true"></span> Log Off
|
<span class="oi oi-account-logout" aria-hidden="true"></span> Log Off
|
||||||
</NavLink>
|
</NavLink>
|
||||||
</li>
|
</li>
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,6 +50,9 @@
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.nav-item.separator {
|
||||||
|
border-bottom: solid 1px white;
|
||||||
|
}
|
||||||
@media (min-width: 641px) {
|
@media (min-width: 641px) {
|
||||||
.navbar-toggler {
|
.navbar-toggler {
|
||||||
display: none;
|
display: none;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using NodaTime;
|
||||||
|
using System;
|
||||||
|
|
||||||
namespace JobsJobsJobs.Shared
|
namespace JobsJobsJobs.Shared
|
||||||
{
|
{
|
||||||
|
@ -8,15 +9,15 @@ namespace JobsJobsJobs.Shared
|
||||||
public record Listing(
|
public record Listing(
|
||||||
ListingId Id,
|
ListingId Id,
|
||||||
CitizenId CitizenId,
|
CitizenId CitizenId,
|
||||||
DateTime CreatedOn,
|
Instant CreatedOn,
|
||||||
string Title,
|
string Title,
|
||||||
ContinentId ContinentId,
|
ContinentId ContinentId,
|
||||||
string Region,
|
string Region,
|
||||||
bool RemoteWork,
|
bool RemoteWork,
|
||||||
bool IsExpired,
|
bool IsExpired,
|
||||||
DateTime UpdatedOn,
|
Instant UpdatedOn,
|
||||||
MarkdownString Text,
|
MarkdownString Text,
|
||||||
DateTime? NeededBy,
|
LocalDate? NeededBy,
|
||||||
bool? WasFilledHere)
|
bool? WasFilledHere)
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user