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