forked from AcaMate/AcaMate_Web
92 lines
3.8 KiB
C#
92 lines
3.8 KiB
C#
using Microsoft.AspNetCore.Components;
|
|
using Microsoft.AspNetCore.Components.Routing;
|
|
|
|
using Front.Program.Views.Project;
|
|
using Front.Program.Views.Academy;
|
|
using Front.Program.Services;
|
|
using Front.Program.ViewModels;
|
|
|
|
namespace Front.Program.Layout;
|
|
|
|
public partial class MainLayout : LayoutComponentBase, IDisposable
|
|
{
|
|
[Inject] NavigationManager Navigation { get; set; } = default!;
|
|
[Inject] LoadingService LoadingService { get; set; } = default!;
|
|
[Inject] UserStateService UserStateService { get; set; } = default!;
|
|
|
|
|
|
private bool _isLoading = false;
|
|
|
|
// 경로의 시작 부분
|
|
// protected bool isHidePrjTop => Navigation.ToBaseRelativePath(Navigation.Uri).StartsWith("auth", StringComparison.OrdinalIgnoreCase);
|
|
protected bool isIntro => Navigation.ToBaseRelativePath(Navigation.Uri).StartsWith("am/intro", StringComparison.OrdinalIgnoreCase)
|
|
|| Navigation.ToBaseRelativePath(Navigation.Uri).StartsWith("/", StringComparison.OrdinalIgnoreCase);
|
|
|
|
// 경로의 끝 부분
|
|
protected bool isHidePrjTop => Navigation.ToBaseRelativePath(Navigation.Uri).EndsWith("auth", StringComparison.OrdinalIgnoreCase);
|
|
protected bool isAcademy => Navigation.ToBaseRelativePath(Navigation.Uri).StartsWith("am", StringComparison.OrdinalIgnoreCase);
|
|
|
|
// 경로 일치
|
|
// protected bool isIntro => Navigation.ToBaseRelativePath(Navigation.Uri).Equals("am/intro", StringComparison.OrdinalIgnoreCase);
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
LoggerService.Write("MainLayout OnInitializedAsync 시작");
|
|
LoadingService.OnChange += StateHasChanged;
|
|
Navigation.LocationChanged += HandleLocationChanged;
|
|
HandleLocationChanged(this, new LocationChangedEventArgs(Navigation.Uri, false));
|
|
|
|
LoggerService.Write("MainLayout: UserStateService.GetUserDataAsync 호출 전");
|
|
await UserStateService.GetUserDataAsync();
|
|
LoggerService.Write($"MainLayout: UserStateService.isLogin 상태: {UserStateService.isLogin}");
|
|
|
|
// 학원 정보 로드 및 실패 시 처리
|
|
var academyResult = await UserStateService.GetAcademy();
|
|
LoadingService.ShowLoading();
|
|
if (academyResult.success)
|
|
{
|
|
if (academyResult.simpleAcademy != null && academyResult.simpleAcademy.Any())
|
|
{
|
|
UserStateService.academyItems = academyResult.simpleAcademy.ToArray();
|
|
LoggerService.Write($"MainLayout: academyItems 로드 성공. {UserStateService.academyItems.Length}개");
|
|
}
|
|
else
|
|
{
|
|
LoggerService.Write("MainLayout: 로드된 학원 정보가 없습니다.");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
LoggerService.Write("MainLayout: 서버 세션에서 학원 정보 불러오기 실패. 사용자 상태 초기화.");
|
|
await UserStateService.ClearUserStateAsnyc();
|
|
}
|
|
|
|
if (isAcademy)
|
|
{
|
|
if(!UserStateService.isLogin || UserStateService.UserData == null)
|
|
{
|
|
LoggerService.Write("로그인 상태가 아닙니다. 초기로 돌립니다.");
|
|
if (isIntro) { }
|
|
else
|
|
{
|
|
await UserStateService.ClearUserStateAsnyc();
|
|
LoadingService.HideLoading();
|
|
Navigation.NavigateTo("/");
|
|
}
|
|
}
|
|
LoadingService.HideLoading();
|
|
}
|
|
}
|
|
|
|
// 페이지의 URL이 변경될 때마다 실행되는 이벤트 핸들러
|
|
private async void HandleLocationChanged(object? sender, LocationChangedEventArgs e)
|
|
{
|
|
LoadingService.HideNavigationLoading();
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
LoadingService.OnChange -= StateHasChanged;
|
|
Navigation.LocationChanged -= HandleLocationChanged;
|
|
}
|
|
} |