using Blazored.LocalStorage; using FrontOffice.Main.Utilities; using Microsoft.AspNetCore.Components; using Microsoft.JSInterop; using MudBlazor; namespace FrontOffice.Main.Shared; public partial class MainLayout { private const string TokenStorageKey = "auth:token"; private MudThemeProvider _mudThemeProvider; private bool _isDark; private bool _drawerOpen; private bool _isAuthenticated; private string? _email; [Inject] private ILocalStorageService LocalStorage { get; set; } = default!; private void ToggleTheme() => _isDark = !_isDark; private void ToggleDrawer() => _drawerOpen = !_drawerOpen; private async void Back() { await JSRuntime.InvokeVoidAsync("history.back"); } protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { await JSRuntime.InvokeVoidAsync("changeNavBgOnBodyScroll", "top", null, 1); await CheckAuthStatus(); StateHasChanged(); } } private async Task CheckAuthStatus() { var token = await LocalStorage.GetItemAsync(TokenStorageKey); _isAuthenticated = !string.IsNullOrWhiteSpace(token); } private async Task OpenAuthDialog() { var dialog = await DialogService.ShowAsync("ورود به حساب کاربری"); var result = await dialog.Result; if (!result.Canceled) { await CheckAuthStatus(); Snackbar.Add(GlobalConstants.SuccessMsg, Severity.Success); StateHasChanged(); } } private void NavigateToProfile() { Navigation.NavigateTo(RouteConstants.Profile.Index); } private async Task Logout() { await LocalStorage.RemoveItemAsync(TokenStorageKey); await LocalStorage.RemoveItemAsync("auth:phone-number"); await LocalStorage.RemoveItemAsync("auth:redirect"); await LocalStorage.RemoveItemAsync("referral:code"); _isAuthenticated = false; Snackbar.Add("با موفقیت از حساب کاربری خارج شدید.", Severity.Success); StateHasChanged(); // Navigate to home page Navigation.NavigateTo(RouteConstants.Main.MainPage); } }