Composables

useFileIcon

Risolve la classe icona PrimeIcons appropriata per un MIME type, con categoria e colore associati.

Panoramica

useFileIcon mappa MIME type → icona PrimeIcons + categoria leggibile + classe colore Tailwind. Usato internamente da AttachmentRow / AttachmentCard ma esportato per layout custom.

Le funzioni ritornate sono pure: non fanno watch su nulla, non hanno side effect. Puoi chiamarle anche fuori da setup — il composable accetta solo configurazione di mapping.

Firma

function useFileIcon(config?: FileIconConfig): {
  getIconClass: (mimeType: string) => string
  shouldShowThumbnail: (mimeType: string) => boolean
  getFileCategory: (mimeType: string) => string
  getColorClass: (mimeType: string) => string
}

interface FileIconConfig {
  customIcons?: Record<string, string>  // override per MIME specifici
  defaultIcon?: string                   // default 'pi-file'
}

Mapping principale

MIME patterngetIconClassCategoriaColore
image/*pi-imageImmaginetext-blue-500
application/pdfpi-file-pdfPDFtext-red-500
application/msword · *.wordprocessingml.document (.docx)pi-file-wordWordtext-blue-600
application/vnd.ms-excel · *.spreadsheetml.sheet (.xlsx)pi-file-excelExceltext-green-600
application/vnd.ms-powerpoint · *.presentationml.presentation (.pptx)pi-file-powerpointPowerPointtext-orange-500
application/zip · application/x-rar-compressed · application/x-7z-compressedpi-file-exportArchiviotext-yellow-500
text/plainpi-file-editTestotext-gray-500
text/html · text/css · text/javascript · application/json · application/xmlpi-codeTestotext-gray-500
audio/*pi-volume-upAudiotext-green-500
video/*pi-videoVideotext-purple-500
altropi-file (config defaultIcon)Altrotext-gray-400

API

getIconClass(mimeType)

Ritorna la sola classe icona PrimeIcons (es. 'pi-file-pdf'). Per renderizzare l'icona ricordati di prefissare pi:

<i :class="['pi', getIconClass('application/pdf')]" />

shouldShowThumbnail(mimeType)

true per immagini (image/*) e PDF — i tipi per cui ha senso mostrare un'anteprima visuale invece dell'icona.

getFileCategory(mimeType)

Stringa leggibile in italiano: 'Immagine', 'PDF', 'Word', 'Excel', 'PowerPoint', 'Archivio', 'Testo', 'Audio', 'Video', 'Altro'.

getColorClass(mimeType)

Classe Tailwind di colore associata alla categoria (es. 'text-red-500' per PDF). Utile per dare un colpo d'occhio cromatico in liste.

Configurazione custom

const { getIconClass } = useFileIcon({
  customIcons: {
    'application/x-myproprietaryformat': 'pi-key',
    'application/dwg': 'pi-compass'
  },
  defaultIcon: 'pi-question'
})

Esempio

<script setup lang="ts">
import { useFileIcon } from '@pzeta/vue-attachment'

const { getIconClass, getColorClass, getFileCategory } = useFileIcon()
</script>

<template>
  <div class="flex items-center gap-2">
    <i :class="['pi text-2xl', getIconClass('application/pdf'), getColorClass('application/pdf')]" />
    <span>{{ getFileCategory('application/pdf') }}</span>
  </div>
</template>

Anteprima live