Added modular selection actions

This commit is contained in:
Marcel Baumgartner
2024-03-30 22:06:33 +01:00
parent 49077e7023
commit b2929fe211
7 changed files with 107 additions and 34 deletions

View File

@@ -45,30 +45,42 @@
</div>
</div>
<div class="d-flex justify-content-center justify-content-md-end align-items-center">
<WButton OnClick="ManualRefresh" CssClasses="btn btn-icon btn-light-info">
<i class="bx bx-sm bx-refresh"></i>
</WButton>
<label for="fileManagerSelect" class="btn btn-light-primary mx-2">Upload</label>
<input id="fileManagerSelect" type="file" hidden="hidden" multiple/>
<div class="dropdown">
<a class="btn btn-primary dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
New
</a>
<ul class="dropdown-menu" aria-labelledby="dropdownMenuLink" style="">
<li>
<a href="#" class="dropdown-item" @onclick:preventDefault @onclick="CreateFile">
<i class="bx bx-sm bx-file text-primary me-2 align-middle"></i>
<span class="align-middle fs-6">File</span>
</a>
</li>
<li>
<a href="#" class="dropdown-item" @onclick:preventDefault @onclick="CreateDirectory">
<i class="bx bx-sm bx-folder text-primary me-2 align-middle"></i>
<span class="align-middle fs-6">Folder</span>
</a>
</li>
</ul>
</div>
@if (View != null && View.Selection.Any())
{
foreach (var action in SelectionActions)
{
var cssClass = $"btn btn-{action.Color} mx-2";
<WButton Text="@action.Name" CssClasses="@cssClass" OnClick="() => InvokeSelectionAction(action)" />
}
}
else
{
<WButton OnClick="ManualRefresh" CssClasses="btn btn-icon btn-light-info">
<i class="bx bx-sm bx-refresh"></i>
</WButton>
<label for="fileManagerSelect" class="btn btn-light-primary mx-2">Upload</label>
<input id="fileManagerSelect" type="file" hidden="hidden" multiple/>
<div class="dropdown">
<a class="btn btn-primary dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
New
</a>
<ul class="dropdown-menu" aria-labelledby="dropdownMenuLink" style="">
<li>
<a href="#" class="dropdown-item" @onclick:preventDefault @onclick="CreateFile">
<i class="bx bx-sm bx-file text-primary me-2 align-middle"></i>
<span class="align-middle fs-6">File</span>
</a>
</li>
<li>
<a href="#" class="dropdown-item" @onclick:preventDefault @onclick="CreateDirectory">
<i class="bx bx-sm bx-folder text-primary me-2 align-middle"></i>
<span class="align-middle fs-6">Folder</span>
</a>
</li>
</ul>
</div>
}
</div>
</div>
</div>
@@ -86,6 +98,7 @@ else
FileAccess="FileAccess"
OnEntryClicked="OnEntryClicked"
OnNavigateUpClicked="OnNavigateUpClicked"
OnSelectionChanged="OnSelectionChanged"
EnableContextMenu="true">
<ContextMenuTemplate>
@foreach (var action in Actions)
@@ -138,6 +151,7 @@ else
private string Path = "/";
private IFileManagerAction[] Actions;
private IFileManagerSelectionAction[] SelectionActions;
// Editor
private FileEditor Editor;
@@ -156,8 +170,12 @@ else
private Timer? UploadTokenTimer;
protected override void OnInitialized()
protected override async Task OnInitializedAsync()
{
// Load plugin ui and options
Actions = await PluginService.GetImplementations<IFileManagerAction>();
SelectionActions = await PluginService.GetImplementations<IFileManagerSelectionAction>();
OnFolderClicked = async entry =>
{
await MoveAccess.ChangeDirectory(entry.Name);
@@ -175,9 +193,6 @@ else
if (!firstRender)
return;
// Load plugin ui and options
Actions = await PluginService.GetImplementations<IFileManagerAction>();
// Setup upload url update timer
UploadTokenTimer = new(async _ =>
@@ -233,6 +248,16 @@ else
await action.Execute(FileAccess, View, entry, ServiceProvider);
}
private async Task InvokeSelectionAction(IFileManagerSelectionAction action)
{
await action.Execute(FileAccess, View, View.Selection, ServiceProvider);
// Refresh resets the selection
await View.Refresh();
}
private async Task OnSelectionChanged(FileEntry[] _) => await InvokeAsync(StateHasChanged);
#region Navigation & Refreshing
private async Task OnNavigateUpClicked()