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àTipoDescrizione
itemsRef<T[]>Lista elementi caricati
loadingRef<boolean>Caricamento lista in corso
savingRef<boolean>Salvataggio in corso
showDialogRef<boolean>Visibilità dialog crea/modifica
isEditRef<boolean>true se dialog è in modalità modifica
editingIdRef<K | null>ID elemento in modifica
repoRepositoryAccesso 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:

ComponenteEntità gestita
BoardCrudTableBoard
FaseCrudTableFasi pipeline
PrioritaCrudTablePriorità
TagCrudTableTag
StatoSchedaCrudTableStati scheda (solo edit)
TemplateEmailCrudTableTemplate email
TemplateSmssCrudTableTemplate SMS
BoardCampoCrudTableCampi dinamici board