christo-ph

christo-ph

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) }
>

Showing Posts 1 to 7

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

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
kszambelanczyk
Hello! Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app. I creat...
New
RemyXRenard
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
samoloth
Hi, I’ve just set up an application with ash_authentication. There is only magic link strategy for now, so there is no confirmation add o...
New
FlyingNoodle
If a change or preparation module uses Ash.Changeset.get_argument/2 or Ash.Query.get_argument/2 (or any of the other get_argument functio...
New
ryanwinchester
apply_graft/2 doesn’t rewrite an add_many sub-workflow’s deps on an add step. Grafted jobs cancel with “upstream job was deleted” Version...
New

Other Trending Topics Top

mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
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
Dmk
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
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

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews