LANCommander/LANCommander/Components/InputArchiveFile.razor

63 lines
No EOL
2 KiB
Text

@using LANCommander.Models;
@using System.IO.Compression;
@inject ModalService ModalService
@inject ArchiveService ArchiveService
<Space Style="display: flex">
<SpaceItem Style="flex-grow: 1">
<Input Type="text" @bind-Value="Value" OnChange="ValueChanged" />
</SpaceItem>
@if (ArchiveId != Guid.Empty) {
<SpaceItem>
<Button OnClick="() => BrowseForFile()" Type="@ButtonType.Primary" Icon="@IconType.Outline.FolderOpen" Disabled="!ArchiveExists" />
</SpaceItem>
}
</Space>
@code {
[Parameter] public string Value { get; set; }
[Parameter] public EventCallback<string> ValueChanged { get; set; }
[Parameter] public Guid ArchiveId { get; set; }
[Parameter] public string ArchiveBrowserTitle { get; set; } = "Choose File";
[Parameter] public bool AllowDirectories { get; set; } = false;
bool ArchiveExists { get; set; } = false;
protected override async Task OnInitializedAsync()
{
if (ArchiveId != Guid.Empty)
ArchiveExists = await ArchiveService.Exists(ArchiveId);
}
private async void BrowseForFile()
{
var modalOptions = new ModalOptions()
{
Title = ArchiveBrowserTitle,
Maximizable = false,
DefaultMaximized = true,
Closable = true,
OkText = "Select File"
};
var browserOptions = new ArchiveBrowserOptions()
{
ArchiveId = ArchiveId,
Select = true,
Multiple = false,
AllowDirectories = AllowDirectories
};
var modalRef = await ModalService.CreateModalAsync<ArchiveBrowserDialog, ArchiveBrowserOptions, IEnumerable<ZipArchiveEntry>>(modalOptions, browserOptions);
modalRef.OnOk = async (results) =>
{
Value = "{InstallDir}/" + results.FirstOrDefault().FullName;
if (ValueChanged.HasDelegate)
await ValueChanged.InvokeAsync(Value);
StateHasChanged();
};
}
}