Added modular selection actions
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user