Nous avons utilisé l’API pour modifier le contrôleur du compositeur de messages et y ajouter une validation d’erreur. Je n’ai pas la dernière version du code sous la main, mais cela ressemblait à ceci :
var computed = require("ember-addons/ember-computed-decorators").default;
api.modifyClass('controller:composer',
{
save(opts) {
var categoryNb = $('.category-input .category-chooser .selected-name > span').length;
if((categoryNb !== 0 && categoryNb < 2) ) {
this.set("lastValidatedAt", Date.now());
return false;
}
return this._super(opts);
},
@computed("model.categoryId", "lastValidatedAt")
categoryValidation(categoryId, lastValidatedAt) {
var InputValidation = require("discourse/models/input-validation").default;
var categoryNb = $('.category-input .category-chooser .selected-name > span').length;
if( (categoryNb !== 0 && categoryNb < 2) ) {
return InputValidation.create({
failed: true,
reason: 'Vous devez sélectionner une sous-catégorie',
lastShownAt: lastValidatedAt
});
} else {
return this._super(categoryId, lastValidatedAt);
}
}
}
);
En résumé, cela vérifie simplement le nombre d’éléments dans le champ de sélection de catégorie et renvoie une erreur s’il n’y en a qu’un ou zéro. Une sous-catégorie aura toujours deux éléments ‘’. Dans cette version du fragment que j’avais sous la main, cela était fait via jQuery. Je pense qu’il y avait un autre appel API pour obtenir la profondeur d’une catégorie.