| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- using Microsoft.AspNetCore.Components;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
-
- namespace cwebplusApp.Shared.Services {
- public class PageHistoryManager {
-
- public EventCallback OnBeforeNavigateBack;
-
- private readonly List<string> previousPages;
-
- private NavigationManager NavigationManager;
-
- public PageHistoryManager(NavigationManager NavigationManager) {
- previousPages = new List<string>();
- this.NavigationManager = NavigationManager;
- }
-
- public void Reset() {
- previousPages.Clear();
- }
-
- public void AddPageToHistory(string pageName) {
- previousPages.Add(pageName);
- }
-
- public string GetPreviousPage() {
- if (CanGoBack()) {
- // You add a page on initialization, so you need to return the 2nd from the last
- string previousPage = previousPages.ElementAt(previousPages.Count - 2);
- previousPages.RemoveAt(previousPages.Count - 1);
- previousPages.RemoveAt(previousPages.Count - 1);
- return previousPage;
- }
-
- // Can't go back because you didn't navigate enough
- return previousPages.FirstOrDefault();
- }
-
- public bool CanGoBack() {
- return previousPages.Count > 1;
- }
-
- public async void NavigateBack() {
- await FireOnBeforeNavigateBackEvent();
- NavigationManager.NavigateTo(GetPreviousPage());
- }
-
- protected async Task FireOnBeforeNavigateBackEvent() {
- await OnBeforeNavigateBack.InvokeAsync();
- }
- }
- }
|