generated from VLADIMIR/template_frontend
47 lines
1.7 KiB
TypeScript
47 lines
1.7 KiB
TypeScript
import type { Application } from '@/api/generated/crabs/evening_detective_server'
|
|
import { getURL } from '@/api/generated/crabs/evening_detective_server/client'
|
|
|
|
// Тип файла улики: явное поле file_type (image | pdf | audio) или
|
|
// деривация из расширения имени файла (легаси-данные без file_type).
|
|
export function applicationFileType(application: Application | undefined): string {
|
|
const fileType = application?.file_type
|
|
if (fileType === 'pdf' || fileType === 'image' || fileType === 'audio') {
|
|
return fileType
|
|
}
|
|
const image = (application?.image || '').toLowerCase()
|
|
if (/\.pdf($|\?)/.test(image)) {
|
|
return 'pdf'
|
|
}
|
|
if (/\.(mp3|wav|ogg|m4a|aac|flac|opus)($|\?)/.test(image)) {
|
|
return 'audio'
|
|
}
|
|
if (/\.(png|jpe?g|gif|webp|bmp|svg)($|\?)/.test(image)) {
|
|
return 'image'
|
|
}
|
|
return ''
|
|
}
|
|
|
|
// Полный URL файла улики: относительные имена (ответ UploadFile) и пути
|
|
// префиксуются хранилищем, внешние http/https ссылки не трогаются.
|
|
export function applicationFileURL(image: string | undefined): string {
|
|
if (!image) {
|
|
return ''
|
|
}
|
|
const low = image.toLowerCase()
|
|
if (low.startsWith('http://') || low.startsWith('https://')) {
|
|
return image
|
|
}
|
|
if (image.startsWith('/')) {
|
|
return getURL() + image
|
|
}
|
|
return `${getURL()}/api/files/${image}`
|
|
}
|
|
|
|
// Последний сегмент имени файла для отображения в редакторе.
|
|
export function applicationFileName(image: string | undefined): string {
|
|
if (!image) {
|
|
return ''
|
|
}
|
|
return image.split('/').pop() || image
|
|
}
|