Como exibir dados abaixo do avatar do usuário?

Para armazenar os dados personalizados no Discourse, fui em Admin > Personalizar > Campos de Usuário e criei um campo personalizado. Os dados que preciso são um percentil representando o progresso, e escolhi “texto” como tipo de campo. O nome do campo é exibido apenas no cartão e no perfil do usuário e, infelizmente, não é usado para referenciar programaticamente os dados do campo.

O campo que armazena o progresso foi o terceiro campo personalizado que criei, portanto, “3” se tornou um número muito importante.

Usando a API, escrevi um script curl (com a ajuda de https://meta.discourse.org/t/api-cannot-update-user/63876/4) para preencher o campo com dados de teste. Como o campo que eu queria preencher era o terceiro que criei, minha linha de dados no script curl é:

--data '{ "user_fields": { "3":"87" } }'

Para exibir os dados, foi necessário ir em Admin > Configurações > Usuários, rolar até a opção “campos personalizados públicos de usuário” e adicionar o campo à lista branca. Como o campo foi o terceiro criado, tive que adicionar “user_field_3” à lista branca e não o nome real que dei ao campo.

Neste ponto, escrevi um plugin básico com o seguinte código:

import { withPluginApi } from 'discourse/lib/plugin-api';
export default {
  name: 'progress-indicator',
  initialize() {
    withPluginApi("0.8.23", api => {       
      api.decorateWidget('post-avatar:after', helper => {
        let progress = helper.attrs.userCustomFields['user_field_3'];
        let retString = helper.h("div.progress-wrapper",
          {style: 'border: 1px solid blue; width:100%;'}, 
          helper.h('div.progress-bar',{style: 'width:'+progress+'%; background-color: green; height: 10px;'})
        );
        return retString;
      });
    });
  }
};

A saída final

7 curtidas