Composables
useCrudTable
Composable generico per tabelle di amministrazione PostgREST.
Panoramica
useCrudTable<T, K> è un composable generico per operazioni CRUD su qualsiasi tabella PostgREST. È usato internamente dai componenti *CrudTable ma può essere usato direttamente per integrare form di amministrazione personalizzati.
Tipo generico
// T = tipo riga (es. BoardCampoRow)
// K = tipo chiave primaria (es. number | string)
const crudTable = useCrudTable<BoardCampoRow, number>({
repo: boardCampoRepo, // Repository @pzeta/postgrest
primaryKey: 'idboardcampo',
})
Stato reattivo
| Proprietà | Tipo | Descrizione |
|---|---|---|
items | Ref<T[]> | Lista elementi caricati |
loading | Ref<boolean> | Caricamento lista in corso |
saving | Ref<boolean> | Salvataggio in corso |
showDialog | Ref<boolean> | Visibilità dialog crea/modifica |
isEdit | Ref<boolean> | true se dialog è in modalità modifica |
editingId | Ref<K | null> | ID elemento in modifica |
repo | Repository | Accesso diretto al repository |
Metodi
// Carica tutti gli elementi (con filtri opzionali PostgREST)
await crudTable.list()
await crudTable.carica({ idboard: 'eq.42', attivo: 'eq.true' })
// Apre dialog in modalità crea
crudTable.apriNuovo()
// Apre dialog in modalità modifica
crudTable.apriModifica(elemento)
// Salva (POST o PATCH in base a isEdit)
await crudTable.salva(payload)
// Elimina
await crudTable.elimina(id)
Pattern tipico con componente dialog
<script setup lang="ts">
import { useCrudTable } from '@pzeta/vue-kanban'
import { createBoardCampoRepository } from '@pzeta/vue-kanban'
const crud = useCrudTable<BoardCampoRow, number>({
repo: createBoardCampoRepository(),
primaryKey: 'idboardcampo',
})
onMounted(() => crud.carica({ idboard: `eq.${props.boardId}` }))
</script>
<template>
<DataTable :value="crud.items.value" :loading="crud.loading.value">
<!-- colonne... -->
<template #footer>
<Button label="Nuovo campo" @click="crud.apriNuovo()" />
</template>
</DataTable>
<MyCampoDialog
v-model:visible="crud.showDialog.value"
:item="crud.isEdit.value ? crud.items.value.find(i => i.idboardcampo === crud.editingId.value) : undefined"
:saving="crud.saving.value"
@save="crud.salva"
/>
</template>
Componenti preconfigurati
Invece di istanziare useCrudTable manualmente, considera i componenti pronti:
| Componente | Entità gestita |
|---|---|
BoardCrudTable | Board |
FaseCrudTable | Fasi pipeline |
PrioritaCrudTable | Priorità |
TagCrudTable | Tag |
StatoSchedaCrudTable | Stati scheda (solo edit) |
TemplateEmailCrudTable | Template email |
TemplateSmssCrudTable | Template SMS |
BoardCampoCrudTable | Campi dinamici board |