WIP on profile page
This commit is contained in:
		
							parent
							
								
									786f79a52c
								
							
						
					
					
						commit
						47e32fd475
					
				| @ -25,7 +25,7 @@ else | ||||
| @code { | ||||
| 
 | ||||
|     bool retrievingProfile = true; | ||||
|     Profile? profile = null; | ||||
|     JobsJobsJobs.Shared.Profile? profile = null; | ||||
|     string? errorMessage = null; | ||||
| 
 | ||||
|     protected override async Task OnInitializedAsync() | ||||
|  | ||||
							
								
								
									
										81
									
								
								src/JobsJobsJobs/Client/Pages/Citizen/Profile.razor
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								src/JobsJobsJobs/Client/Pages/Citizen/Profile.razor
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,81 @@ | ||||
| @page "/citizen/profile" | ||||
| @using JobsJobsJobs.Client.ViewModels | ||||
| @inject HttpClient http | ||||
| @inject AppState state | ||||
| 
 | ||||
| <h3>Employment Profile</h3> | ||||
| 
 | ||||
| @if (errorMessage != "") | ||||
| { | ||||
|   <p>@errorMessage</p> | ||||
| } | ||||
| else if (profileForm != null) | ||||
| { | ||||
| <EditForm Model="@profileForm" OnValidSubmit="@SaveProfile"> | ||||
|   <DataAnnotationsValidator /> | ||||
|   <ValidationSummary /> | ||||
|   <label> | ||||
|     <InputCheckbox @bind-Value="@profileForm.IsSeekingEmployment" /> | ||||
|     I am currently seeking employment | ||||
|   </label> | ||||
|   <label> | ||||
|     <InputCheckbox @bind-Value="@profileForm.IsPublic" /> | ||||
|     Allow my profile to be searched publicly (outside NA Social) | ||||
|   </label><br> | ||||
|   <label> | ||||
|     Continent | ||||
|     <InputSelect @bind-Value="@profileForm.ContinentId" /> | ||||
|   </label> | ||||
|   <label> | ||||
|     Region | ||||
|     <InputText @bind-Value="@profileForm.Region" /> | ||||
|   </label><br> | ||||
|   <label> | ||||
|     <InputCheckbox @bind-Value="@profileForm.RemoteWork" /> | ||||
|     I am looking for remote work | ||||
|   </label> | ||||
|   <label> | ||||
|     <InputCheckbox @bind-Value="@profileForm.FullTime" /> | ||||
|     I am looking for full-time work | ||||
|   </label><br> | ||||
|   <label> | ||||
|     Professional Biography | ||||
|     <InputTextArea @bind-Value="@profileForm.Biography" /> | ||||
|   </label><br> | ||||
|   <label> | ||||
|     Experience | ||||
|     <InputTextArea @bind-Value="@profileForm.Experience" /> | ||||
|   </label> | ||||
|   <p> | ||||
|     <button type="submit">Save</button> | ||||
|   </p> | ||||
| </EditForm> | ||||
| } | ||||
| 
 | ||||
| @code { | ||||
| 
 | ||||
|     public JobsJobsJobs.Shared.Profile? profile = null; | ||||
| 
 | ||||
|     public ProfileForm? profileForm = null; | ||||
| 
 | ||||
|     public string errorMessage = ""; | ||||
| 
 | ||||
|     protected override async Task OnInitializedAsync() | ||||
|     { | ||||
|       var result = await ServerApi.RetrieveProfile(http, state); | ||||
|       if (result.IsOk) | ||||
|       { | ||||
|         profile = result.Ok; | ||||
|         profileForm = (profile == null) ? new ProfileForm() : ProfileForm.FromProfile(profile); | ||||
|       } | ||||
|       else | ||||
|       { | ||||
|         errorMessage = result.Error; | ||||
|       } | ||||
|     } | ||||
| 
 | ||||
|     public void SaveProfile() | ||||
|     { | ||||
|       // TODO: save profile | ||||
|     } | ||||
| } | ||||
							
								
								
									
										70
									
								
								src/JobsJobsJobs/Client/ViewModels/ProfileForm.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								src/JobsJobsJobs/Client/ViewModels/ProfileForm.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,70 @@ | ||||
| using JobsJobsJobs.Shared; | ||||
| using System.ComponentModel.DataAnnotations; | ||||
| 
 | ||||
| namespace JobsJobsJobs.Client.ViewModels | ||||
| { | ||||
|     /// <summary> | ||||
|     /// The data required to update a profile | ||||
|     /// </summary> | ||||
|     public class ProfileForm | ||||
|     { | ||||
|         /// <summary> | ||||
|         /// Whether the citizen to whom this profile belongs is actively seeking employment | ||||
|         /// </summary> | ||||
|         public bool IsSeekingEmployment { get; set; } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Whether this profile should appear in the public search | ||||
|         /// </summary> | ||||
|         public bool IsPublic { get; set; } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// The ID of the continent on which the citizen is located | ||||
|         /// </summary> | ||||
|         [Required] | ||||
|         [StringLength(12, MinimumLength = 1)] | ||||
|         [Display(Name = "Continent")] | ||||
|         public string ContinentId { get; set; } = ""; | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// The area within that continent where the citizen is located | ||||
|         /// </summary> | ||||
|         [Required] | ||||
|         [StringLength(255)] | ||||
|         public string Region { get; set; } = ""; | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// If the citizen is available for remote work | ||||
|         /// </summary> | ||||
|         public bool RemoteWork { get; set; } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// If the citizen is seeking full-time employment | ||||
|         /// </summary> | ||||
|         public bool FullTime { get; set; } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// The user's professional biography | ||||
|         /// </summary> | ||||
|         [Required] | ||||
|         public string Biography { get; set; } = ""; | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// The user's past experience | ||||
|         /// </summary> | ||||
|         public string Experience { get; set; } = ""; | ||||
| 
 | ||||
|         public static ProfileForm FromProfile(Profile profile) => | ||||
|             new ProfileForm | ||||
|             { | ||||
|                 IsSeekingEmployment = profile.SeekingEmployment, | ||||
|                 IsPublic = profile.IsPublic, | ||||
|                 ContinentId = profile.ContinentId.ToString(), | ||||
|                 Region = profile.Region, | ||||
|                 RemoteWork = profile.RemoteWork, | ||||
|                 FullTime = profile.FullTime, | ||||
|                 Biography = profile.Biography.Text, | ||||
|                 Experience = profile.Experience?.Text ?? "" | ||||
|             }; | ||||
|     } | ||||
| } | ||||
| @ -20,5 +20,7 @@ namespace JobsJobsJobs.Shared | ||||
|         /// <returns>The continent ID</returns> | ||||
|         /// <exception cref="System.FormatException">If the string is not a valid continent ID</exception> | ||||
|         public static ContinentId Parse(string id) => new ContinentId(ShortId.Parse(id)); | ||||
| 
 | ||||
|         public override string ToString() => Id.ToString(); | ||||
|     } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user