Tengo add_model_callback(DiscourseSubscriptions::Customer, :after_save) do ... en un plugin. La mayoría de las compras resultan en la creación de un “servidor” (un modelo personalizado). Hoy, he logrado aprender a hacer que otros lugares donde se crea un servidor transicionen a la página para configurar el nuevo servidor, con 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}`);
}
Lo que me gustaría hacer ahora es que Discourse redirija de manera similar a esa nueva página después de que se descarte el cuadro de diálogo “gracias por tu compra”.
No me importa si sucede en Rails o Ember, pero supongo que tiene que suceder en Ember. No entiendo del todo (es decir, no tengo ni la menor idea) cómo interceptar hijack extender el controlador/modelo/lo que sea en el plugin de suscripciones desde mi plugin.
Lo cual está muy, muy cerca. El problema ahora es que hay una condición de carrera, ya que el add_model_callback(DiscourseSubscriptions::Customer, :after_save) do podría no haber terminado antes de que haga mi consulta ajax para obtener los servidores.
Bueno, es más extraño que eso. Incluso si agrego un retraso (usando later) antes de que haga la llamada ajax para obtener la nueva lista de servidores, todavía está obteniendo una lista obsoleta, no la que está después de que el nuevo servidor se agregó en el callback. Puedo actualizar la ventana en otra pestaña y ver que obtiene los datos correctos antes de hacer la llamada ajax.
Supongo que me rendiré por ahora. Para el caso en que el servidor existe antes de la compra (que creo que es más común: configurarías todo y luego dirías, “sí, hagámoslo”), funciona; es solo el caso en el que dicen “Sí, quiero pagar por una instalación; pagaré y luego veré qué pasa”.