Cómo acceder a un modelo diferente en un conector

Estoy bastante cerca, pero no logro resolverlo. He creado un conector aquí connectors/revision-user-details-after:

En mi clase de conector, puedo acceder a args y component mediante el método shouldRender, lo que me permite obtener el nombre de usuario actual y el ID del post:

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

También me gustaría obtener el nombre de usuario del usuario que editó el post (en este caso, “nachocab”), pero args.model es un Post, no un PostRevision.

Así es como se ve el modal de historial:

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

Y el controlador de historial:

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

¿Cómo puedo acceder a la revisión en el conector?

¡Ah, acabo de darme cuenta de que puedo hacer esto!

import Post from "discourse/models/post";

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

ACTUALIZACIÓN
@eviltrout Pensé que ya lo tenía resuelto, pero acabo de darme cuenta de que, como Post.loadRevision devuelve una Promise, no puedo colocarlo dentro de shouldRender():

import Post from 'discourse/models/post';

export default {
  shouldRender(args, component) {
    // devolver una promesa no funciona
    return Post.loadRevision(args.model.id, args.model.version).then((revision) => {
      return args.model.username !== revision.username;
    });
  },
};

¿Hay otra forma de hacer esto?

Podrías moverlo fuera del conector a un nuevo componente que insertes y hacer que muestre un estado de “Cargando…” hasta que se cumpla la promesa, momento en el cual estableces el valor y lo muestras.

Gracias, Robin. Tu consejo fue justo lo que necesitaba. :tada:

Esto funciona, pero me pregunto si es necesaria la llamada directa a ajax (cuando seguí la ruta del conector, tenía acceso al Post pero no a la Revisión; ahora que seguí la ruta del componente, tengo acceso a la Revisión, pero no al 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) => {
      // solo mostrar el botón si el autor de la revisión no es el autor del post
      this.set('isVisible', this.get('revisionAuthor') !== post.username);
    });
  }
});

No estoy seguro de por qué no tienes acceso a las mismas variables en la plantilla que en el conector. ¡Debería ser idéntico!