Sto migrando lontano dall’api.modifyClass("model:composer", ...) deprecata.
La mia attuale sovrascrittura di Composer#save modifica condizionalmente il comportamento del salvataggio, ma altrimenti deve chiamare super.save(opts).
Vedo le nuove API addModelMethod / addModelCallback, ma non riesco a trovare un esempio nel core che mostri l’uso di addModelMethod per sovrascrivere un metodo esistente mantenendo l’accesso all’implementazione originale.
addModelMethod è destinato a sovrascrivere metodi di modello esistenti in questo modo? In tal caso, come dovrebbe un plugin delegare all’implementazione originale di save()?
O esiste un altro punto di estensione che dovrebbe essere utilizzato per questo caso d’uso di Composer?
Grazie! Sto già usando composer-service-cannot-submit-post — gestisce il controllo a livello di servizio. Ma il metodo save() del modello composer controlla anche cantSubmitPost, che include missingReplyCharacters > 0, quindi un corpo vuoto viene comunque bloccato lì.
onAppEvent("post:created") è troppo tardi perché il post non viene mai creato, e serializeOnCreate aggiunge solo campi alla richiesta, quindi non aiuta con la validazione della lunghezza del corpo.
Quindi il problema rimanente è aggirare missingReplyCharacters / cantSubmitPost per il primo post. Esiste un punto di estensione supportato per questo?
La cosa migliore sarebbe aggiungere un nuovo hook al core di Discourse che ti permetta di ottenere ciò che ti serve in modo supportato. Che ne dici di qualcosa di simile a questo:
Grazie David! Ho testato il trasformatore composer-minimum-post-length e funziona: gli argomenti con corpi vuoti vengono creati correttamente.
Una cosa che ho notato: l’editor mostra ancora il messaggio “Post can’t be empty” perché la validation in composer-editor ha un controllo hard-coded replyLength < 1 che non utilizza minimumPostLength.
Quel controllo potrebbe anche rispettare il trasformatore, oppure essere saltato quando minimumPostLength è 0?