Abbiamo utilizzato l’API per modificare il controller del compositore dei post e aggiungere un errore. Non ho l’ultima versione del codice a portata di mano, ma era più o meno così:
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: 'Devi selezionare una sottocategoria',
lastShownAt: lastValidatedAt
});
} else {
return this._super(categoryId, lastValidatedAt);
}
}
}
);
In sintesi, questo codice controlla semplicemente il numero di elementi nell’input della categoria e restituisce un errore se ce n’è solo uno o nessuno. Una sottocategoria avrà sempre due elementi ‘’. In questa versione del frammento che mi è rimasta, ciò veniva fatto tramite jQuery. Credo che ci fosse anche un’altra chiamata API per ottenere la profondità di una categoria.