import { ChangeDetectionStrategy, Component, computed, DestroyRef, inject, } from '@angular/core'; import { AfricaniesIconComponent } from '@africanies/africanies-icons'; import { ButtonComponent } from '../../button/button.component'; import { AfricaniesOverlayRef } from '../../overlay/africanies-overlay-ref'; import { OVERLAY_DATA } from '../../overlay/overlay-data.token'; /** Payload for {@link FilePreviewDialogComponent}. */ export interface FilePreviewData { /** * Local pick when previewing a fresh upload. Null for server-backed * {@link FileUploadExistingFile} rows (preview uses {@link previewUrl} only). */ file: File | null; /** Display name in the dialog title. */ name: string; previewUrl: string | null; isImage: boolean; /** Byte size when known; omit for remote existing files. */ size?: number | null; } type PreviewKind = 'image' | 'unavailable'; /** * Large-file preview modal for {@link FileUploadComponent}. * * Local image picks and existing server image URLs render inline. Other types * show a clear “can’t view” message. Object URLs created here are revoked on * destroy; list-owned `previewUrl` values are left alone. */ @Component({ selector: 'africanies-file-preview-dialog', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AfricaniesIconComponent, ButtonComponent], host: { class: 'flex min-h-0 w-full flex-col overflow-hidden', }, template: `
{{ sizeLabel() }} @if (typeLabel(); as type) { · {{ type }} }