From 85ba75e6080afecb9c94261433e073764cef8985 Mon Sep 17 00:00:00 2001 From: pancakes Date: Wed, 18 Dec 2024 15:40:16 +1000 Subject: [PATCH] [frontend/components] Add drive folder menu --- .../Components/DriveEntry.razor | 39 +++++++++++++++---- .../ControllerModels/DriveControllerModel.cs | 3 ++ 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/Iceshrimp.Frontend/Components/DriveEntry.razor b/Iceshrimp.Frontend/Components/DriveEntry.razor index bc75e290..4b8b636b 100644 --- a/Iceshrimp.Frontend/Components/DriveEntry.razor +++ b/Iceshrimp.Frontend/Components/DriveEntry.razor @@ -76,9 +76,18 @@ } @if (Folder != null && File == null) { -
+
@Folder.Name + + + @Loc["Open"] + + + @Loc["Rename"] + + +
} @@ -86,7 +95,9 @@ [Parameter] public DriveFileResponse? File { get; set; } = null; [Parameter] public DriveFolderResponse? Folder { get; set; } = null; private Menu FileMenu { get; set; } = null!; + private Menu FolderMenu { get; set; } = null!; private ElementReference FileButton { get; set; } + private ElementReference FolderButton { get; set; } private void SelectFile() => FileMenu.Toggle(FileButton); @@ -114,9 +125,9 @@ } private async Task MarkFileNotSensitive() => await MarkFileSensitive(false); - + private async Task MarkFileAsSensitive() => await MarkFileSensitive(true); - + private async Task SetFileAltText() { var alt = await Js.InvokeAsync("prompt", "Set alt text", File!.Description); @@ -131,7 +142,7 @@ } private void OpenFile() => Js.InvokeVoidAsync("open", File!.Url, "_blank"); - + private void CopyFileLink() => Js.InvokeVoidAsync("navigator.clipboard.writeText", File!.Url); private async Task DeleteFile() @@ -140,9 +151,23 @@ File = null; 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("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}"); } \ No newline at end of file diff --git a/Iceshrimp.Frontend/Core/ControllerModels/DriveControllerModel.cs b/Iceshrimp.Frontend/Core/ControllerModels/DriveControllerModel.cs index c9db9613..6c92080e 100644 --- a/Iceshrimp.Frontend/Core/ControllerModels/DriveControllerModel.cs +++ b/Iceshrimp.Frontend/Core/ControllerModels/DriveControllerModel.cs @@ -24,4 +24,7 @@ internal class DriveControllerModel(ApiClient api) public Task GetFolderAsync(string? id) => api.CallNullableAsync(HttpMethod.Get, "/drive/folder" + (id != null ? $"/{id}" : "")); + + public Task UpdateFolderAsync(string id, string name) => + api.CallNullableAsync(HttpMethod.Put, $"/drive/folder/{id}", QueryString.Create("name", name)); } \ No newline at end of file