diff --git a/lib/livebook_web/live/app_live.ex b/lib/livebook_web/live/app_live.ex
index 773347a4d..d871bed1a 100644
--- a/lib/livebook_web/live/app_live.ex
+++ b/lib/livebook_web/live/app_live.ex
@@ -62,10 +62,10 @@ defmodule LivebookWeb.AppLive do
<% end %>
-
+
<.link
@@ -94,13 +94,15 @@ defmodule LivebookWeb.AppLive do
def render(assigns), do: auth_placeholder(assigns)
@impl true
- def handle_event("new_session", %{}, socket) do
+ def handle_params(_params, _url, socket) when socket.assigns.live_action == :new_session do
session_id =
Livebook.App.get_session_id(socket.assigns.app.pid, user: socket.assigns.current_user)
{:noreply, push_navigate(socket, to: ~p"/apps/#{socket.assigns.app.slug}/#{session_id}")}
end
+ def handle_params(_params, _url, socket), do: {:noreply, socket}
+
@impl true
def handle_info({:app_updated, app}, socket) do
{:noreply, assign(socket, :app, app)}
diff --git a/lib/livebook_web/router.ex b/lib/livebook_web/router.ex
index d371e9536..ba2f5b68c 100644
--- a/lib/livebook_web/router.ex
+++ b/lib/livebook_web/router.ex
@@ -113,6 +113,7 @@ defmodule LivebookWeb.Router do
pipe_through [:browser, :user]
live "/apps/:slug", AppLive, :page
+ live "/apps/:slug/new", AppLive, :new_session
live "/apps/:slug/authenticate", AppAuthLive, :page
live "/apps/:slug/:id", AppSessionLive, :page
diff --git a/test/livebook_web/live/app_live_test.exs b/test/livebook_web/live/app_live_test.exs
index 4b6be821a..910f5b3e7 100644
--- a/test/livebook_web/live/app_live_test.exs
+++ b/test/livebook_web/live/app_live_test.exs
@@ -84,7 +84,7 @@ defmodule LivebookWeb.AppLiveTest do
{:error, {:live_redirect, %{to: to}}} =
view
- |> element("button", "New session")
+ |> element("a", "New session")
|> render_click()
assert_receive {:app_updated, %{pid: ^app_pid, sessions: [%{id: session_id}]}}