@using Iceshrimp.Frontend.Core.Services @using Iceshrimp.Frontend.Localization @using Iceshrimp.Shared.Schemas.Web @using Microsoft.Extensions.Localization @using Iceshrimp.Assets.PhosphorIcons @inject ApiService Api; @inject IJSRuntime Js; @inject IStringLocalizer Loc;
@if (File.ContentType.StartsWith("image")) { @File.Description } else if (File.ContentType.StartsWith("audio")) { } else if (File.ContentType.StartsWith("video")) { } else { }
@if (File.Description != null) { } else { } @if (File.Sensitive) { }
@Loc["Open"] @* TODO: Uncomment when FE supports media node *@ @* @if (File.ContentType.StartsWith("image")) *@ @* { *@ @* *@ @* @Loc["Insert inline"] *@ @* *@ @* } *@ @if (File.Sensitive) { @Loc["Mark as not sensitive"] } else { @Loc["Mark as sensitive"] } @Loc["Set alt text"] @Loc["Remove"]
@code { [Parameter, EditorRequired] public required DriveFileResponse File { get; set; } [Parameter] [EditorRequired] public required EventCallback AddInlineMedia { get; set; } [Parameter, EditorRequired] public required EventCallback RemoveAttachment { get; set; } private ElementReference Attachment { get; set; } private Menu AttachmentMenu { get; set; } = null!; private void Select() => AttachmentMenu.Toggle(Attachment); private void Open() => Js.InvokeVoidAsync("open", File.Url, "_blank"); // TODO: Uncomment when FE supports media node // private async Task InsertInline() // { // if (!File.ContentType.StartsWith("image/")) return; // await AddInlineMedia.InvokeAsync(File.Url); // } private async Task MarkSensitive(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 MarkNotSensitive() => await MarkSensitive(false); private async Task MarkAsSensitive() => await MarkSensitive(true); private async Task SetAltText() { 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 async Task Remove() => await RemoveAttachment.InvokeAsync(File.Id); }