@using Iceshrimp.Frontend.Localization @using Iceshrimp.Shared.Schemas.Web @using Microsoft.Extensions.Localization @using Iceshrimp.Assets.PhosphorIcons @using Iceshrimp.Frontend.Core.Services @inject ApiService Api; @inject IJSRuntime Js; @inject IStringLocalizer Loc; @inject NavigationManager Nav; @if (File != null && Folder == null) {
@if (File.Description != null) { } else { } @if (File.Sensitive) { }
@if (File.ContentType.StartsWith("image")) { @File.Description } else if (File.ContentType.StartsWith("audio")) { } else if (File.ContentType.StartsWith("video")) { } else { } @File.Filename @Loc["Open"] @Loc["Copy link"] @Loc["Rename"] @if (File.Sensitive) { @Loc["Mark as not sensitive"] } else { @Loc["Mark as sensitive"] } @Loc["Set alt text"] @Loc["Delete"]
} @if (Folder != null && File == null) {
@Folder.Name @Loc["Open"] @Loc["Rename"]
} @code { [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); private async Task RenameFile() { var filename = await Js.InvokeAsync("prompt", "Rename file", File!.Filename); if (string.IsNullOrWhiteSpace(filename)) return; var res = await Api.Drive.UpdateFileAsync(File!.Id, new UpdateDriveFileRequest { Filename = filename.Trim() }); if (res != null) { File.Filename = res.Filename; StateHasChanged(); } } private async Task MarkFileSensitive(bool sensitive) { var res = await Api.Drive.UpdateFileAsync(File!.Id, new UpdateDriveFileRequest { Sensitive = sensitive}); if (res != null) { File.Sensitive = res.Sensitive; StateHasChanged(); } } 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); if (alt == null) return; var res = await Api.Drive.UpdateFileAsync(File!.Id, new UpdateDriveFileRequest { Description = string.IsNullOrWhiteSpace(alt) ? null : alt.Trim() }); if (res != null) { File.Description = res.Description; StateHasChanged(); } } private void OpenFile() => Js.InvokeVoidAsync("open", File!.Url, "_blank"); private void CopyFileLink() => Js.InvokeVoidAsync("navigator.clipboard.writeText", File!.Url); private async Task DeleteFile() { await Api.Drive.DeleteFileAsync(File!.Id); File = null; StateHasChanged(); } private void SelectFolder() => FolderMenu.Toggle(FolderButton); private async Task RenameFolder() { 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}"); }