Demande d'aide pour trouver le nom complet d'un utilisateur dans un contexte de composant de thème

J’essaie d’injecter le nom complet d’un utilisateur dans le modèle Handlebars du sujet mis en avant. Je n’ai aucun problème à insérer une valeur de test dans le modèle, mais je n’arrive pas à obtenir la valeur que je souhaite. Dans le code ci-dessous, j’aimerais idéalement que realname renvoie le nom complet de l’utilisateur à la place de « Test » :

<script type="text/discourse-plugin" version="0.8">
    var FeaturedTopicView = require('discourse/components/featured-topic').default;
    FeaturedTopicView.reopen({
        fullName: function() {
            // Récupérer le nom d'utilisateur du dernier poster
            let username = this.topic.last_poster.username;

            // Essayer d'obtenir le nom complet de l'utilisateur avec le nom d'utilisateur établi ci-dessus
            let realname = Discourse.User.findByUsername(username).then(function(result) {
                               return result.name;
                           }).then(function(result) {
                               // Cela nous donne les vrais noms ! Mais ils sont inaccessibles en dehors de ce bloc
                               console.log(result);
                           });
            
            return "Test";
        }.property()
    });
</script>

L’utilisateur qui m’intéresse est le dernier poster, donc dans ce cas, il semble que je n’aie à ma disposition que this.topic.last_poster. Cela a trois valeurs associées : username, id et avatar_template. Malheureusement, ce dont j’ai vraiment besoin, c’est de name.

J’espérais qu’il y ait un moyen de rechercher le nom complet d’un utilisateur en utilisant id ou username. Je ne suis pas très familier avec le concept de promesses et leur utilisation, mais j’ai réussi à valider un concept en utilisant Discourse.User.findByUsername(username). Je peux correctement console.log les noms complets dont j’ai besoin, mais ils semblent être piégés dans cette portée.

Je pourrais me tromper complètement dans mon approche, mais c’était ma meilleure tentative basée sur mes connaissances actuelles.

Toute aide ou suggestion serait grandement appréciée ! N’hésitez pas à me faire savoir si je dois clarifier quoi que ce soit.

This is going to have to go in the serializer or you are going to be doing the worst kind of N+1 which is a Network+1

I am ok with last poster including name if the site has prioritize full names in the UI.

Otherwise you are going to need a plugin.

Thanks a bunch for your response, @sam!

It looks like “name” was included in the relevant serializer at one point, but was removed:

With that in mind, is it cool if I submit a PR with “name” back in place if the “prioritize full names” setting is enabled? Or is there a deeper reason to exclude this from core that I’m not aware of?

Hmmm @tgxworld is ill at the moment, can you hold a few days on this and remind me again Friday.

boop, reminder on Friday

It was added in this commit and I removed it because I was adding more overhead to the BasicUserSerializer when I only needed title/name in one spot of the app.

That reasoning makes sense. So with that in mind, what do you suggest as the most ideal solution to my problem? Is it worth doing a PR to include it once again for those concerned with prioritizing the full name of a user in any UI customizations, or is this something that should be restricted to a plugin? If you have any other suggestions on how to tackle this that I haven’t thought of, that would be great as well.

PS: Hope you are feeling all better :slight_smile: