feat: add documents selector
Signed-off-by: Sebastian Krupinski <krupinski01@gmail.com>
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
import { EntityObject } from '@/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'
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user