3900-MyRecipes-backup / Client / Pages / EditPublicProfile.razor
EditPublicProfile.razor
Raw
@page "/EditPublicProfile"
@using Microsoft.AspNetCore.Authorization;
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication;
@using MyRecipes2.Shared;
@using MyRecipes2.Client.Services;
@inject HttpClient Http;
@inject AuthenticationStateProvider AuthenticationStateProvider;
@inject NavigationManager NavManager;
@inject UtilityService UtilityService;

@if (userDetails != null)
{
    <div>
        <h1>Profile</h1>
        <h2>@userDetails.Username</h2>
    </div>
}

<div>
    <ImageEditor @ref="imageEditor"></ImageEditor>
</div>

@if (userDetails != null)
{
    <div class="form-group">
        <textarea @bind="bio" class="form-control" rows="5" style="resize: none;"></textarea>
    </div>
}

<div>
    <button class="btn btn-primary mb-2" @onclick="ClickUpdate">Save Changes</button>
</div>


@code {
    private UserDto userDetails;

    private string bio { get; set; }

    private string UserId;

    ImageEditor imageEditor { get; set; }

    protected override async Task OnInitializedAsync()
    {
        try
        {
            UserId = await UtilityService.GetUserId();
            // Get user details
            userDetails = await Http.GetFromJsonAsync<UserDto>($"PublicProfile/Data/{UserId}");
            bio = userDetails.Bio;
            imageEditor.SetImageId(userDetails.ProfileImageId);
            StateHasChanged();

        }
        catch (AccessTokenNotAvailableException exception)
        {
            exception.Redirect();
        }
    }


    private void Redirect()
    {
        NavManager.NavigateTo($"/");
    }

    protected async void ClickUpdate()
    {
        UserDto request = new UserDto();
        request.ProfileImageId = imageEditor.ImageId;
        request.Bio = bio;

        await Http.PutAsJsonAsync<UserDto>($"PublicProfile/Edit/{UserId}", request);

        NavManager.NavigateTo($"PublicProfile/{UserId}");
    }
    }