LANCommander/LANCommander.Server/UI/Components/FilePicker.razor
2024-08-04 18:44:33 -05:00

69 lines
No EOL
2.2 KiB
Text

@using LANCommander.Server.Models
@using System.IO.Compression
@inject ModalService ModalService
@inject ArchiveService ArchiveService
<Space Style="display: flex">
<SpaceItem Style="flex-grow: 1">
<Input TValue="string" Type="text" @bind-Value="InputValue" OnInput="OnInput" BindOnInput="true" />
</SpaceItem>
<SpaceItem>
<FilePickerButton
Type="@ButtonType.Primary"
Icon="@IconType.Outline.FolderOpen"
ArchiveId="@ArchiveId"
Title="@Title"
OkText="@OkText"
AllowDirectories="@AllowDirectories"
Prefix="@Prefix"
Root="@Root"
EntrySelectable="@EntrySelectable"
EntryVisible="@EntryVisible"
OnSelected="OnFileSelected" />
</SpaceItem>
</Space>
@code {
[Parameter] public string Value { get; set; }
[Parameter] public EventCallback<string> ValueChanged { get; set; }
[Parameter] public EventCallback<string> OnSelected { get; set; }
[Parameter] public Guid ArchiveId { get; set; }
[Parameter] public string Title { get; set; } = "Choose File";
[Parameter] public string OkText { get; set; } = "Select File";
[Parameter] public bool AllowDirectories { get; set; } = false;
[Parameter] public string Prefix { get; set; }
[Parameter] public string Root { get; set; }
[Parameter] public Func<IFileManagerEntry, bool> EntrySelectable { get; set; } = _ => true;
[Parameter] public Func<IFileManagerEntry, bool> EntryVisible { get; set; } = _ => true;
string InputValue { get; set; }
protected override async Task OnInitializedAsync()
{
InputValue = Value;
}
async Task OnInput(ChangeEventArgs args)
{
var inputString = args?.Value.ToString();
Value = inputString;
if (ValueChanged.HasDelegate)
await ValueChanged.InvokeAsync(inputString);
}
async Task OnFileSelected(string selectedFile)
{
Value = selectedFile;
InputValue = selectedFile;
if (ValueChanged.HasDelegate)
await ValueChanged.InvokeAsync(selectedFile);
if (OnSelected.HasDelegate)
await OnSelected.InvokeAsync(selectedFile);
await InvokeAsync(StateHasChanged);
}
}