christo-ph

christo-ph OP

How can I create or simulate a link to navigate to another page/liveview? I do not want to create a whole <a> element, but create a click event on a tr - like I would do with JS and onClick=window.location....

My first attempt is this, but obviously doesn’t seem to be the right one:

<tr 
  role="button"
  phx-click={live_redirect "foo", to: Routes.admin_foo_path(@socket, :show, foo) }
>

First 7 of 7 Posts Switch mode

caleb-bb

caleb-bb

I dunno about the <tr> part, but live_redirect/2 might be what you’re looking for if you’re trying to create a link to another liveview.

EDIT: excuse me, I didn’t read your code carefully. live_redirect/2 returns a link, so it’s not something you would emit as a click event. phx-click="xyz" emits an event to the parent liveview (or to the current liveview if target=@myself is specified) which receives it using an event handler. So you wouldn’t put the live_redirect inside of the phx-click.

If it wasn’t clear: live_redirect/2 does not actually perform a redirect. Rather, it creates a link that can create a redirect when clicked.

I’m not sure how to make a <tr> do the same thing. My gut feeling is to use

<%= live_redirect to: Routes.live_path(@socket, MyLive, dir: :asc), replace: false do %>
  <tr> table stuff</tr>
<% end %>
christo-ph

christo-ph OP

Thank you. Besides your solution (not tried yet) it might also be possible to do it with phx-click={bar} where def bar handles the redirect.

I will try both possibilities.

caleb-bb

caleb-bb

The way that events work is like this: you have phx-click="name_of_event". Then, in your module, you define an event handler like this:

def handle_event("name_of_event", _, socket) do
     all the stuff you want
end

handle_event pattern matches on events, and the string for the first arg will match against the string you defined in phx-click. You don’t define a function called name_of_event. Rather, you define a handle_event clause that pattern matches on the name.

msimonborg

msimonborg

@christo-ph To tie it all together, something like this should get you there:

def render(assigns) do
  ~H"""
  <button phx-click="redirect">Redirect</button>
  """
end

def handle_event("redirect", _, socket) do
  {:noreply, push_redirect(socket, to: "/path")}
end

christo-ph

christo-ph OP

So, a lessons learned is, that around <tr> I cannot wrap a <a> element. At least not directly [1]. So the first solution by @caleb-bb will not work here, but surely on other elements.

The phx-click solution works as follows quite nice:

<tr 
  role="button"
  phx-click="go_to_route"
  phx-value-to={Routes.admin_foo_path(@socket, :show, foo)}
>
def handle_event("go_to_inquiry", %{"to" => to}, socket) do
  {:noreply, push_redirect(socket, to: to)}
end

This is then a server side redirect instead of a client/browser based. I do not know if this has any consequences.

Thank you all @caleb-bb @msimonborg

All other ways via Javascript or HTML/CSS can be found here:
[1] https://stackoverflow.com/questions/4369206/wrapping-a-table-row-in-a-element-hyperlink-in-html5

serpent

serpent

For reference:

<.button type="button" phx-click={JS.navigate(~p"/de/new_lv")}>
  <%= dgettext("forms", "Begin") %>
</.button>
serpent

serpent

Also good to know what the <.link> helper can do:

<.link navigate={~p"/?sort=asc"} replace={false}>
  <.button ... />
</.link>
— All posts loaded —

Where Next? Top

Trending in Questions Top

stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New
jonnycharles
I’m in search of an Elixir library that offers PDF generation capabilities similar to Ruby’s Prawn. While there have been discussions abo...
New
spammy
I’m looking to build a personal workflow to quickly deploy web applications written in elixir/phoenix, for local consumption (ie not on t...
New
dli
Before I dive in myself, did anyone successfully sprinkle Hologram into their existing LiveView app? Looking for hints regarding: Addi...
New
bottlenecked
Hi all, I wanted to ask how the community is dealing with post-release steps. Today we have Ecto migrations, which make sure that the db...
New
roeland
Kia ora, We have been using elixir-google-api to connect to Google Drive. However, with the updates to Tesla due to CVEs this is now bro...
New
rahultumpala
Hello, I have an Elixir backend that implements a custom protocol over TCP. I want to load test the backend and assess the performance o...
New

Other Trending Topics Top

JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
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
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge &amp; Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
ausimian
Emily is an Elixir library that runs Nx computations on Apple’s MLX. Install it as the default Nx backend and Nx, defn, Axon, Nx.Serving,...
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

We're in Beta

About us Mission Statement