59 lines
1.6 KiB
C#
59 lines
1.6 KiB
C#
using Microsoft.JSInterop;
|
|
|
|
namespace TIAMWebApp.Client.Services
|
|
{
|
|
public class SessionStorageAccessor : IAsyncDisposable
|
|
{
|
|
private Lazy<IJSObjectReference> _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<IJSObjectReference>("import", "/js/SessionStorageAccessor.js"));
|
|
}
|
|
}
|
|
|
|
public async ValueTask DisposeAsync()
|
|
{
|
|
if (_accessorJsRef.IsValueCreated)
|
|
{
|
|
await _accessorJsRef.Value.DisposeAsync();
|
|
}
|
|
}
|
|
|
|
public async Task<T> GetValueAsync<T>(string key)
|
|
{
|
|
await WaitForReference();
|
|
var result = await _accessorJsRef.Value.InvokeAsync<T>("get", key);
|
|
|
|
return result;
|
|
}
|
|
|
|
public async Task SetValueAsync<T>(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);
|
|
}
|
|
|
|
}
|
|
}
|