Anfrage um Hilfe beim Finden des vollständigen Namens eines Benutzers im Kontext einer Theme-Komponente

Ich versuche, den vollständigen Namen eines Benutzers in die Handlebars-Vorlage für das hervorgehobene Thema einzufügen. Es bereitet mir keine Probleme, einen Testwert in die Vorlage einzubringen, aber ich kann den gewünschten Wert scheinbar nicht erhalten. Im folgenden Code würde ich idealerweise realname mit dem vollständigen Namen des Benutzers als Wert anstelle von „Test" zurückgeben:

<script type="text/discourse-plugin" version="0.8">
    var FeaturedTopicView = require('discourse/components/featured-topic').default;
    FeaturedTopicView.reopen({
        fullName: function() {
            // Hole den Benutzernamen des letzten Posters
            let username = this.topic.last_poster.username;

            // Versuche, den vollständigen Namen des Benutzers mit dem oben festgestellten Benutzernamen zu erhalten
            let realname = Discourse.User.findByUsername(username).then(function(result) {
                               return result.name;
                           }).then(function(result) {
                               // Das liefert uns die echten Namen! Aber sie sind außerhalb dieses Bereichs nicht zugänglich
                               console.log(result);
                           });
            
            return "Test";
        }.property()
    });
</script>

Der Benutzer, der mich interessiert, ist der letzte Poster, sodass es in diesem Fall so aussieht, als hätte ich nur this.topic.last_poster zur Verfügung. Dies hat drei damit verbundene Werte: username, id und avatar_template. Leider brauche ich eigentlich name.

Ich hatte gehofft, es gäbe eine Möglichkeit, den vollständigen Namen eines Benutzers mithilfe von id oder username nachzuschlagen. Ich bin mit dem Konzept der Promises und ihrer Verwendung nicht besonders vertraut, aber ich habe mit Discourse.User.findByUsername(username) gewissermaßen ein Konzept bewiesen. Ich kann die benötigten vollständigen Namen erfolgreich mit console.log ausgeben, aber sie scheinen in diesem Bereich gefangen zu sein.

Ich könnte den gesamten Ansatz falsch wählen, aber dies war mein bester Versuch basierend auf meinem aktuellen Wissen.

Jede Hilfe oder jeder Vorschlag wäre sehr willkommen! Bitte lass mich wissen, falls ich etwas näher erläutern muss.

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: