Files
mapo-core/MP.Data/Services/SessionStorageService.cs

102 lines
2.8 KiB
C#

using System.Threading.Tasks;
using System.Text.Json;
using Microsoft.JSInterop;
namespace MP.Data.Services
{
public interface ISessionStorageService
{
#region Public Methods
Task ClearAsync();
Task<bool> ContainKeyAsync(string key);
Task<T?> GetItemAsync<T>(string key);
Task<T> GetItemAsync<T>(string key, T fallback);
Task RemoveItemAsync(string key);
Task SetItemAsync<T>(string key, T value);
#endregion Public Methods
}
public class SessionStorageService : ISessionStorageService
{
#region Public Constructors
public SessionStorageService(IJSRuntime js)
{
_js = js;
}
#endregion Public Constructors
#region Public Methods
public async Task ClearAsync()
{
await _js.InvokeVoidAsync("sessionStorage.clear");
}
public async Task<bool> ContainKeyAsync(string key)
{
var value = await _js.InvokeAsync<string>("sessionStorage.getItem", key);
return value != null;
}
/// <summary>
/// Lettura con valori default(null) in caso di missing:
/// int: 0
/// string: null
/// bool: false
/// DateTime: 01/01/0001
/// myClass: null
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public async Task<T?> GetItemAsync<T>(string key)
{
var json = await _js.InvokeAsync<string>("sessionStorage.getItem", key);
if (json is null)
return default;
return JsonSerializer.Deserialize<T>(json);
}
/// <summary>
/// Lettura valore con gestione fallback esplicito
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="fallback"></param>
/// <returns></returns>
public async Task<T> GetItemAsync<T>(string key, T fallback)
{
var json = await _js.InvokeAsync<string>("sessionStorage.getItem", key);
if (json is null)
return fallback;
return JsonSerializer.Deserialize<T>(json) ?? fallback;
}
public async Task RemoveItemAsync(string key)
{
await _js.InvokeVoidAsync("sessionStorage.removeItem", key);
}
public async Task SetItemAsync<T>(string key, T value)
{
var json = JsonSerializer.Serialize(value);
await _js.InvokeVoidAsync("sessionStorage.setItem", key, json);
}
#endregion Public Methods
#region Private Fields
private readonly IJSRuntime _js;
#endregion Private Fields
}
}