Colocar campo personalizado do usuário na página da conta do usuário

Alguém quer campos personalizados de usuário na página da conta (eles não gostam da página de perfil por motivos próprios).

Parece que eu deveria ser capaz de fazer isso em um componente de 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 usuário para {{ model.username}}</h3>
Este é uf: {{model.user_fields}}.
{{log "ISSO" model.user_fields}}
{{#each model.user_fields |uf|}}
{{log "ISSOISSOISSO" this}}
  <div class="control-group">
    {{user-field field=uf.field value=value}}
  </div>
{{/each}}
<div class='clearfix'></div>
</script>

Não consigo acessar os campos personalizados de usuário, no entanto.

Consigo minha caixa azul.\n
Vejo que consigo acessar model.username.

No log do console, vejo:

ISSO {3: "STEM Profissional (indústria)"}

Tenho certeza de que estou fazendo algo bobo, mas depois de ler diversas vezes o excelente Guia do Desenvolvedor para Temas, estou sem ideias.

Bem, estou fazendo de novo aquela coisa de postar sobre algum problema que estou tentando resolver..

Agora estou tentando resolver o mesmo problema em um plugin. Criei myplugin/assets/javascripts/discourse/connectors/preferences/account/user-custom-controls/my-stuff.hbs e isso adicionou algumas coisas à página (assim como antes!) e, novamente, não sei como (1) obter os dados, (2) dizer ao Ember (?) que ele deve atualizar o campo quando o formulário for salvo.

Acho que agora talvez eu precise sobrescrever ou adicionar algo ao account.js.es6 e adicionar os user_fields ao this.saveAttrNames, para que ele saiba salvá-los se forem atualizados e também obter os dados em userFields.

Já explorei vários plugins, mas não consegui chegar lá.

Ok, consegui fazer funcionar, mas é um pouco complicado.

Crie uma classe de conector com 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();
    }
  },
}

No template do 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 funcionou?

Ainda não tive a oportunidade de testar, mas acho que vai funcionar. Há tanto que ainda preciso aprender. Muito obrigado pela sua generosidade! Não consigo agradecer o suficiente, mas vou tentar agradecer novamente quando fizer o teste.