// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Web; namespace BasicTestApp; public class PreserveStateService : IDisposable { private readonly PersistentComponentState _componentApplicationState; private PersistingComponentStateSubscription _persistingSubscription; private ServiceState _state = new(); public PreserveStateService(PersistentComponentState componentApplicationState) { _componentApplicationState = componentApplicationState; _persistingSubscription = _componentApplicationState.RegisterOnPersisting(PersistState, RenderMode.InteractiveAuto); TryRestoreState(); } public Guid Guid => _state.TheState; private void TryRestoreState() { if (_componentApplicationState.TryTakeFromJson("Service", out var state)) { _state = state; } else { _state = new ServiceState { TheState = Guid.NewGuid() }; } } public void NewState() => _state = new ServiceState { TheState = Guid.NewGuid() }; private Task PersistState() { _componentApplicationState.PersistAsJson("Service", _state); return Task.CompletedTask; } public void Dispose() => _persistingSubscription.Dispose(); private class ServiceState { public Guid TheState { get; set; } } }