5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-22 20:36:21 +00:00

feat: al agregar uno nuevo, cerrar el modal y abrir el formulario

This commit is contained in:
f 2024-05-18 18:50:00 -03:00
parent 4f08a0e5f2
commit a10da6fa1c
No known key found for this signature in database
2 changed files with 29 additions and 2 deletions

View file

@ -53,6 +53,13 @@ class PostsController < ApplicationController
site.posts(lang: locale).build(layout: params.require(:layout))
end
triggers = {}
params.permit(:show, :hide).each_pair do |key, value|
triggers["modal:#{key}"] = { id: value }
end
headers['HX-Trigger-After-Swap'] = triggers.to_json if triggers.present?
render layout: false
end

View file

@ -1,11 +1,21 @@
-#
Genera un listado de checkboxes entre los que se puede elegir para guardar
Genera un listado de checkboxes entre los que se puede elegir para
guardar. Podemos elegir entre los artículos ya cargados o agregar uno
nuevo.
Al agregar uno nuevo, se abre un segundo modal que carga el formulario
correspondiente vía HTMX. El formulario tiene que cargarse por fuera
del formulario principal porque no se pueden anidar.
:ruby
id = "#{base}_#{attribute}"
name = "#{base}[#{attribute}][]"
form_id = "form-#{Nanoid.generate}"
modal_id = "modal-#{Nanoid.generate}"
post_id = "post-#{Nanoid.generate}"
post_form_id = "post-form-#{Nanoid.generate}"
post_modal_id = "post-modal-#{Nanoid.generate}"
post_form_loaded_id = "post-loaded-#{Nanoid.generate}"
%div{ id: modal_id, data: { controller: 'modal array', 'array-original-value': metadata.value.to_json, 'array-new-array-value': site_posts_new_related_post_path(site) } }
.form-group
@ -63,5 +73,15 @@
= render 'bootstrap/btn', content: t('.accept'), action: 'array#accept modal#hide', class: 'm-0 mr-1'
= render 'bootstrap/btn', content: t('.cancel'), action: 'array#cancel modal#hide', class: 'm-0'
-#
Este segundo modal es el que carga los formularios de
creación/modificación de artículos relacionados. Se envía a post_form
para que sea externo al formulario actual.
- content_for :post_form do
%form{ id: post_form_id }
%form{ id: post_form_id, 'hx-get': site_posts_form_path(site), 'hx-target': "##{post_form_loaded_id}" }
%input{ type: 'hidden', name: 'show', value: post_modal_id }
%input{ type: 'hidden', name: 'hide', value: modal_id }
%div{ id: post_modal_id, data: { controller: 'modal' } }
= render 'bootstrap/modal', id: post_id, modal_content_attributes: { class: 'h-100' } do
- content_for :"#{post_id}_body" do
%div{ id: post_form_loaded_id }