Tenho add_model_callback(DiscourseSubscriptions::Customer, :after_save) do ... em um plugin. A maioria das compras resulta na criação de um “servidor” (um modelo personalizado). Hoje, consegui aprender como fazer com que outros locais onde um servidor é criado transitem para a página para configurar o novo servidor, com algo como
Server.createServer(server).then((result) => {
if (result.server) {
this.get("servers").pushObject(EmberObject.create(result.server));
const id = result.server.id;
window.location = getURL(`/pfaffmanager/servers/${id}`);
}
O que eu gostaria de fazer agora é ter o Discourse redirecionar de forma semelhante para essa nova página depois que a caixa de diálogo “obrigado pela sua compra” for dispensada.
Não me importo se acontece em Rails ou Ember, mas acho que precisa acontecer em Ember? Eu não entendo bem (ou seja, eu não tenho ideia, de forma alguma) como fazer sequestrar estender o controller/model/o que quer que seja no plugin de assinaturas do meu plugin.
O que é muito, muito próximo. O problema agora é que há uma condição de corrida, pois o add_model_callback(DiscourseSubscriptions::Customer, :after_save) do pode não ter terminado antes que eu faça minha consulta ajax para obter os servidores.
Bem, é mais estranho que isso. Mesmo que eu adicione um atraso (usando later) antes de fazer a chamada ajax para obter a nova lista de servidores, ela ainda está obtendo uma lista desatualizada, não a que foi adicionada após o novo servidor ter sido adicionado no callback. Posso atualizar a janela em outra aba e ver que ela obtém os dados corretos antes de fazer a chamada ajax.
Acho que vou desistir por enquanto. Para o caso em que o servidor existe antes da compra (que acho que é mais comum - você configuraria tudo e então diria, “sim, vamos fazer isso”) funciona; é apenas o caso em que eles dizem “Sim, quero pagar por uma instalação; vou pagar e depois ver o que acontece.”