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:
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.
¡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;
});
},
};
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.
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 )
{{! 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);
});
}
});