chrisdel101

chrisdel101

In LiveView how can I pass my data back to the controller? Non-liveview like Route.path_helper(conn, :new, user: @user, employee: @employee). I need the same map or keyword list as shown.

This is my latest iteration. I need those user and employee fields attached to each form, so I can’t just use html. Where can I put such a list of values here?

    <.form let={_f} for={:alert}  phx-submit={:alert}  #user: @user, employee: @employee>
        <%= submit "Alert1", class: "btn btn-primary" %>
        </.form>

Then in the controller. I need value to be a map (or whatever)

def handle_event("alert", value, socket) do
   IO.inspect(value) => {} # is currently an empty map. Only the first arg is correct.

I’ve asked on this question use form_for in liveview component without model or changeset. And this is similar to this too live_component inside of a form_for

Showing Posts 1 to 6

LostKobrakai

LostKobrakai

You can put the additional values in a hidden input on the form for them to be submitted with the rest of the forms data.

chrisdel101

chrisdel101 OP

Is that the orthodox way to do it?

Can U give an example? I can’t get it to work.

    <% IO.inspect(@current_employee.organization_id ) %> # 7
    <% IO.inspect(user.id ) %> # 2

     <.form let={_f} for={:alert}  phx-submit={:alert}>
          <%= hidden_input :organization_id, @current_employee.organization_id %>
          <%= hidden_input :user_id, user.id %>
        <%= submit "Alert", class: "btn btn-primary" %>
        </.form>

Give the error
no function clause matching in Phoenix.HTML.Form.generic_input/4

codeanpeace

codeanpeace

I’d suggest generating the hidden input via a Phoenix.Component rather than via Phoenix.HTML.Form assuming you’re running a recent version of LiveView.

<.input type="hidden" field={@form[:user_id]} value={user.id} />

Something like the above assuming you’ve set up the Phoenix.Component.form/1 properly.

Also, sending these ids via the form may be unnecessary if that information is already stored in your LiveView socket which is accessible in your event handlers e.g. def handle_event("alert", value, socket), do: ... end.

imkleats

imkleats

Unless your use-case is more complex than the example with other non-hidden inputs, it sounds like you might be better off using a phx-click binding instead of a form.

chrisdel101

chrisdel101 OP

Thanks everyone for the ideas!

Main problem solved:

I was missing alot of knowledge. Now I see the problem was the field didn’t work as I thought, i.e. automatically. I ended up just going with html after all, since yes, the rest of the details are still on the socket.

<button class="btn btn-primary" phx-click={:alert} value={user.id}></button>

def handle_event("alert", values, socket) do
    IO.inspect(values) # %{"value" => "1"}

Secondary problem: Re: the input component:

I didn’t know I needed to implement <.input/> myself. I’ve tried using the example here but I get undefined function attr/2. Phoenix 1.6 I think.

So I’m trying this, but I don’t know where it goes. In it’s own file? How do I use it? Since there is no render.

def input(assigns) do
  ~H"""
  <input type="text" name={@field.name} id={@field.id} value={@field.value} class="..." />
  """
end
codeanpeace

codeanpeace

These two are connected! On more recent versions of Phoenix, a core_components.ex file that implements <.input/> gets generated when creating a new app via mix phx.new my_app. That implementation uses pattern matching to automatically derive and add a :name and :value assign based on the :field assign. So if you want to use <.input/>, you’ll either need to manually add this file/function or implement it yourself.

https://github.com/phoenixframework/phoenix/blob/6095fb3aac9b37baa043374a0766680ab5d93a04/installer/templates/phx_web/components/core_components.ex#L277-L284

It can be a bit confusing at first, especially since the LiveView library includes a standard default .form component, but doesn’t include a standard default .input component. That’s why the autogenerated core_components.ex file includes a .simple_form component that wraps the standard .form component as well as an .input component.

— All posts loaded —

Where Next? Top

Trending in Questions Top

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
peck
Hi everyone. My team and I have been working on a fairly modest app based around video streaming and chat, but we’ve landed a customer t...
New
achenet
Hello, I’m trying to build a basic Phoenix web-app, and I’d like to use Tailwind. However, when I launch mix phx.server, I get an error...
New
bradley
I really like the adapter patterns that ecto, nebulex, waffle, etc. use and would love find something similar for a key management servic...
New
unaware8150
Hello folks! So at work, we are seeing some situations where we have to define some “fixed” strings that are used across the codebase in...
New
Cxx-mlr
I’m working on a small exercise involving update_in/3, and I came up with this solution: data = %{ name: "Periodic Table", category:...
New
Alvinkariuki
How Can I Optimise Compile Time Dependencies I have been building an elixir application for about 2 years now. Many modules and files ha...
New

Other Trending Topics Top

budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
mudasobwa
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
juhalehtonen
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New
budgie
I love Elixir. It’s one of 2 programming languages I’ve ever fallen in love with. But I don’t use it anymore. Serverless was the promis...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews