Je suis presque arrivé au bout, mais je n’arrive pas à trouver la solution. J’ai créé un connecteur ici connectors/revision-user-details-after :
Dans ma classe de connecteur, je peux accéder à args et component via la méthode shouldRender, ce qui me permet d’obtenir le nom d’utilisateur actuel et l’identifiant du message :
export default {
shouldRender(args, component) {
console.log('postAuthor', args.model.username)
console.log('postId', args.model.id)
}
};
J’aimerais également obtenir le nom d’utilisateur de l’utilisateur qui a modifié le message (dans ce cas, “nachocab”), mais args.model est un Post et non un PostRevision.
Voici à quoi ressemble la fenêtre modale d’historique :
https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/templates/modal/history.hbs#L5
Et le contrôleur d’historique :
https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/controllers/history.js#L74
Comment puis-je accéder à la révision dans le connecteur ?
Ah, je viens de réaliser que je peux faire cela !
import Post from "discourse/models/post";
Post.loadRevision(args.model.id, args.model.version).then((result) => {
const editorUsername = result.username;
doSomethingElse();
});
MISE À JOUR
@eviltrout Je pensais avoir résolu ce problème, mais je viens de réaliser que puisque Post.loadRevision retourne une Promise, je ne peux pas l’inclure dans shouldRender() :
import Post from 'discourse/models/post';
export default {
shouldRender(args, component) {
// retourner une Promise ne fonctionne pas
return Post.loadRevision(args.model.id, args.model.version).then((revision) => {
return args.model.username !== revision.username;
});
},
};
Existe-t-il une autre façon de procéder ?
Vous pourriez le déplacer hors du connecteur vers un nouveau composant que vous insérez, et afficher un état « Chargement… » jusqu’à ce que la promesse soit résolue, moment auquel vous set la valeur et l’affichez.
Merci, Robin. Ton astuce était exactement ce dont j’avais besoin. 
Cela fonctionne, mais je me demande si l’appel ajax direct est nécessaire (lorsque j’ai emprunté le chemin du connecteur, j’avais accès au Post mais pas à la Révision ; maintenant que j’ai pris le chemin du composant, j’ai accès à la Révision, mais pas au Post
)
{{! templates/connectors/revision-user-details-after/reply-to-editor.hbs }}
{{reply-to-editor
postId=model.post_id
postVersion=model.current_version
revisionAuthor=model.username
}}
{{! templates/components/reply-to-editor.hbs }}
{{#if isVisible}}
{{d-button
action=(action 'replyToEditor')
label='test'
}}
{{/if}}
{{! javascripts/discourse/components/reply-to-editor.js.es6 }}
import { ajax } from 'discourse/lib/ajax';
export default Ember.Component.extend({
isVisible: true,
didRender() {
if (!this.get('postId')) return;
ajax(`/posts/${this.get('postId')}`).then((post) => {
// n'afficher le bouton que si l'auteur de la révision n'est pas l'auteur du post
this.set('isVisible', this.get('revisionAuthor') !== post.username);
});
}
});
Je ne sais pas pourquoi vous n’avez pas accès aux mêmes variables dans le modèle que dans le connecteur. Cela devrait être identique !