A few hours of work as not made it happen . I need approach 1 (or similar) to work.
Note: I’m using the default LiveHelpers modal code.1
Approach 1
The modal should close on “save okay” only, so is handled after save in the handler. For now handle_event
just tries to close. hide_modal
runs but does not close the modal.
def handle_event("save", %{"user" => user_params}, socket) do
IO.inspect(user_params) # this runs
save_user(socket, socket.assigns.action, user_params)
MyApp.LiveHelpers.hide_modal() #default location of modal
{:noreply, socket}
end
# form where the save button is
<.form
let={f}
for={@changeset}
id="user-form"
phx-target={@myself}
phx-change="validate"
phx-submit="save">
<div>
<%= submit "Save", phx_disable_with: "Saving..."%>
</div>
</.form>
# modal close function comes w/ Phoenix, and works elsewhere
def hide_modal(js \\ %JS{}) do
IO.puts("fired")
js
|> JS.hide(to: "#modal", transition: "fade-out")
|> JS.hide(to: "#modal-content", transition: "fade-out-scale")
end
IO.puts("fired")
runs but the modal does not close.
Approach 2
Adding to the button does work but it closes on any click, even w/ a blank form, or w/ errors. This would work for a cancel button but not for save.
<%= submit "Save", phx_disable_with: "Saving...", phx_click: MyApp.LiveHelpers.hide_modal()%>
I guess it’s something to do w/ the binding phx- events directly to the button render, or lack thereof. Since it’s conditional to “save okay” this blunt click binding will not suffice.