Como acessar um modelo diferente em um conector?

Estou bem perto, mas não consigo resolver. Criei um conector aqui connectors/revision-user-details-after:

Na minha classe de conector, consigo acessar args e component por meio do método shouldRender, o que me permite obter o nome de usuário atual e o ID da postagem:

export default {
  shouldRender(args, component) {
    console.log('postAuthor', args.model.username)
    console.log('postId', args.model.id)
  }
};

Gostaria também de obter o nome de usuário do usuário que editou a postagem (neste caso, “nachocab”), mas args.model é uma Post, não uma PostRevision.

É assim que o modal de histórico se parece:

https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/templates/modal/history.hbs#L5

E o controlador de histórico:

https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/controllers/history.js#L74

Como posso acessar a revisão no conector?

Ah, acabei de perceber que posso fazer isso!

import Post from "discourse/models/post";

Post.loadRevision(args.model.id, args.model.version).then((result) => {
  const editorUsername = result.username;
  doSomethingElse();
});

ATUALIZAÇÃO
@eviltrout Achei que já tinha resolvido isso, mas acabei de perceber que, como Post.loadRevision retorna uma Promise, não consigo colocá-la dentro de shouldRender():

import Post from 'discourse/models/post';

export default {
  shouldRender(args, component) {
    // retornar uma promise não funciona
    return Post.loadRevision(args.model.id, args.model.version).then((revision) => {
      return args.model.username !== revision.username;
    });
  },
};

Existe outra maneira de fazer isso?

Você pode movê-lo para fora do conector para um novo componente que você inserir e fazê-lo exibir um estado de “Carregando…” até que a promessa seja cumprida, momento em que você define o valor e o exibe.

Obrigado, Robin. Sua dica foi exatamente o que eu precisava. :tada:

Isso funciona, mas me pergunto se a chamada direta ajax é necessária (quando segui o caminho do connector, eu tinha acesso ao Post, mas não à Revisão; agora que segui o caminho do componente, tenho acesso à Revisão, mas não ao Post :thinking:)

{{! 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) => {
      // exibe o botão apenas se o autor da revisão não for o autor do post
      this.set('isVisible', this.get('revisionAuthor') !== post.username);
    });
  }
});

Não tenho certeza do motivo pelo qual você não tem acesso às mesmas variáveis no template que no conector. Deveria ser idêntico!