Sto cercando di capire come aggiungere un campo personalizzato ai topic, lavorando su un esempio molto basilare. Obiettivo: aggiungere un campo personalizzato chiamato “sample_field” a ogni topic creato, con un valore stringa semplice.
Ho esaminato diversi esempi, come il plugin poll e il plugin solved e questa discussione, ma questi plugin fanno molto di più con i loro campi personalizzati, quindi non ho ancora capito il codice di base necessario.
Quindi non ci sono ancora arrivato: il mio file plugin.rb manca di qualcosa (credo), e non ho ancora capito come associare il valore stringa al campo personalizzato al momento della creazione del topic.
Cosa mi serve per far funzionare tutto questo?
Qualsiasi aiuto è apprezzato. Grazie!
Ecco cosa ho finora
plugin.rb:
//crea il campo personalizzato:
after_initialize do
Topic.register_custom_field_type('sample_field', :string)
add_to_serializer(:topic_view, :custom_fields) { object.custom_fields } //se voglio mostrare il campo personalizzato sul lato client
end
assets/javascripts/initializers/topic-custom-field.js.es6:
//inizializza l’oggetto dei campi personalizzati e rendilo possibile inviarlo al server:
import { withPluginApi } from 'discourse/lib/plugin-api';
export default {
name: 'topic-custom-field',
initialize() {
withPluginApi('0.8.31', api => {
api.modifyClass('model:topic', {
custom_fields: {},
asJSON() {
return Object.assign(this._super(), {
custom_fields: this.custom_fields
});
}
})
})
}
}
Quindi, come aggiungo il valore del campo personalizzato al topic al momento del salvataggio?
Credo che l’azione chiave “save” per un topic avvenga qui nel codice:
app/templates/composer.hbs:
<div class="save-or-cancel">
{{#unless model.viewFullscreen}}
{{composer-save-button action=(action "save")
icon=saveIcon
label=saveLabel
disableSubmit=disableSubmit}}
...
Come faccio a eseguire un’azione (in questo caso, aggiungere un valore al campo personalizzato) quando si verifica quell’azione “save”?
Ho provato a creare un file js sotto initializers, dove potrei fare qualcosa come:
api.modifyClass('component:composer-save-button', {
actions: {
topic.set('custom_fields.sample_field', 'here's a value for the sample_field')
}
}
Ma devo essere in grado di collegare quel “topic.set” all’azione “save” in composer.hbs, e non so come farlo.
E se ci fosse un modo più semplice per farlo, sono felice di sentirlo!