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 lereference keyricevute via prop - Upload multipli con toast di successo/errore (
@pzeta/vue-components) - Delete singolo / multiplo
- Download diretto via
downloadFile(l'adapter ritornaBlob, il composable triggera il save dialog) - Refresh on-demand
L'adapter è risolto in ordine: prop esplicita adapter → inject 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) +:
| Prop | Tipo | Default | Descrizione |
|---|---|---|---|
adapter | AttachmentAdapter | (inject) | Data source. Se omesso, usa quello fornito da VueAttachmentPlugin |
referenceTable | string | — | Identificativo dell'entità owner (es. 'tickets') |
referenceColumn | string | — | Colonna FK (es. 'idticket') |
referenceValue | string | number | — | Valore FK |
storagePath | string | — | Path su MinIO/S3 (override del default del plugin) |
maxSize | number | 104857600 | Dimensione max upload in byte |
allowedTypes | string[] | — | MIME accepted |
multiple | boolean | true | Upload multipli |
viewMode | 'grid' | 'list' | 'grid' | Modalità visualizzazione |
enableFilters / enableSearch / enableViewSwitch / enableUpload | boolean | true | Visibilità sezioni della toolbar |
multipleSelect | boolean | true | Mostra checkbox di selezione |
Eventi
| Evento | Payload | Descrizione |
|---|---|---|
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).