Acabo de pasar por este proceso y experimenté una serie de pruebas y errores, así que pensé en documentar mis hallazgos para ayudar al siguiente desarrollador que se incorpore.
Lo que necesité:
-
Registrar tu tipo de campo personalizado (el mío era booleano, el predeterminado es cadena)
# plugin.rb User.register_custom_field_type 'my_preference', :boolean -
Registrar que el campo personalizado debe ser editable por los usuarios. La sintaxis coincide con la de
params.permit(...)
# plugin.rb register_editable_user_custom_field :my_preference # Tipo escalar (cadena, entero, etc.) register_editable_user_custom_field [:my_preference , my_preference : []] # Para tipo de array register_editable_user_custom_field [:my_preference, my_preference : {}] # Para tipo json -
Agregarlos a los campos serializados con el CurrentUserSerializer
# plugin.rb DiscoursePluginRegistry.serialized_current_user_fields << 'my_preference' -
Crear un componente para mostrar tu preferencia de usuario
// assets/javascripts/discourse/templates/components/my-preference.hbs <label class="control-label">¡Mis preferencias personalizadas!</label> {{preference-checkbox labelKey="my_plugin.preferences.key" checked=user.custom_fields.my_preference}} -
Conectar ese componente a uno de los puntos de conexión (outlets) del plugin de preferencias (el mío estaba bajo ‘interfaz’ en las preferencias de usuario)
# assets/javascripts/discourse/connectors/user-preferences-interface/my-preference.hbs {{my-preference user=model}} -
Asegurarse de que los ‘campos personalizados’ se guarden en esa pestaña de preferencias
import { withPluginApi } from 'discourse/lib/plugin-api' export default { name: 'post-read-email', initialize () { withPluginApi('0.8.22', api => { api.modifyClass('controller:preferences/emails', { actions: { save () { this.get('saveAttrNames').push('custom_fields') this._super() } } }) }) } }
Este documento está controlado por versiones: sugiera cambios en GitHub.
of course. Just add another. It’s been a long day. Thanks!