Aller au contenu

Collections

Une collection est un objet TypeScript qui décrit une table de base de données et la manière dont elle doit apparaître dans l’interface d’administration. Elle définit :

  • Schéma — Propriétés (colonnes), leurs types et règles de validation
  • Relations — Clés étrangères, tables de jonction et chemins de jointure
  • Sécurité — Politiques de sécurité au niveau des lignes (Row Level Security)
  • Comportement de l’interface utilisateur — Modes d’affichage, édition en ligne, vues d’entité, actions
  • Hooks de cycle de vie — Fonctions de rappel pour les opérations de création, mise à jour, suppression
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
}
}
};
PropriétéTypeDescription
slugstringObligatoire. Identifiant sécurisé pour les URL. Utilisé dans l’URL de l’interface d’administration et le chemin de l’API REST (/api/data/{slug}).
namestringObligatoire. Nom d’affichage (pluriel). Affiché dans la navigation et les en-têtes de page.
singularNamestringNom d’affichage pour une entité unique. Utilisé dans “Nouveau Produit”, “Modifier Produit”, etc.
tablestringObligatoire. Nom de la table PostgreSQL. S’il est différent du slug, il permet de découpler les URL des noms de table.
iconstringClé d’icône Material Design. Voir Google Fonts Icons.
PropriétéTypeDescription
propertiesPropertiesObligatoire. Mappage clé de propriété → définition de propriété. Chaque clé devient une colonne de base de données.
relationsRelation[]Relations SQL — clés étrangères, tables de jonction. Voir Relations.
securityRulesSecurityRule[]Politiques de sécurité au niveau des lignes (Row Level Security). Voir Règles de sécurité.
PropriétéTypeDéfautDescription
defaultViewMode"list" | "table" | "cards" | "kanban""table"Mode d’affichage par défaut
enabledViewsViewMode[]All fourQuels modes d’affichage sont disponibles
kanbanKanbanConfigConfiguration Kanban (propriété de colonne)
openEntityMode"side_panel" | "full_screen" | "split""full_screen"Comment les entités s’ouvrent pour l’édition
sideDialogWidthnumber | stringLargeur du dialogue latéral
inlineEditingbooleantrueActiver l’édition en ligne dans la vue feuille de calcul
defaultSize"xs" | "s" | "m" | "l" | "xl""m"Hauteur de ligne par défaut dans le tableau
paginationboolean | numbertrue (50)Activer la pagination et/ou définir la taille de la page
listPropertiesstring[]Propriétés à afficher dans la vue liste
propertiesOrderstring[]Ordre des colonnes dans la vue tableau
selectionEnabledbooleantrueActiver la sélection de lignes
hideFromNavigationbooleanfalseMasquer de la navigation latérale
defaultSelectedViewstring | functionVue ou sous-collection par défaut à ouvrir
PropriétéTypeDéfautDescription
formAutoSavebooleanfalseSauvegarde automatique lors de la modification d’un champ
localChangesBackup"manual_apply" | "auto_apply" | false"manual_apply"Sauvegarder les modifications non enregistrées
hideIdFromFormbooleanfalseMasquer l’ID de l’entité du formulaire
hideIdFromCollectionbooleanfalseMasquer la colonne ID du tableau
includeJsonViewbooleanfalseAfficher un onglet JSON dans la vue entité
historybooleanfalseSuivre les modifications dans l’historique de l’entité
alwaysApplyDefaultValuesbooleanfalseAppliquer les valeurs par défaut à chaque sauvegarde
previewPropertiesstring[]Propriétés à afficher dans les aperçus de référence
titlePropertystringPropriété à utiliser comme titre de l’entité
PropriétéTypeDescription
callbacksEntityCallbacksHooks de cycle de vie (beforeSave, afterSave, beforeDelete, etc.)
entityActionsEntityAction[]Actions personnalisées sur les entités (archiver, publier, etc.)
ActionsReact.ComponentTypeComposant d’actions de barre d’outils personnalisé
entityViewsEntityCustomView[]Onglets personnalisés dans la vue détaillée de l’entité
additionalFieldsAdditionalFieldDelegate[]Colonnes calculées/virtuelles
childCollections() => EntityCollection[]Collections enfants imbriquées
subcollections() => EntityCollection[]Collections imbriquées (par exemple, commande → articles de ligne)
exportableboolean | ExportConfigActiver l’exportation de données
ownerIdstringID de l’utilisateur propriétaire (utilisé par les plugins/code personnalisé)
overridesEntityOverridesSurcharges pour la vue d’entité
driverstringPilote de base de données à utiliser (par défaut : "(default)")
databaseIdstringID de la base de données/schéma dans le pilote

Pour les collections dynamiques qui changent en fonction de l’utilisateur ou des données externes, utilisez une fonction de construction :

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

Vous pouvez définir des filtres par défaut ou forcés :

{
// Filtre par défaut — les utilisateurs peuvent le modifier
filter: { active: ["==", true] },
// Filtre forcé — ne peut pas être modifié
forceFilter: { tenant_id: ["==", currentTenantId] },
// Tri par défaut
sort: ["created_at", "desc"]
}
  • Entity Callbacks — Hooks de cycle de vie pour la synchronisation des données entre collections, la validation, les effets secondaires
  • Properties — Tous les types de propriétés et options
  • Relations — Clés étrangères, tables de jonction, jointures
  • Security Rules — Sécurité au niveau des lignes (Row Level Security)
  • View Modes — Liste, Tableau, Cartes, Kanban