Comment ajouter des contraintes sur des Smart Fields du formulaires lors de la saisie ?

Prérequis

Afin de pouvoir suivre ce guide, il faut préalablement savoir Comment déclencher un code javascript lors de la sélection d’un menu spécifique ?.

Comment procéder ?

On souhaite ajouter une contrainte sur le titre des menus afin que la première lettre commence par une majuscule.

La méthode addConstraint permet de charger une contrainte dans le Smart Element.

Recommandations

Si vous n’êtes pas familier avec la méthode addConstraint, il est recommandé de lire la documentation associée disponible ici

Modifier le fichier src/public/menuEdit.js :





















 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


window.ank.smartElement.globalController.registerFunction("menuEdit", (controller) => {
  controller.addEventListener("beforeValidate", function eventBeforeSave(event, documentObject, data) {
    const description = controller.getValue("menu_description").value;
    if (description == null) {
      event.preventDefault();
      controller.showMessage({
        type: "error",
        message: "Le menu n’a pas de description.",
      });
    }
    const price = controller.getValue("menu_price").value;
    if (price > 30) {
      event.preventDefault();
      controller.showMessage({
        type: "warning",
        message: "Le menu est au-dessus de 30 €",
      });
    }
  });

  controller.addEventListener("ready", function setMenuConstraint(event, smartElement) {
    controller.addConstraint(
      {
        smartFieldCheck: (sf) => sf.id === "menu_title",
        name: "menuTitleConstraint",
      },
      function (smartElement, smartField, values) {
        const titleFirstChar = values.current.value.charAt(0);
        const isFirstCharUpperCase = titleFirstChar.toUpperCase() === titleFirstChar;
        if (!isFirstCharUpperCase) {
          return `Le titre doit commencer par une majuscule`;
        }
      }
    );
  });
});

Vous pouvez maintenant déployer vos modifications :

npx @anakeen/anakeen-cli deploy -c http://localhost:8080/control -s . -u admin -p anakeen --reinstall

Et voir le résultat sur un MENU en création ou modification :

http://localhost:8080/api/v2/smart-elements/MENU/views/!defaultCreation.html

menuConstraint

Et ensuite ?

Comment rediriger vers une autre représentation après la sauvegarde ?