[frontend/components] Add drive folder menu
This commit is contained in:
parent
f8c36f1097
commit
85ba75e608
2 changed files with 35 additions and 7 deletions
|
@ -76,9 +76,18 @@
|
||||||
}
|
}
|
||||||
@if (Folder != null && File == null)
|
@if (Folder != null && File == null)
|
||||||
{
|
{
|
||||||
<div class="drive-entry" @onclick="SelectFolder" @onclick:stopPropagation="true">
|
<div @ref="FolderButton" class="drive-entry" @onclick="SelectFolder" @onclick:stopPropagation="true">
|
||||||
<Icon Name="Icons.FolderOpen" Size="5em" Pack="IconStyle.Fill"/>
|
<Icon Name="Icons.FolderOpen" Size="5em" Pack="IconStyle.Fill"/>
|
||||||
<span>@Folder.Name</span>
|
<span>@Folder.Name</span>
|
||||||
|
<Menu @ref="FolderMenu">
|
||||||
|
<MenuElement Icon="Icons.FolderOpen" OnSelect="OpenFolder">
|
||||||
|
<Text>@Loc["Open"]</Text>
|
||||||
|
</MenuElement>
|
||||||
|
<MenuElement Icon="Icons.CursorText" OnSelect="RenameFolder">
|
||||||
|
<Text>@Loc["Rename"]</Text>
|
||||||
|
</MenuElement>
|
||||||
|
<ClosingBackdrop OnClose="FolderMenu.Close"></ClosingBackdrop>
|
||||||
|
</Menu>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,7 +95,9 @@
|
||||||
[Parameter] public DriveFileResponse? File { get; set; } = null;
|
[Parameter] public DriveFileResponse? File { get; set; } = null;
|
||||||
[Parameter] public DriveFolderResponse? Folder { get; set; } = null;
|
[Parameter] public DriveFolderResponse? Folder { get; set; } = null;
|
||||||
private Menu FileMenu { get; set; } = null!;
|
private Menu FileMenu { get; set; } = null!;
|
||||||
|
private Menu FolderMenu { get; set; } = null!;
|
||||||
private ElementReference FileButton { get; set; }
|
private ElementReference FileButton { get; set; }
|
||||||
|
private ElementReference FolderButton { get; set; }
|
||||||
|
|
||||||
private void SelectFile() => FileMenu.Toggle(FileButton);
|
private void SelectFile() => FileMenu.Toggle(FileButton);
|
||||||
|
|
||||||
|
@ -141,8 +152,22 @@
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SelectFolder()
|
private void SelectFolder() => FolderMenu.Toggle(FolderButton);
|
||||||
|
|
||||||
|
private async Task RenameFolder()
|
||||||
{
|
{
|
||||||
Nav.NavigateTo($"/drive/{Folder!.Id}");
|
if (Folder is not { Id: not null, Name: not null }) return;
|
||||||
|
|
||||||
|
var name = await Js.InvokeAsync<string?>("prompt", "Rename folder", Folder.Name);
|
||||||
|
if (string.IsNullOrWhiteSpace(name)) return;
|
||||||
|
|
||||||
|
var res = await Api.Drive.UpdateFolderAsync(Folder.Id, name.Trim());
|
||||||
|
if (res != null)
|
||||||
|
{
|
||||||
|
Folder.Name = res.Name;
|
||||||
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OpenFolder() => Nav.NavigateTo($"/drive/{Folder!.Id}");
|
||||||
|
}
|
|
@ -24,4 +24,7 @@ internal class DriveControllerModel(ApiClient api)
|
||||||
|
|
||||||
public Task<DriveFolderResponse?> GetFolderAsync(string? id) =>
|
public Task<DriveFolderResponse?> GetFolderAsync(string? id) =>
|
||||||
api.CallNullableAsync<DriveFolderResponse>(HttpMethod.Get, "/drive/folder" + (id != null ? $"/{id}" : ""));
|
api.CallNullableAsync<DriveFolderResponse>(HttpMethod.Get, "/drive/folder" + (id != null ? $"/{id}" : ""));
|
||||||
|
|
||||||
|
public Task<DriveFolderResponse?> UpdateFolderAsync(string id, string name) =>
|
||||||
|
api.CallNullableAsync<DriveFolderResponse>(HttpMethod.Put, $"/drive/folder/{id}", QueryString.Create("name", name));
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue