Изменение инструкции получения токена яндекса

This commit is contained in:
FrigaT
2026-04-17 16:48:46 +03:00
parent ab56c34646
commit 6b399f7fb7
4 changed files with 147 additions and 154 deletions

View File

@@ -1,65 +1,52 @@
@page "/profile"
<PageTitle>Профиль - Playlist Share</PageTitle>
@using Microsoft.AspNetCore.Authorization
@using PlaylistShared.Pwa.Components.Profile
@using PlaylistShared.Shared.DTO
@attribute [Authorize]
@inject HttpClient Http
@inject ISnackbar Snackbar
@inject IDialogService DialogService
@using PlaylistShared.Pwa.Components.Profile
@using PlaylistShared.Shared.Profile
<MudContainer MaxWidth="MaxWidth.Small" Class="mt-8">
<MudCard>
<MudCardHeader>
<CardHeaderContent>
<MudText Typo="Typo.h5">Личный кабинет</MudText>
</CardHeaderContent>
</MudCardHeader>
<MudCardContent>
<MudStack Row Justify="Justify.SpaceBetween" AlignItems="AlignItems.Center" Class="mb-4">
<MudText Typo="Typo.body2">
Здесь вы можете указать токен доступа к Яндекс.Музыке.
</MudText>
<MudIconButton Icon="@Icons.Material.Filled.HelpOutline"
Color="Color.Info"
OnClick="() => _instructionDrawerOpen = true"
Title="Как получить токен?" />
</MudStack>
<MudText Typo="Typo.h4" Class="mb-6">Профиль</MudText>
<MudTextField @bind-Value="_token" Label="Токен Яндекс.Музыки" Variant="Variant.Outlined" FullWidth="true" />
<MudStack Spacing="4">
@*
<!-- Секция почты -->
<MudCard>
<MudCardContent>
<MudText Typo="Typo.h6" GutterBottom="true">Данные аккаунта</MudText>
<MudTextField @bind-Value="_email" Label="Электронная почта" ReadOnly="true" Variant="Variant.Outlined" Margin="Margin.Dense" />
<MudButton Variant="Variant.Text" Color="Color.Primary" Class="mt-2" Disabled="true">Сменить почту</MudButton>
</MudCardContent>
</MudCard>
*@
<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>
<!-- Секция Яндекс.Музыки -->
<MudCard>
<MudCardContent>
<MudStack Row Justify="Justify.SpaceBetween" AlignItems="AlignItems.Center">
<MudStack Spacing="0">
<MudText Typo="Typo.h6">Яндекс.Музыка</MudText>
<MudText Typo="Typo.body2" Color="@(_hasToken? Color.Success: Color.Error)">
@_statusText
</MudText>
</MudStack>
<MudButton Variant="Variant.Outlined"
Color="Color.Primary"
OnClick="OpenTokenDialog">
@(_hasToken ? "Переподключить" : "Установить")
</MudButton>
</MudStack>
</MudCardContent>
</MudCard>
</MudStack>
</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 _email = "user@example.com"; // Загрузите из стейта или API
private string _statusText = "Загрузка...";
private bool _instructionDrawerOpen = false;
private bool _hasToken;
protected override async Task OnInitializedAsync()
{
await LoadStatus();
}
protected override async Task OnInitializedAsync() => await LoadStatus();
private async Task LoadStatus()
{
@@ -68,36 +55,19 @@
var response = await Http.GetFromJsonAsync<ApiResponse<YandexTokenStatus>>("/api/yandextoken/status");
if (response?.Success == true)
{
_statusText = response.Data.HasToken
? $"Токен установлен{(response.Data.IsValid ? "" : " (просрочен)")}"
: "Токен не установлен";
_hasToken = response.Data.HasToken;
_statusText = _hasToken ? "Аккаунт подключен" : "Аккаунт не подключен";
}
}
catch { _statusText = "Не удалось загрузить статус"; }
catch { _statusText = "Ошибка загрузки статуса"; }
}
private async Task SaveToken()
private async Task OpenTokenDialog()
{
if (string.IsNullOrWhiteSpace(_token))
{
Snackbar.Add("Введите токен", Severity.Warning);
return;
}
var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true };
var dialog = await DialogService.ShowAsync<YandexTokenDialog>("", options);
var result = await dialog.Result;
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);
}
if (!result.Canceled) await LoadStatus();
}
public class YandexTokenStatus { public bool HasToken { get; set; } public bool IsValid { get; set; } }
public class SetYandexTokenRequest { public string Token { get; set; } }
}
}