@using System.Text.Json
@using System.Text.Json.Nodes
@using ArcaneLibs.Blazor.Components.Services
@using ArcaneLibs.Extensions
@using LibMatrix.Helpers
@inject BlazorSaveFileService SaveFileService
RoomBuilder state
Show null values
Save
@RoomBuilder.ToJson(ignoreNull: !ShowNullInState)
@code {
[Parameter]
public required RoomBuilder RoomBuilder { get; set; }
[Parameter]
public required EventCallback RoomBuilderChanged { get; set; }
[Parameter]
public required Action PageStateHasChanged { get; set; }
private bool ShowNullInState { get; set; }
private async Task SaveFile() {
Console.WriteLine("Saving room builder state to file...");
await SaveFileService.SaveFileAsync("room-builder.json", RoomBuilder.ToJson(), "application/json");
}
private async Task LoadFile(InputFileChangeEventArgs e) {
if (!RoomBuilderChanged.HasDelegate) throw new InvalidOperationException("RoomBuilderChanged must have a delegate.");
if (e.FileCount == 0) return;
Console.WriteLine("Loading room builder state from file...");
var stream = e.File.OpenReadStream(4 * 1024 * 1024 * 1024L);
var json = await JsonSerializer.DeserializeAsync(stream);
if (json is null) {
Console.WriteLine("Failed to deserialize JSON from file.");
return;
}
if (json.ContainsKey(nameof(RoomUpgradeBuilder.UpgradeOptions))) {
Console.WriteLine("Got room upgrade builder state.");
RoomBuilder = json.Deserialize();
}
else {
Console.WriteLine("Got room builder state.");
RoomBuilder = json.Deserialize();
}
await RoomBuilderChanged.InvokeAsync(RoomBuilder);
PageStateHasChanged();
Console.WriteLine("Room builder state loaded from file.");
}
}