Includi i campi personalizzati di Composer al salvataggio della bozza

Recentemente ho iniziato a indagare su un bug del plugin Events in cui i dati degli eventi mostrati nel composer vengono persi se il post viene salvato come bozza.

Ho provato a risolvere il problema e ho presto scoperto che non esiste un’API esposta da Discourse che ci permetta di farlo.

Penso che questa sia una funzionalità importante dal punto di vista dell’esperienza utente, con molti potenziali casi d’uso oltre a quello che sto affrontando.

Per questo motivo, sto creando una PR che risolve il problema introducendo un nuovo metodo nel modello Composer chiamato serializeToDraft. Questo metodo aggiungerà quei campi personalizzati durante il salvataggio del post come bozza. Inoltre, tali campi verranno impostati sul modello composer quando la bozza viene riaperta.

@angus mi sta aiutando in questa PR revisionando il codice e suggerendo i miglioramenti importanti da apportare.

Vorrei conoscere il parere del team di Discourse su questa funzionalità.

Sono d’accordo, dovremmo avere un meccanismo pulito per i plugin per aggiungere e recuperare le informazioni di bozza associate a un post.

Io e @angus abbiamo preparato una PR per risolvere questo problema qui.

Ci sono alcune cose che non capisco: perché serializeToDraft fa parte dell’API del plugin, mentre serializeOnCreate e serializeToTopic no? In quali circostanze serializeToDraft è utile senza gli altri due e viceversa? Non dovrebbe esserci un wrapper che gestisca la serializzazione sia per il post/argomento che per la bozza?

Sì, concordo. Puoi procedere a creare una PR anche per quelli.

Mi sono imbattuto in un altro problema: cosa dire del metodo saveDraft()? In qualche modo è necessario un osservatore per i campi aggiunti con serializeToDraft(), simile a questo:

altrimenti la bozza non verrà inviata all’endpoint se cambiano solo i campi personalizzati della bozza.
Quindi saveDraft() dovrebbe far parte anche dell’API, oppure in realtà questa funzionalità dovrebbe essere in qualche modo astratta.
Ho anche trovato questo osservatore dataChanged nel composermodel. Ritengo molto strano che abbiamo due osservatori che monitorano la stessa cosa. La logica all’interno di questo osservatore dovrebbe probabilmente essere attivata anche per i campi personalizzati della bozza. Mi chiedo inoltre quale dei due osservatori venga eseguito per primo e quali siano le implicazioni.