Components

AttachmentsManagerConnected

Container che wrappa AttachmentsManager e fa fetch/upload/delete automatico via useAttachments + adapter.

Panoramica

AttachmentsManagerConnected è il container del Manager: usa internamente useAttachments per parlare con un AttachmentAdapter e gestisce automaticamente:

  • Fetch iniziale (onMounted) con le reference key ricevute via prop
  • Upload multipli con toast di successo/errore (@pzeta/vue-components)
  • Delete singolo / multiplo
  • Download diretto via downloadFile (l'adapter ritorna Blob, il composable triggera il save dialog)
  • Refresh on-demand

L'adapter è risolto in ordine: prop esplicita adapterinject dal VueAttachmentPlugin. Lancia un errore se nessuno è disponibile.

Quando usarlo

Caso d'uso standard: pagina di dettaglio entità (Ticket, Anagrafica, Ordine) con sezione "Allegati" o tab dedicata.

Props

Stesse prop UI di AttachmentsManager (eccetto attachments/isLoading/error, gestite internamente) +:

PropTipoDefaultDescrizione
adapterAttachmentAdapter(inject)Data source. Se omesso, usa quello fornito da VueAttachmentPlugin
referenceTablestringIdentificativo dell'entità owner (es. 'tickets')
referenceColumnstringColonna FK (es. 'idticket')
referenceValuestring | numberValore FK
storagePathstringPath su MinIO/S3 (override del default del plugin)
maxSizenumber104857600Dimensione max upload in byte
allowedTypesstring[]MIME accepted
multiplebooleantrueUpload multipli
viewMode'grid' | 'list''grid'Modalità visualizzazione
enableFilters / enableSearch / enableViewSwitch / enableUploadbooleantrueVisibilità sezioni della toolbar
multipleSelectbooleantrueMostra checkbox di selezione

Eventi

EventoPayloadDescrizione
update:viewMode'grid' | 'list'Cambio modalità visualizzazione
Non riemette upload/delete/download/refresh: sono gestiti internamente. Per logica custom (es. confermare l'upload prima di inviarlo), usa AttachmentsManager direttamente.

Esempio

<script setup lang="ts">
import { ref } from 'vue'
const ticketId = ref(42)
</script>

<template>
  <AttachmentsManagerConnected
    reference-table="tickets"
    reference-column="idticket"
    :reference-value="ticketId"
    storage-path="tickets/2026"
    :max-size="10485760"
    :allowed-types="['image/png', 'image/jpeg', 'application/pdf']"
    view-mode="list"
  />
</template>

Adapter esplicito (no plugin)

Per scenari multi-tenant in cui ogni sezione dell'app usa un adapter diverso:

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

const tenantAdapter = createAxiosAdapter(
  axios.create({ baseURL: '/api/tenant-a/storage' }),
  { storagePath: 'attachments/tickets' }
)
</script>

<template>
  <AttachmentsManagerConnected
    :adapter="tenantAdapter"
    reference-table="tickets"
    reference-column="idticket"
    :reference-value="42"
  />
</template>

Anteprima live

Il preview live di AttachmentsManagerConnected richiede un backend REST raggiungibile (un'istanza Fastify con @pzeta/fastify-utils configurato per attachments + MinIO). Per provare le viste in modalità isolata vedi AttachmentsManager (presentational).