Aller au contenu

Propriétés

Les propriétés définissent les colonnes de votre table de base de données et la manière dont elles sont affichées dans l’interface utilisateur d’administration. Chaque propriété a un type qui détermine :

  • Le type de colonne de base de données (via la génération de schéma Drizzle)
  • Le composant de champ de formulaire
  • Le rendu de la cellule de tableau
  • Les règles de validation
TypeDescriptionColonne PostgreSQL
stringTexte, sélection, markdown, téléchargement de fichier, URL, e-mailvarchar, text, jsonb
numberEntier, décimal, deviseinteger, numeric, bigint, serial
booleanInterrupteur vrai/fauxboolean
dateDate, date et heure, horodatagetimestamp, date
arrayListe ordonnée de valeursjsonb
mapObjet clé-valeurjsonb
geopointPaire latitude/longitudejsonb
referenceRéférence intégrée à une autre entitévarchar (stocke l’ID)
relationRelation de clé étrangère SQLUtilise le tableau relations

Tous les types de propriétés partagent ces options :

PropriétéTypeDescription
typestringObligatoire. Type de données (voir ci-dessus)
namestringObligatoire. Étiquette d’affichage
descriptionstringTexte d’aide affiché sous le champ
columnWidthnumberLargeur de colonne en pixels (vue tableau)
readOnlybooleanEmpêche l’édition
disabledboolean | PropertyDisabledConfigDésactiver avec info-bulle optionnelle
hideFromCollectionbooleanMasquer de la vue tableau
defaultValueanyValeur par défaut pour les nouvelles entités
validationobjectRègles de validation
FieldReact.ComponentTypeComposant de champ personnalisé
PreviewReact.ComponentTypeComposant de cellule de tableau personnalisé
propertyConfigstringClé de configuration de propriété enregistrée
editablebooleanActiver l’édition en ligne dans le tableau (par défaut : true)
name: {
type: "string",
name: "Name",
validation: { required: true, min: 2, max: 200 }
}
description: {
type: "string",
name: "Description",
multiline: true, // Textarea
markdown: true // Markdown editor
}
category: {
type: "string",
name: "Category",
enum: [
{ id: "electronics", label: "Electronics", color: "blueDark" },
{ id: "clothing", label: "Clothing", color: "pinkLight" },
]
}
email: {
type: "string",
name: "Email",
email: true, // Email validation
validation: { required: true }
}
website: {
type: "string",
name: "Website",
url: true // URL validation
}
avatar: {
type: "string",
name: "Avatar",
storage: { // File upload
storagePath: "avatars",
acceptedFiles: ["image/*"],
maxSize: 2 * 1024 * 1024
}
}
PropriétéTypeDescription
multilinebooleanRendu en tant que zone de texte (textarea)
markdownbooleanRendu en tant qu’éditeur Markdown
emailbooleanValidation du format e-mail
urlbooleanValidation du format URL
storageStorageConfigActiver le téléchargement de fichiers
enumEnumValuesRendu en tant que liste déroulante (select)
multiSelectbooleanAutoriser plusieurs sélections d’énumérations
columnTypestringColonne de base de données : "varchar", "text"
isIdstringGénération d’ID : "uuid", "cuid", "increment", "manual"
userSelectbooleanRendu en tant que sélecteur d’utilisateur
previewAsTagbooleanAfficher cette chaîne comme une étiquette dans les aperçus
clearablebooleanAjouter une icône pour effacer la valeur (définir à null)
price: {
type: "number",
name: "Price",
validation: { required: true, min: 0 }
}
quantity: {
type: "number",
name: "Quantity",
columnType: "integer" // Store as integer
}
PropriétéTypeDescription
enumEnumValuesRendu en tant que liste déroulante avec des valeurs numériques
columnTypestring"integer", "bigint", "numeric", "serial", "smallint"
isIdstringStratégie de génération d’ID
clearablebooleanAjouter une icône pour effacer la valeur (définir à null)
active: {
type: "boolean",
name: "Active",
defaultValue: true
}

Champ Interrupteur

created_at: {
type: "date",
name: "Created At",
autoValue: "on_create", // Set automatically on creation
readOnly: true
}
updated_at: {
type: "date",
name: "Updated At",
autoValue: "on_update" // Set automatically on every save
}
event_date: {
type: "date",
name: "Event Date",
mode: "date" // Date only (no time)
}

Champ Date

PropriétéTypeDescription
mode"date" | "date_time"Date seule ou date + heure (par défaut : "date_time")
autoValue"on_create" | "on_update"Horodatages définis automatiquement
columnTypestring"timestamp", "date"
timezonestringChaîne de fuseau horaire pour évaluer la date
clearablebooleanAjouter une icône pour effacer la valeur (définir à null)
tags: {
type: "array",
name: "Tags",
of: { type: "string" } // Array of strings
}
images: {
type: "array",
name: "Images",
of: {
type: "string",
storage: { storagePath: "images", acceptedFiles: ["image/*"] }
}
}
// Block editor (multiple types)
content: {
type: "array",
name: "Content Blocks",
oneOf: {
properties: {
text: {
type: "map",
properties: {
body: { type: "string", name: "Body", markdown: true }
}
},
image: {
type: "map",
properties: {
src: { type: "string", name: "Image", storage: { ... } },
caption: { type: "string", name: "Caption" }
}
}
}
}
}

Champ Bloc

PropriétéTypeDescription
ofProperty | Property[]Schéma de propriété pour les éléments du tableau
oneOfobjectTableau d’objets typés avec plusieurs types de discriminateurs
expandedbooleanLe champ doit-être initialement développé (par défaut : true)
minimalistViewbooleanAfficher les propriétés enfants directement sans panneau extensible
sortablebooleanLes éléments peuvent-ils être réordonnés (par défaut : true)
canAddElementsbooleanDe nouveaux éléments peuvent-ils être ajoutés (par défaut : true)
address: {
type: "map",
name: "Address",
properties: {
street: { type: "string", name: "Street" },
city: { type: "string", name: "City" },
zip: { type: "string", name: "ZIP Code" },
country: { type: "string", name: "Country" }
}
}
metadata: {
type: "map",
name: "Metadata",
keyValue: true // Free-form key-value editor
}

Champ Groupe

PropriétéTypeDescription
propertiesPropertiesEnregistrement des propriétés incluses dans la carte
propertiesOrderstring[]Clés ordonnées pour le rendu
previewPropertiesstring[]Propriétés à afficher dans l’aperçu du tableau
pickOnlySomeKeysbooleanPermettre à l’utilisateur d’ajouter sélectivement des clés dans l’interface utilisateur
spreadChildrenbooleanAfficher les propriétés enfants comme des colonnes séparées dans la vue tableau
minimalistViewbooleanAfficher les propriétés sans panneau d’encapsulation
expandedbooleanLe champ doit-être initialement développé (par défaut : true)
keyValuebooleanRendu en tant qu’éditeur de paires clé-valeur arbitraires

Utilisé avec les propriétés de type chaîne de caractères ou nombre pour afficher les listes déroulantes :

// Simple array
enum: ["draft", "published", "archived"]
// With labels
enum: [
{ id: "draft", label: "Draft" },
{ id: "published", label: "Published" },
{ id: "archived", label: "Archived" }
]
// With colors (for Kanban columns and chips)
enum: [
{ id: "draft", label: "Draft", color: "grayDark" },
{ id: "published", label: "Published", color: "greenDark" },
{ id: "archived", label: "Archived", color: "orangeDark" }
]

Champ Sélection

validation: {
required: true, // Field is required
unique: true, // Must be unique in the table
requiredMessage: "Custom error message",
// String-specific
min: 2, // Minimum length
max: 200, // Maximum length
matches: /^[a-z]+$/, // Regex pattern
email: true, // Email format
url: true, // URL format
// Number-specific
min: 0, // Minimum value
max: 1000, // Maximum value
integer: true, // Must be integer
// Array-specific
min: 1, // Minimum items
max: 10, // Maximum items
}

Vous pouvez rendre les champs dynamiques afin qu’ils réagissent aux valeurs de l’entité. Il existe deux façons de procéder :

Vous pouvez utiliser la propriété conditions pour définir des règles JSON Logic déclaratives qui peuvent être sérialisées et modifiées visuellement dans l’éditeur de collection.

price: {
type: "number",
name: "Price",
conditions: {
disabled: { "==": [{ "var": "values.is_free" }, true] },
required: { "!=": [{ "var": "values.is_free" }, true] },
min: 0,
clearOnDisabled: true // Set to null if field gets disabled
}
}

L’objet conditions vous donne accès à :

  • disabled, hidden, readOnly
  • required, min, max
  • defaultValue
  • enumConditions, allowedEnumValues, excludedEnumValues
  • referencePath, referenceFilter
  • canAddElements, sortable (pour les tableaux)

2. Constructeurs de propriétés (Programmatiques)

Section intitulée « 2. Constructeurs de propriétés (Programmatiques) »

Pour un comportement complexe qui ne peut pas être exprimé via JSON Logic, vous pouvez utiliser dynamicProps qui évalue une fonction Javascript.

price: {
type: "number",
name: "Price",
dynamicProps: ({ values, user }) => ({
disabled: values.is_free === true || !user.roles.includes("admin"),
validation: values.is_free ? {} : { required: true, min: 0 }
})
}