110 lines
2.5 KiB
JavaScript
110 lines
2.5 KiB
JavaScript
const iconMap = [
|
|
{
|
|
label: 'PDF',
|
|
exts: ['pdf'],
|
|
icon: '📕',
|
|
colorClass: 'text-red-500'
|
|
},
|
|
{
|
|
label: 'Word',
|
|
exts: ['doc', 'docx'],
|
|
icon: '📝',
|
|
colorClass: 'text-blue-500'
|
|
},
|
|
{
|
|
label: 'Excel',
|
|
exts: ['xls', 'xlsx', 'csv'],
|
|
icon: '📊',
|
|
colorClass: 'text-green-500'
|
|
},
|
|
{
|
|
label: 'PowerPoint',
|
|
exts: ['ppt', 'pptx'],
|
|
icon: '📈',
|
|
colorClass: 'text-orange-500'
|
|
},
|
|
{
|
|
label: 'Image',
|
|
exts: ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'svg', 'webp', 'heic'],
|
|
icon: '🖼️',
|
|
colorClass: 'text-purple-500'
|
|
},
|
|
{
|
|
label: 'Archive',
|
|
exts: ['zip', 'rar', '7z', 'tar', 'gz'],
|
|
icon: '🗜️',
|
|
colorClass: 'text-amber-500'
|
|
},
|
|
{
|
|
label: 'Audio',
|
|
exts: ['mp3', 'wav', 'ogg', 'flac', 'aac'],
|
|
icon: '🎵',
|
|
colorClass: 'text-pink-500'
|
|
},
|
|
{
|
|
label: 'Vidéo',
|
|
exts: ['mp4', 'mov', 'avi', 'mkv', 'webm'],
|
|
icon: '🎬',
|
|
colorClass: 'text-indigo-500'
|
|
},
|
|
{
|
|
label: 'Texte',
|
|
exts: ['txt', 'md', 'rtf'],
|
|
icon: '📄',
|
|
colorClass: 'text-gray-500'
|
|
},
|
|
{
|
|
label: 'Code',
|
|
exts: ['json', 'xml', 'yml', 'yaml', 'js', 'ts', 'py', 'java', 'cs'],
|
|
icon: '💻',
|
|
colorClass: 'text-sky-500'
|
|
}
|
|
]
|
|
|
|
const mimeGroups = [
|
|
{ prefix: 'image/', icon: '🖼️', colorClass: 'text-purple-500' },
|
|
{ prefix: 'video/', icon: '🎬', colorClass: 'text-indigo-500' },
|
|
{ prefix: 'audio/', icon: '🎵', colorClass: 'text-pink-500' },
|
|
{ prefix: 'text/', icon: '📄', colorClass: 'text-gray-500' },
|
|
{ prefix: 'application/pdf', icon: '📕', colorClass: 'text-red-500' },
|
|
{ prefix: 'application/zip', icon: '🗜️', colorClass: 'text-amber-500' },
|
|
{ prefix: 'application/x-', icon: '🗜️', colorClass: 'text-amber-500' }
|
|
]
|
|
|
|
export const getFileIcon = ({ name = '', mime = '' } = {}) => {
|
|
const extension = name.split('.').pop()?.toLowerCase() || ''
|
|
|
|
if (extension) {
|
|
const match = iconMap.find(entry => entry.exts.includes(extension))
|
|
if (match) {
|
|
return {
|
|
icon: match.icon,
|
|
colorClass: match.colorClass,
|
|
label: match.label
|
|
}
|
|
}
|
|
}
|
|
|
|
if (mime) {
|
|
const match = mimeGroups.find(entry => mime.startsWith(entry.prefix))
|
|
if (match) {
|
|
return {
|
|
icon: match.icon,
|
|
colorClass: match.colorClass,
|
|
label: mime
|
|
}
|
|
}
|
|
}
|
|
|
|
return {
|
|
icon: '📁',
|
|
colorClass: 'text-primary',
|
|
label: 'Document'
|
|
}
|
|
}
|
|
|
|
export const describeFileType = ({ name = '', mime = '' } = {}) => {
|
|
const icon = getFileIcon({ name, mime })
|
|
return icon.label
|
|
}
|