Skip to content

Commit

Permalink
Automatically setup runtime when creating a new notebook (#2102)
Browse files Browse the repository at this point in the history
  • Loading branch information
jonatanklosko authored Jul 24, 2023
1 parent 7dbd64a commit d0056d3
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 9 deletions.
2 changes: 1 addition & 1 deletion lib/livebook_web/live/home_live.ex
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ defmodule LivebookWeb.HomeLive do
end

def handle_params(%{}, _url, socket) when socket.assigns.live_action == :public_new_notebook do
{:noreply, create_session(socket)}
{:noreply, create_session(socket, queue_setup: true)}
end

def handle_params(_params, _url, socket), do: {:noreply, socket}
Expand Down
12 changes: 4 additions & 8 deletions lib/livebook_web/live/open_live.ex
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,19 @@ defmodule LivebookWeb.OpenLive do
~H"""
<LayoutHelpers.layout current_page={~p"/"} current_user={@current_user} saved_hubs={@saved_hubs}>
<:topbar_action>
<button class="button-base button-blue" phx-click="new">
<.link class="button-base button-blue" navigate={~p"/new"}>
<.remix_icon icon="add-line" class="align-middle mr-1" />
<span>New notebook</span>
</button>
</.link>
</:topbar_action>
<div class="p-4 md:px-12 md:py-6 max-w-screen-lg mx-auto space-y-4">
<div class="flex flex-row space-y-0 items-center pb-4 justify-between">
<LayoutHelpers.title text="Open notebook" back_navigate={~p"/"} />
<div class="hidden md:flex" role="navigation" aria-label="new notebook">
<button class="button-base button-blue" phx-click="new">
<.link class="button-base button-blue" navigate={~p"/new"}>
<.remix_icon icon="add-line" class="align-middle mr-1" />
<span>New notebook</span>
</button>
</.link>
</div>
</div>
Expand Down Expand Up @@ -181,10 +181,6 @@ defmodule LivebookWeb.OpenLive do
def handle_params(_params, _url, socket), do: {:noreply, socket}

@impl true
def handle_event("new", %{}, socket) do
{:noreply, create_session(socket)}
end

def handle_event("hide_recent_notebook", %{"idx" => idx}, socket) do
on_confirm = fn socket ->
%{file: file} = Enum.fetch!(socket.assigns.recent_notebooks, idx)
Expand Down
11 changes: 11 additions & 0 deletions lib/livebook_web/live/session_helpers.ex
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,17 @@ defmodule LivebookWeb.SessionHelpers do
Creates a new session, redirects on success,
puts an error flash message on failure.
## Options
* `:queue_setup` - whether to queue the setup cell right after
the session is started. Defaults to `false`
Accepts the same options as `Livebook.Sessions.create_session/1`.
"""
@spec create_session(Socket.t(), keyword()) :: Socket.t()
def create_session(socket, opts \\ []) do
{queue_setup, opts} = Keyword.pop(opts, :queue_setup, false)

# Revert persistence options to default values if there is
# no file attached to the new session
opts =
Expand All @@ -26,6 +33,10 @@ defmodule LivebookWeb.SessionHelpers do

case Livebook.Sessions.create_session(opts) do
{:ok, session} ->
if queue_setup do
Session.queue_cell_evaluation(session.pid, Livebook.Notebook.Cell.setup_cell_id())
end

redirect_path = session_path(session.id, opts)
push_navigate(socket, to: redirect_path)

Expand Down

0 comments on commit d0056d3

Please sign in to comment.