Salta ai contenuti

Callback delle entità

Quando si lavora con un’entità, puoi allegare diversi callback prima e dopo che viene salvata o recuperata: onFetch, onIdUpdate, onPreSave, onSaveSuccess e onSaveFailure.

Questi callback sono definiti a livello di collezione sotto la prop callbacks.

Il callback onIdUpdate può essere usato per aggiornare l’ID dell’entità prima di salvarla. Questo è utile se hai bisogno di generare l’ID da altri campi.

Questo è utile se hai bisogno di aggiungere logica o modificare alcuni campi dell’entità prima/dopo il salvataggio o l’eliminazione delle entità.

La maggior parte dei callback è asincrona.

import {
buildCollection,
buildEntityCallbacks,
EntityOnDeleteProps,
EntityOnSaveProps,
EntityOnFetchProps,
EntityIdUpdateProps,
toSnakeCase
} from "@firecms/core";
type Product = {
name: string;
uppercase_name: string;
}
const productCallbacks = buildEntityCallbacks({
onPreSave: ({
collection,
path,
entityId,
values,
previousValues,
status
}) => {
// restituisce i valori aggiornati
values.uppercase_name = values.name?.toUpperCase();
return values;
},
onSaveSuccess: (props: EntityOnSaveProps<Product>) => {
console.log("onSaveSuccess", props);
},
onSaveFailure: (props: EntityOnSaveProps<Product>) => {
console.log("onSaveFailure", props);
},
onPreDelete: ({
collection,
path,
entityId,
entity,
context
}: EntityOnDeleteProps<Product>
) => {
if (!context.authController.user)
throw Error("Gli utenti non connessi non possono eliminare i prodotti");
},
onDelete: (props: EntityOnDeleteProps<Product>) => {
console.log("onDelete", props);
},
onFetch({
collection,
context,
entity,
path,
}: EntityOnFetchProps) {
entity.values.name = "Forced name";
return entity;
},
onIdUpdate({
collection,
context,
entityId,
path,
values
}: EntityIdUpdateProps): string {
// restituisce l'ID desiderato
return toSnakeCase(values?.name)
},
});
const productCollection = buildCollection<Product>({
name: "Product",
path: "products",
properties: {
name: {
name: "Name",
validation: { required: true },
dataType: "string"
},
uppercase_name: {
name: "Uppercase Name",
dataType: "string",
disabled: true,
description: "This field gets updated with a preSave callback"
}
},
callbacks: productCallbacks
});
  • collection: Collezione risolta dell’entità

  • path: string Percorso completo dove questa entità viene salvata (può contenere alias non risolti)

  • resolvedPath: string Percorso completo con alias risolto

  • entityId: string ID dell’entità

  • values: EntityValues Valori che vengono salvati

  • previousValues: EntityValues Valori precedenti dell’entità

  • status: EntityStatus Entità nuova o esistente

  • context: FireCMSContext Contesto dello stato dell’app

  • collection: Collezione risolta dell’entità

  • path: string Percorso completo dove questa entità viene salvata

  • entityId: string ID dell’entità

  • entity: Entity Entità eliminata

  • context: FireCMSContext Contesto dello stato dell’app

  • collection: EntityCollection Collezione risolta dell’entità

  • path: string Percorso completo dove questa entità viene salvata

  • entityId: string ID dell’entità

  • values: Valori entità

  • context: FireCMSContext Contesto dello stato dell’app