forked from AcaMate/AcaMate_Web
115 lines
4.3 KiB
C#
115 lines
4.3 KiB
C#
using Front.Program.Models;
|
|
using Front.Program.Services;
|
|
using Front.Program.ViewModels;
|
|
using Microsoft.AspNetCore.Components;
|
|
using Microsoft.AspNetCore.Components.Routing;
|
|
|
|
namespace Front.Program.Views.Academy;
|
|
|
|
public partial class AcademyIntro : ComponentBase, IDisposable
|
|
{
|
|
[Inject] NavigationManager Navigation { get; set; } = default!;
|
|
[Inject] StorageService StorageService { get; set; } = default!;
|
|
[Inject] QueryParamService QueryParamService { get; set; } = default!;
|
|
[Inject] UserStateService UserStateService { get; set; } = default!;
|
|
[Inject] LoadingService LoadingService { get; set; } = default!;
|
|
|
|
private bool _isProcessing = false;
|
|
|
|
protected override async void OnInitialized()
|
|
{
|
|
try
|
|
{
|
|
Navigation.LocationChanged += HandleLocationChanged;
|
|
HandleLocationChanged(this, new LocationChangedEventArgs(Navigation.Uri, false));
|
|
if (!UserStateService.isFirstCheck)
|
|
{
|
|
LoadingService.ShowLoading();
|
|
await UserStateService.GetUserDataAsync();
|
|
var aca = await UserStateService.GetAcademy();
|
|
|
|
if (aca.success)
|
|
{
|
|
if (aca.simpleAcademy.Count > 0)
|
|
{
|
|
UserStateService.academyItems = aca.simpleAcademy.ToArray();
|
|
Console.WriteLine($"academyItems: {UserStateService.academyItems.Length}개");
|
|
}
|
|
|
|
Console.WriteLine("아카데미 정보가 없습니다. 로그인 상태를 확인해주세요.");
|
|
}
|
|
|
|
Console.WriteLine($"academy: {string.Join(", ", UserStateService.academyItems.Select(a => a.name))}");
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
LoadingService.HideLoading();
|
|
await InvokeAsync(StateHasChanged);
|
|
}
|
|
// 유저 값 가져오면서 같이 academy 정보도 가져와야지
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
Navigation.LocationChanged -= HandleLocationChanged;
|
|
}
|
|
|
|
private async void HandleLocationChanged(object? sender, LocationChangedEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
// 다중 실행 방지
|
|
if (_isProcessing) return;
|
|
_isProcessing = true;
|
|
|
|
var uri = Navigation.ToAbsoluteUri(Navigation.Uri);
|
|
Console.WriteLine($"리다이렉트된 URI: {uri}");
|
|
|
|
// 쿼리 파라미터가 있는 경우에만 처리
|
|
if (!string.IsNullOrEmpty(uri.Query))
|
|
{
|
|
LoadingService.ShowLoading();
|
|
var queryParam = QueryParamService.ParseQueryParam(uri);
|
|
await QueryParamService.AuthCheck(queryParam, StorageService);
|
|
|
|
// 유저 정보 확인하는거 (로그인 했으니 값 가져와야지)
|
|
await UserStateService.GetUserDataAsync();
|
|
var aca = await UserStateService.GetAcademy();
|
|
|
|
if (aca.success)
|
|
{
|
|
if (aca.simpleAcademy.Count > 0)
|
|
{
|
|
UserStateService.academyItems = aca.simpleAcademy.ToArray();
|
|
|
|
Console.WriteLine($"academyItems: {UserStateService.academyItems.Length}개");
|
|
}
|
|
Console.WriteLine("아카데미 정보가 없습니다. 로그인 상태를 확인해주세요.");
|
|
}
|
|
Console.WriteLine($"academy: {string.Join(", ", UserStateService.academyItems.Select(a => a.name))}");
|
|
|
|
// // 쿼리 파라미터를 제거한 기본 URI로 리다이렉트
|
|
var baseUri = uri.GetLeftPart(UriPartial.Path);
|
|
Console.WriteLine($"리다이렉트할 URI: {baseUri}");
|
|
// await InvokeAsync(StateHasChanged); // StateHasChanged를 호출하여 UI 업데이트
|
|
Navigation.NavigateTo(baseUri, forceLoad: false);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Error in HandleLocationChanged: {ex.Message}");
|
|
}
|
|
finally
|
|
{
|
|
LoadingService.HideLoading();
|
|
_isProcessing = false;
|
|
|
|
}
|
|
}
|
|
|
|
protected void OnClickLogin()
|
|
{
|
|
Navigation.NavigateTo("/am/auth");
|
|
}
|
|
} |