78 lines
2.6 KiB
Plaintext
78 lines
2.6 KiB
Plaintext
@page "/Account/Manage"
|
|
|
|
@using System.ComponentModel.DataAnnotations
|
|
@using Microsoft.AspNetCore.Identity
|
|
@using OpenArchival.Blazor.Data
|
|
|
|
@inject UserManager<ApplicationUser> UserManager
|
|
@inject SignInManager<ApplicationUser> SignInManager
|
|
@inject IdentityUserAccessor UserAccessor
|
|
@inject IdentityRedirectManager RedirectManager
|
|
|
|
<PageTitle>Profile</PageTitle>
|
|
|
|
<MudText Typo="Typo.h6" GutterBottom="true">Profile</MudText>
|
|
|
|
<StatusMessage />
|
|
|
|
<EditForm Model="Input" FormName="profile" OnValidSubmit="OnValidSubmitAsync" method="post">
|
|
<DataAnnotationsValidator />
|
|
|
|
<MudGrid>
|
|
<MudItem md="12">
|
|
<MudStaticTextField Value="@username" Label="Username" Disabled="true" Placeholder="Please choose your username." />
|
|
</MudItem>
|
|
<MudItem md="12">
|
|
<MudStaticTextField For="@(() => Input.PhoneNumber)" @bind-Value="Input.PhoneNumber"
|
|
Label="Phone Number" HelperText="Please enter your phone number."
|
|
UserAttributes="@(new() { { "autocomplete", "tel-national" } } )" />
|
|
</MudItem>
|
|
<MudItem md="12">
|
|
<MudStaticButton Variant="Variant.Filled" Color="Color.Primary" FullWidth="true" FormAction="FormAction.Submit">Save</MudStaticButton>
|
|
</MudItem>
|
|
</MudGrid>
|
|
</EditForm>
|
|
|
|
@code {
|
|
private ApplicationUser user = default!;
|
|
private string? username;
|
|
private string? phoneNumber;
|
|
|
|
[CascadingParameter]
|
|
private HttpContext HttpContext { get; set; } = default!;
|
|
|
|
[SupplyParameterFromForm]
|
|
private InputModel Input { get; set; } = new();
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
user = await UserAccessor.GetRequiredUserAsync(HttpContext);
|
|
username = await UserManager.GetUserNameAsync(user);
|
|
phoneNumber = await UserManager.GetPhoneNumberAsync(user);
|
|
|
|
Input.PhoneNumber ??= phoneNumber;
|
|
}
|
|
|
|
private async Task OnValidSubmitAsync()
|
|
{
|
|
if (Input.PhoneNumber != phoneNumber)
|
|
{
|
|
var setPhoneResult = await UserManager.SetPhoneNumberAsync(user, Input.PhoneNumber);
|
|
if (!setPhoneResult.Succeeded)
|
|
{
|
|
RedirectManager.RedirectToCurrentPageWithStatus("Error: Failed to set phone number.", HttpContext);
|
|
}
|
|
}
|
|
|
|
await SignInManager.RefreshSignInAsync(user);
|
|
RedirectManager.RedirectToCurrentPageWithStatus("Your profile has been updated", HttpContext);
|
|
}
|
|
|
|
private sealed class InputModel
|
|
{
|
|
[Phone]
|
|
[Display(Name = "Phone number")]
|
|
public string? PhoneNumber { get; set; }
|
|
}
|
|
}
|