Navigation to LiveView from init

Is it possible to navigate to a LiveView in init (i.e. without clicking a link)? I am hoping to preserve my ash_authentication_phoenix sign_in LiveView without recreating it with Hologram.

2 Likes

Not yet, but this will be possible with the planned middleware layer that’s coming to Hologram.

In the meantime, if you need this functionality now, there’s a workaround… though I should warn you it’s the kind of hack that makes you want to take a shower afterwards :see_no_evil_monkey:

The idea is:

  1. In your init/3, set some flag in the state (e.g., redirect_to_live_view: true)
  2. Use that flag in your layout template to either hide the page content or show a loading indicator
  3. Add put_action(:execute_js_redirect, ...) in your page init/3 function
  4. Implement that action to call Hologram.JS.exec/1 with your JavaScript redirect code

Something like:

def action(:execute_js_redirect, _params, component) do
  Hologram.JS.exec("window.location.href = '/your-liveview-path'")
  component
end

It’s not pretty, but it should let you preserve your ash_authentication_phoenix auth behaviour for now until proper support lands.

Hope this helps!

Ugh!..

2 Likes

The Hologram no-JS promise broken! T_T

Just kidding. This is really not that bad as a temporary fix! I appreciate the help–I was really much more concerned that I would have to figure out the auth page setup…

Looking forward to the future middleware :slight_smile: Thanks.

2 Likes