72 lines
2.3 KiB
TypeScript
72 lines
2.3 KiB
TypeScript
import { EntityObject } from '@DocumentsManager/models/entity'
|
|
|
|
/**
|
|
* Get the appropriate icon for a file based on its MIME type
|
|
*/
|
|
export function getFileIcon(entity: EntityObject): string {
|
|
const mime = entity.properties.mime || ''
|
|
if (!mime) return 'mdi-file'
|
|
if (mime.startsWith('image/')) return 'mdi-file-image'
|
|
if (mime.startsWith('video/')) return 'mdi-file-video'
|
|
if (mime.startsWith('audio/')) return 'mdi-file-music'
|
|
if (mime.startsWith('text/')) return 'mdi-file-document'
|
|
if (mime === 'application/pdf') return 'mdi-file-pdf-box'
|
|
if (mime.includes('zip') || mime.includes('tar') || mime.includes('compressed')) return 'mdi-folder-zip'
|
|
if (mime.includes('word') || mime.includes('document')) return 'mdi-file-word'
|
|
if (mime.includes('excel') || mime.includes('spreadsheet')) return 'mdi-file-excel'
|
|
if (mime.includes('powerpoint') || mime.includes('presentation')) return 'mdi-file-powerpoint'
|
|
return 'mdi-file'
|
|
}
|
|
|
|
/**
|
|
* Format file size in human readable format
|
|
*/
|
|
export function formatSize(bytes: number): string {
|
|
const safeBytes = Number.isFinite(bytes) ? bytes : 0
|
|
if (safeBytes === 0) return '0 B'
|
|
const k = 1024
|
|
const sizes = ['B', 'KB', 'MB', 'GB', 'TB']
|
|
const i = Math.floor(Math.log(safeBytes) / Math.log(k))
|
|
return parseFloat((safeBytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]
|
|
}
|
|
|
|
/**
|
|
* Format date string to localized format
|
|
*/
|
|
export function formatDate(value: Date | string | null | undefined): string {
|
|
if (!value) return '—'
|
|
const date = value instanceof Date ? value : new Date(value)
|
|
if (Number.isNaN(date.getTime())) return '—'
|
|
return date.toLocaleDateString('en-US', {
|
|
year: 'numeric',
|
|
month: 'short',
|
|
day: 'numeric',
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Get upload status icon
|
|
*/
|
|
export function getUploadStatusIcon(status: string): string {
|
|
switch (status) {
|
|
case 'pending': return 'mdi-clock-outline'
|
|
case 'uploading': return 'mdi-loading mdi-spin'
|
|
case 'completed': return 'mdi-check-circle'
|
|
case 'error': return 'mdi-alert-circle'
|
|
default: return 'mdi-file'
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get upload status color
|
|
*/
|
|
export function getUploadStatusColor(status: string): string {
|
|
switch (status) {
|
|
case 'pending': return 'grey'
|
|
case 'uploading': return 'primary'
|
|
case 'completed': return 'success'
|
|
case 'error': return 'error'
|
|
default: return 'grey'
|
|
}
|
|
}
|