Actualmente configuré alpine para realizar una solicitud POST a una cierta API en mis vistas con el método x-init. El método es bastante simple usando fetch y luego manejando la respuesta.
function getDocumentStatus() { return { isLoading: false, status: null, fetchStatus() { this.isLoading = true; fetch('API_URL', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' }, body: JSON.stringify({document_uuid: '<%= @document_uuid %>'}), }) .then(response => response.json()) .then(data => { this.isLoading = false; if (data === 'pending') { this.status = 'Waiting for results' } else if (data === 'signed') { this.status = 'Results signed' } else if (data === 'new') { this.status = 'Sent' } }) } } }Sin embargo, recientemente encontré un envoltorio Ruby para esta API y, dado que también estoy haciendo mucho más con la API en particular, comencé a incorporar el envoltorio a mi aplicación.
Usando este contenedor simplemente puedo llamar
client.document.status(document_id: xxx)para obtener el estado de un documento. Estoy tratando de averiguar cómo puedo usar esto para reemplazar la lógica actual en las vistas y deshacerme de alpine para posiblemente algo así como un controlador de estímulo. ¡Cualquier sugerencia sobre cómo abordar esto sería apreciada!
Algo que he visto es https://stimulus.hotwired.dev/handbook/working-with-external-resources pero parece que necesitaría algo como una acción de controlador
def status client.document.status(document_id: xxx) endy luego un parcial para esta acción que luego presentaría a través de un estímulo en la vista. Quiero mostrar los resultados. Me parece un poco que esto volvería a ser algo que realmente no pertenecería al controlador (?).
Puede intentar usar Sidekiq para procesar cosas en segundo plano. Luego, en su front-end, puede actualizar la página tan pronto como esté lista. Esto suena bastante simple, sin embargo, Sidekiq no proporciona nada para monitorear los estados de sus trabajos. En la versión pro, puede usar lotes y allí tiene una funcionalidad de devolución de llamada, sin embargo, puede consultar las gemas recomendadas para implementar eso.