Colocar campo personalizado de usuario en la página de cuenta de usuario

Alguien quiere campos personalizados de usuario en la página de la cuenta (no les gusta la página de perfil por varias razones).

Parece que debería poder hacer esto en un componente del tema.

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/templates/preferences/account.hbs#L207

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/templates/preferences/profile.hbs#L24-L28

common/head_tag.html:

<script type="text/x-handlebars" data-template-name="/connectors/user-preferences-account/lc-ucf">
<div style="height: 25px; width: 25px;background: blue"></div>
<h3>Campos personalizados de usuario para {{ model.username}}</h3>
Esto son los campos de usuario: {{model.user_fields}}.
{{log "ESTO" model.user_fields}}
{{#each model.user_fields |uf|}}
{{log "ESTOESTOESTO" this}}
  <div class="control-group">
    {{user-field field=uf.field value=value}}
  </div>
{{/each}}
<div class='clearfix'></div>
</script>

Sin embargo, no logro acceder a los campos personalizados de usuario.

Recibo mi cuadro azul.

Veo que puedo acceder a model.username.

En el registro de la consola veo:

ESTO {3: "STEM Professional (industry)"}

Estoy seguro de que estoy haciendo algo tonto, pero después de leer varias veces la excelente Guía del desarrollador para temas, estoy atascado.

Bueno, estoy haciendo de nuevo lo de publicar sobre algún problema que estoy intentando resolver..

Ahora estoy tratando de resolver el mismo problema en un plugin. He creado myplugin/assets/javascripts/discourse/connectors/preferences/account/user-custom-controls/my-stuff.hbs y eso ha añadido algunas cosas a la página (¡igual que antes!) y, de nuevo, no sé cómo (1) obtener los datos, (2) decirle a Ember (?) que debe actualizar el campo cuando se guarda el formulario.

Creo que ahora quizás necesito sobrescribir o agregar algo a account.js.es6 y añadir los user_fields a this.saveAttrNames para que sepa guardarlos si se actualizan y también obtener los datos en userFields.

He revisado un montón de plugins, pero no logro dar con ello.

Ok, logré que funcione, pero es un poco complicado.

Crea una clase conector con este código.

import { set } from "@ember/object";
import EmberObject from "@ember/object";

export default {
@discourseComputed("model.user_fields.@each.value")
  publicUserFields() {
    const siteUserFields = this.site.get("user_fields");
    if (!isEmpty(siteUserFields)) {
      const userFields = this.get("model.user_fields");
      return siteUserFields
        .filterBy("show_on_user_card", true)
        .sortBy("position")
        .map(field => {
          set(field, "dasherized_name", field.get("name").dasherize());
          const value = userFields ? userFields[field.get("id")] : null;
          return isEmpty(value) ? null : EmberObject.create({ value, field });
        })
        .compact();
    }
  },
}

En la plantilla del conector,

{{#if publicUserFields}}
        <div class="card-row fifth-row">
          <div class="public-user-fields">
            {{#each publicUserFields as |uf|}}
              {{#if uf.value}}
                <div class="public-user-field {{uf.field.dasherized_name}}">
                  <span class="user-field-name">{{uf.field.name}}:</span>
                  <span class="user-field-value">{{uf.value}}</span>
                </div>
              {{/if}}
            {{/each}}
          </div>
        </div>
{{/if}}

@pfaffman ¿funcionó?

Todavía no he tenido la oportunidad de probarlo, pero supongo que funcionará. Hay tanto que aún tengo por aprender. ¡Muchas gracias por tu generosidad! No puedo agradecerte lo suficiente, pero lo haré en un momento cuando lo pruebe.