100 lines
3.7 KiB
Plaintext
100 lines
3.7 KiB
Plaintext
@page "/profile"
|
||
@using Microsoft.AspNetCore.Authorization
|
||
@using PlaylistShared.Shared.DTO
|
||
@attribute [Authorize]
|
||
@inject HttpClient Http
|
||
@inject ISnackbar Snackbar
|
||
|
||
<MudContainer MaxWidth="MaxWidth.Small" Class="mt-8">
|
||
<MudCard>
|
||
<MudCardHeader>
|
||
<CardHeaderContent>
|
||
<MudText Typo="Typo.h5">Личный кабинет</MudText>
|
||
</CardHeaderContent>
|
||
</MudCardHeader>
|
||
<MudCardContent>
|
||
<div style="display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 8px; margin-bottom: 16px;">
|
||
<MudText Typo="Typo.body2">
|
||
Здесь вы можете указать токен доступа к Яндекс.Музыке.
|
||
</MudText>
|
||
<MudIconButton Icon="@Icons.Material.Filled.HelpOutline"
|
||
Color="Color.Info"
|
||
OnClick="() => _instructionDrawerOpen = true"
|
||
Title="Как получить токен?" />
|
||
</div>
|
||
|
||
<MudTextField @bind-Value="_token" Label="Токен Яндекс.Музыки" Variant="Variant.Outlined" FullWidth="true" />
|
||
|
||
<MudButton Variant="Variant.Filled" Color="Color.Primary" OnClick="SaveToken" Class="mt-4" FullWidth="true">
|
||
Сохранить токен
|
||
</MudButton>
|
||
|
||
<MudText Class="mt-4" Typo="Typo.body2">Статус: @_statusText</MudText>
|
||
</MudCardContent>
|
||
</MudCard>
|
||
</MudContainer>
|
||
|
||
<!-- Выдвижная панель с инструкцией -->
|
||
<MudDrawer @bind-Open="_instructionDrawerOpen"
|
||
Anchor="Anchor.Right"
|
||
Variant="DrawerVariant.Temporary"
|
||
Elevation="3"
|
||
Width="500px"
|
||
MiniWidth="0px">
|
||
<MudDrawerHeader>
|
||
<MudText Typo="Typo.h6">Как получить токен Яндекс.Музыки</MudText>
|
||
</MudDrawerHeader>
|
||
<MudDivider />
|
||
<YandexTokenInstructions />
|
||
</MudDrawer>
|
||
|
||
@code {
|
||
private string _token = "";
|
||
private string _statusText = "Загрузка...";
|
||
private bool _instructionDrawerOpen = false;
|
||
|
||
protected override async Task OnInitializedAsync()
|
||
{
|
||
await LoadStatus();
|
||
}
|
||
|
||
private async Task LoadStatus()
|
||
{
|
||
try
|
||
{
|
||
var response = await Http.GetFromJsonAsync<ApiResponse<YandexTokenStatus>>("/api/yandextoken/status");
|
||
if (response?.Success == true)
|
||
{
|
||
_statusText = response.Data.HasToken
|
||
? $"Токен установлен{(response.Data.IsValid ? "" : " (просрочен)")}"
|
||
: "Токен не установлен";
|
||
}
|
||
}
|
||
catch { _statusText = "Не удалось загрузить статус"; }
|
||
}
|
||
|
||
private async Task SaveToken()
|
||
{
|
||
if (string.IsNullOrWhiteSpace(_token))
|
||
{
|
||
Snackbar.Add("Введите токен", Severity.Warning);
|
||
return;
|
||
}
|
||
|
||
var request = new SetYandexTokenRequest { Token = _token };
|
||
var response = await Http.PostAsJsonAsync("/api/yandextoken/set", request);
|
||
if (response.IsSuccessStatusCode)
|
||
{
|
||
Snackbar.Add("Токен сохранён", Severity.Success);
|
||
await LoadStatus();
|
||
_token = "";
|
||
}
|
||
else
|
||
{
|
||
Snackbar.Add("Ошибка сохранения токена", Severity.Error);
|
||
}
|
||
}
|
||
|
||
public class YandexTokenStatus { public bool HasToken { get; set; } public bool IsValid { get; set; } }
|
||
public class SetYandexTokenRequest { public string Token { get; set; } }
|
||
} |