Salta ai contenuti

Collezioni

Una collezione è un oggetto TypeScript che descrive una tabella di database e come dovrebbe apparire nell’interfaccia utente di amministrazione. Essa definisce:

  • Schema — Proprietà (colonne), i loro tipi e regole di validazione
  • Relazioni — Chiavi esterne, tabelle di congiunzione e percorsi di join
  • Sicurezza — Policy di Row Level Security
  • Comportamento dell’interfaccia utente — Modalità di visualizzazione, modifica inline, viste entità, azioni
  • Hook del ciclo di vita — Callback per operazioni di creazione, aggiornamento, eliminazione
import { EntityCollection } from "@rebasepro/types";
export const productsCollection: EntityCollection = {
slug: "products", // URL path and API endpoint
name: "Products", // Display name (plural)
singularName: "Product", // Display name (singular)
table: "products", // PostgreSQL table name
icon: "inventory_2", // Material icon key
properties: {
name: {
type: "string",
name: "Product Name",
validation: { required: true }
},
price: {
type: "number",
name: "Price",
validation: { required: true, min: 0 }
},
category: {
type: "string",
name: "Category",
enum: [
{ id: "electronics", label: "Electronics", color: "blueDark" },
{ id: "clothing", label: "Clothing", color: "pinkLight" },
{ id: "books", label: "Books", color: "orangeDark" }
]
},
description: {
type: "string",
name: "Description",
multiline: true
},
active: {
type: "boolean",
name: "Active",
defaultValue: true
},
created_at: {
type: "date",
name: "Created At",
autoValue: "on_create",
readOnly: true
}
}
};
ProprietàTipoDescrizione
slugstringObbligatorio. Identificatore URL-safe. Utilizzato nell’URL dell’interfaccia utente di amministrazione e nel percorso dell’API REST (/api/data/{slug}).
namestringObbligatorio. Nome visualizzato (plurale). Mostrato nella navigazione e nelle intestazioni delle pagine.
singularNamestringNome visualizzato per una singola entità. Utilizzato in “Nuovo Prodotto”, “Modifica Prodotto”, ecc.
tablestringObbligatorio. Nome della tabella PostgreSQL. Se diverso da slug, permette di disaccoppiare gli URL dai nomi delle tabelle.
iconstringChiave dell’icona Material. Vedi Google Fonts Icons.
ProprietàTipoDescrizione
propertiesPropertiesObbligatorio. Mappa della chiave di proprietà → definizione della proprietà. Ogni chiave diventa una colonna del database.
relationsRelation[]Relazioni SQL — chiavi esterne, tabelle di congiunzione. Vedi Relazioni.
securityRulesSecurityRule[]Policy di Row Level Security. Vedi Regole di Sicurezza.
ProprietàTipoPredefinitoDescrizione
defaultViewMode"list" | "table" | "cards" | "kanban""table"Modalità di visualizzazione predefinita
enabledViewsViewMode[]Tutte e quattroQuali modalità di visualizzazione sono disponibili
kanbanKanbanConfigConfigurazione Kanban (proprietà colonna)
openEntityMode"side_panel" | "full_screen" | "split""full_screen"Come le entità si aprono per la modifica
sideDialogWidthnumber | stringLarghezza della finestra di dialogo laterale
inlineEditingbooleantrueAbilita la modifica inline nella vista a foglio di calcolo
defaultSize"xs" | "s" | "m" | "l" | "xl""m"Altezza predefinita della riga nella tabella
paginationboolean | numbertrue (50)Abilita la paginazione e/o imposta la dimensione della pagina
listPropertiesstring[]Proprietà da visualizzare nella vista elenco
propertiesOrderstring[]Ordine delle colonne nella vista tabella
selectionEnabledbooleantrueAbilita la selezione delle righe
hideFromNavigationbooleanfalseNascondi dalla navigazione della barra laterale
defaultSelectedViewstring | functionVista o sottocollezione predefinita da aprire
ProprietàTipoPredefinitoDescrizione
formAutoSavebooleanfalseSalvataggio automatico alla modifica del campo
localChangesBackup"manual_apply" | "auto_apply" | false"manual_apply"Backup delle modifiche non salvate
hideIdFromFormbooleanfalseNasconde l’ID dell’entità dal modulo
hideIdFromCollectionbooleanfalseNasconde la colonna ID dalla tabella
includeJsonViewbooleanfalseMostra una scheda JSON nella vista entità
historybooleanfalseTraccia le modifiche nella cronologia dell’entità
alwaysApplyDefaultValuesbooleanfalseApplica i valori predefiniti ad ogni salvataggio
previewPropertiesstring[]Proprietà da visualizzare nelle anteprime di riferimento
titlePropertystringProprietà da usare come titolo dell’entità
ProprietàTipoDescrizione
callbacksEntityCallbacksHook del ciclo di vita (beforeSave, afterSave, beforeDelete, ecc.)
entityActionsEntityAction[]Azioni personalizzate sulle entità (archivia, pubblica, ecc.)
ActionsReact.ComponentTypeComponente per azioni personalizzate della barra degli strumenti
entityViewsEntityCustomView[]Schede personalizzate nella vista dettagli dell’entità
additionalFieldsAdditionalFieldDelegate[]Colonne calcolate/virtuali
childCollections() => EntityCollection[]Collezioni figlio annidate
subcollections() => EntityCollection[]Collezioni annidate (es. ordine → voci d’ordine)
exportableboolean | ExportConfigAbilita l’esportazione dei dati
ownerIdstringID utente proprietario (usato da plugin/codice personalizzato)
overridesEntityOverridesOverride per la vista entità
driverstringDriver di database da usare (predefinito: "(default)")
databaseIdstringID database/schema all’interno del driver

Per collezioni dinamiche che cambiano in base all’utente o a dati esterni, usa una funzione costruttore:

const collectionsBuilder: EntityCollectionsBuilder = ({ user, authController }) => {
const collections = [productsCollection];
if (authController.extra?.role === "admin") {
collections.push(adminSettingsCollection);
}
return collections;
};

Puoi impostare filtri predefiniti o forzati:

{
// Default filter — users can change it
filter: { active: ["==", true] },
// Forced filter — cannot be changed
forceFilter: { tenant_id: ["==", currentTenantId] },
// Default sort
sort: ["created_at", "desc"]
}