using Microsoft.JSInterop; namespace TIAMWebApp.Client.Services { public class SessionStorageAccessor : IAsyncDisposable { private Lazy _accessorJsRef = new(); private readonly IJSRuntime _jsRuntime; public SessionStorageAccessor(IJSRuntime jsRuntime) { _jsRuntime = jsRuntime; } private async Task WaitForReference() { if (_accessorJsRef.IsValueCreated is false) { _accessorJsRef = new(await _jsRuntime.InvokeAsync("import", "/js/SessionStorageAccessor.js")); } } public async ValueTask DisposeAsync() { if (_accessorJsRef.IsValueCreated) { await _accessorJsRef.Value.DisposeAsync(); } } public async Task GetValueAsync(string key) { await WaitForReference(); var result = await _accessorJsRef.Value.InvokeAsync("get", key); return result; } public async Task SetValueAsync(string key, T value) { await WaitForReference(); await _accessorJsRef.Value.InvokeVoidAsync("set", key, value); } public async Task Clear() { await WaitForReference(); await _accessorJsRef.Value.InvokeVoidAsync("clear"); } public async Task RemoveAsync(string key) { await WaitForReference(); await _accessorJsRef.Value.InvokeVoidAsync("remove", key); } } }