doc/stimulus.md in msip-2.2.0.alfa3 vs doc/stimulus.md in msip-2.2.0.beta1
- old
+ new
@@ -1,23 +1,104 @@
+# Integración de msip con Stimulus
+
+## Introducción a Stimulus
+
+Stimulus es una librería para Javascript-ES6 que facilita hacer cambios
+dinámicos en formularios. Particularmente facilita identificar en el HTML
+los campos o elementos que generan acciones y los campos o elementos afectados
+por esas acciones, así mismo facilita especificar las acciones en Javascript
+moderno.
+
+
+Para usarlo escribe en Javascript-ES6 como módulo un
+controlador descendiente de `Controller` de `@hotwired/stimulus` y
+úbicalo en `app/javascript/controllers/`
+(por ejemplo `app/javascript/controllers/persona_ppt_controller`).
+Marca en el HTML generado 3 tipos de elementos:
+1. Un área que contenga los elementos que el controlador manejará o usará
+ (podría haber varías áreas y los eventos se limitarán al área circundante
+ al elemento que genera la acción). Por ejemplo un `div` o un `form` a los
+ que debes agregar un atributo de la forma
+ `data-controller='*controlador*'`, por ejemplo
+ `<form data-controller='persona-ppt'>`.
+2. Uno o varios elementos que sean objetivos (*target*) bien para extraer
+ información de ellos o bien para establecer su valor o propiedades.
+ A cada uno de estos elementos agregales un atributo de
+ la forma `data-*controlador*-target='*nombre_objetivo*'`. Por ejemplo
+ `<input id='ppt' data-persona-ppt-target='ppt'>`
+3. Uno o varios elementos que iniciarán acciones que típicamente involucran
+ los elementos objetivo. A cada uno agregale un atributo de
+ la forma `data-action='*evento*->*controlador*#*metodo*'`.
+ Por ejemplo
+ ```
+ <input id='ultimoestatusmigratorio_id'
+ data-action='change->persona_ppt#cambia_ultimoestatusmigratorio'
+ >
+ ```
+
+## Cambio a generadores automáticos de formularios para agregar atributos Stimulus
+
+Como es estándar de msip puedes usar los mecanismos típicos de rails para
+implementar tus formularios, pero si desea usar la generación automática
+de formularios, la hemos ampliado para facilitarte
+agregar los atributos requeridos por stimulus a los elementos HTML:
+
+1. Marca un formulario completo como área con escuchadores
+ stimulus en el controlador en ruby del formulario (por ejemplo
+ `personas_controller.rb`) sobrecargando la función
+ `atributos_html_encabezado_formulario` para que retorne un diccionario
+ con los atributos por agregar. El siguiente ejemplo asocia
+ dos controladores:
+ ```
+ def atributos_html_encabezado_formulario
+ {'data-controller': 'msip--sindocaut persona-ppt'
+ end
+ ```
+
+2. Para cada campo que sea objetivos o que genere acciones crea
+ una vista parcial que llame a la vista genérica
+ `msip/modelos/msip_camo_aut` pero pasa un diccionario de atributos
+ adicionales para el campo mismo (i.e `input`) o para el elemento
+ envolvente que suele crearsele (i.e `div`), con los parámetros
+ `atributos_internos` o `atributos_externos` respectivamente.
+ Por ejemplo:
+ ```
+ <%= render partial: 'msip/modelos/msip_campo_aut',
+ locals: {
+ f: f,
+ atr: 'ultimoestatusmigratorio_id',
+ atributos_internos: {
+ 'data-action': 'change->persona_ppt#cambia_ultimoestatusmigratorio'
+ },
+ opciones: {
+ chosen: false
+ }
+ }
+ %>
+ ```
+
+(En este ejemplo se deshabilita chosen porque depende de jQuery y no opera
+con el evento estándar change).
+
# Uso de controladores Stimulus de motores rails
En aplicaciones es típico que los controladores stimulus se ubiquen
en `app/javascript/controllers` pero en motores no hay una sugerencia
ni un mecanismo proveido por rails para cargar los controladores stimulus
de motores.
-Usando `esbuild` nos ha funcionado emplear `--preserve-symlinks` y
-enlaces desde la aplicación a los controladores de los motores. Por eso
-sip provee la tarea rake `msip:stimulus_motores` que crea los enlaces.
+Si tu aplicacíon usa `esbuild` puedes utilizarlo con `--preserve-symlinks` y
+crear enlaces desde la aplicación a los controladores de los motores. Por eso
+msip provee la tarea rake `msip:stimulus_motores` que crea los enlaces.
Si el motor `mi_motor` define el controlador `miControlador` en su
directorio `app/javascript/controllers`, al ejecutar
```
bin/rails msip:stimulus_motores
```
en una aplicación (o en la aplicación de prueba del motor) la ruta
`app/javascript/controllers/mi_motor` será un enlace
-al directorio `app/javascript/controllers` de `mi_motor`, por esto
+al directorio `app/javascript/controllers` de la gema `mi_motor`, por esto
desde la aplicación se podrá referenciar con
`mi-motor--mi-controlador`
Un ejemplo más concreto es el controlador stimulus
`cancelar_vacio_es_eliminar` incluido en el motor msip en