LANCommander/LANCommander.Server/UI/Components/ScriptEditor.razor
2024-12-31 18:21:41 -06:00

114 lines
4 KiB
Text

@using LANCommander.SDK.Enums
@using System.IO.Compression
@using Microsoft.EntityFrameworkCore
@inject DatabaseServiceFactory DatabaseServiceFactory
@inject ModalService ModalService
@inject IMessageService MessageService
<Space Direction="SpaceDirection.Vertical" Size="SpaceSize.Large" Style="width: 100%">
<SpaceItem>
<Table TItem="Script" DataSource="@Scripts" HidePagination="true" Responsive>
<PropertyColumn Property="s => s.Type">@context.Type.GetDisplayName()</PropertyColumn>
<PropertyColumn Property="s => s.CreatedBy">
@context.CreatedBy?.UserName
</PropertyColumn>
<PropertyColumn Property="s => s.CreatedOn" Format="MM/dd/yyyy hh:mm tt" />
<ActionColumn Title="">
<Space Style="display: flex; justify-content: end">
<SpaceItem>
<Button OnClick="() => Edit(context.Id)" Icon="@IconType.Outline.Edit" Type="ButtonType.Text" />
</SpaceItem>
<SpaceItem>
<Popconfirm OnConfirm="() => Delete(context)" Title="Are you sure you want to delete this script?">
<Button Icon="@IconType.Outline.Close" Type="ButtonType.Text" Danger />
</Popconfirm>
</SpaceItem>
</Space>
</ActionColumn>
</Table>
</SpaceItem>
<SpaceItem>
<GridRow Justify="RowJustify.End">
<GridCol>
<Button OnClick="() => Edit()" Type="ButtonType.Primary">Add Script</Button>
</GridCol>
</GridRow>
</SpaceItem>
</Space>
<style>
.monaco-editor-container {
height: 600px;
}
</style>
@code {
[Parameter] public Guid GameId { get; set; }
[Parameter] public Guid RedistributableId { get; set; }
[Parameter] public Guid ServerId { get; set; }
[Parameter] public Guid ArchiveId { get; set; }
[Parameter] public IEnumerable<ScriptType> AllowedTypes { get; set; }
ICollection<Script> Scripts { get; set; } = new List<Script>();
protected override async Task OnParametersSetAsync()
{
await LoadData();
}
async Task LoadData()
{
using (var scriptService = DatabaseServiceFactory.Create<ScriptService>())
{
if (GameId != Guid.Empty)
Scripts = await scriptService.Include(s => s.CreatedBy).GetAsync(s => s.GameId == GameId);
else if (RedistributableId != Guid.Empty)
Scripts = await scriptService.Include(s => s.CreatedBy).GetAsync(s => s.RedistributableId == RedistributableId);
else if (ServerId != Guid.Empty)
Scripts = await scriptService.Include(s => s.CreatedBy).GetAsync(s => s.ServerId == ServerId);
}
await InvokeAsync(StateHasChanged);
}
async void Edit(Guid? scriptId = null)
{
var modalOptions = new ModalOptions()
{
Title = scriptId == null ? "Add Script" : "Edit Script",
Maximizable = false,
DefaultMaximized = true,
Closable = true,
OkText = "Save"
};
var options = new ScriptEditorOptions()
{
ScriptId = scriptId ?? default,
AllowedTypes = AllowedTypes,
ArchiveId = ArchiveId,
GameId = GameId,
RedistributableId = RedistributableId,
ServerId = ServerId
};
var modalRef = await ModalService.CreateModalAsync<ScriptEditorDialog, ScriptEditorOptions, Script>(modalOptions, options);
modalRef.OnOk = async (script) =>
{
await LoadData();
};
}
async void Delete(Script script = null)
{
using (var scriptService = DatabaseServiceFactory.Create<ScriptService>())
{
if (script != null)
await scriptService.DeleteAsync(script);
}
await MessageService.Success("Script deleted!");
}
}