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

70 lines
2.3 KiB
Text
Raw Permalink Normal View History

2026-06-06 02:58:43 -05:00
<Space Style="display: flex; flex-grow: 1;">
<SpaceItem Style="flex-grow: 1">
2025-01-25 02:40:36 -06:00
<Input TValue="string" Type="InputType.Text" @bind-Value="Value" OnInput="OnInput" BindOnInput="true" Disabled="@Disabled" />
</SpaceItem>
<SpaceItem>
@if (Before is not null)
{
@Before
}
<FilePickerButton
2024-12-31 18:21:41 -06:00
Type="ButtonType.Primary"
Icon="@IconType.Outline.FolderOpen"
ArchiveId="@ArchiveId"
Title="@Title"
OkText="@OkText"
AllowDirectories="@AllowDirectories"
Prefix="@Prefix"
Root="@Root"
2025-01-25 02:40:36 -06:00
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; }
2023-09-11 17:56:23 -05:00
[Parameter] public string Title { get; set; } = "Choose File";
2023-09-11 19:18:03 -05:00
[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; }
2025-01-25 02:40:36 -06:00
[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);
}
}