LANCommander/LANCommander.Server/UI/Components/FilePicker.razor

74 lines
No EOL
2.4 KiB
Text

@using LANCommander.Server.Models
@using System.IO.Compression
@inject ModalService ModalService
<Space Style="display: flex">
<SpaceItem Style="flex-grow: 1">
<Input TValue="string" Type="InputType.Text" @bind-Value="Value" OnInput="OnInput" BindOnInput="true" Disabled="@Disabled" />
</SpaceItem>
<SpaceItem>
@if (Before is not null)
{
@Before
}
<FilePickerButton
Type="ButtonType.Primary"
Icon="@IconType.Outline.FolderOpen"
ArchiveId="@ArchiveId"
Title="@Title"
OkText="@OkText"
AllowDirectories="@AllowDirectories"
Prefix="@Prefix"
Root="@Root"
Disabled="@Disabled"
EntrySelectable="@EntrySelectable"
EntryVisible="@EntryVisible"
OnSelected="OnFileSelected"/>
@if (After is not null)
{
@After
}
</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 bool Disabled { get; set; }
[Parameter] public Func<IFileManagerEntry, bool> EntrySelectable { get; set; } = _ => true;
[Parameter] public Func<IFileManagerEntry, bool> EntryVisible { get; set; } = _ => true;
[Parameter] public RenderFragment? Before { get; set; }
[Parameter] public RenderFragment? After { get; set; }
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;
if (ValueChanged.HasDelegate)
await ValueChanged.InvokeAsync(selectedFile);
if (OnSelected.HasDelegate)
await OnSelected.InvokeAsync(selectedFile);
await InvokeAsync(StateHasChanged);
}
}