diff --git a/lib/livebook_web/live/session_live.ex b/lib/livebook_web/live/session_live.ex index fd70c2fb3..e35cd126c 100644 --- a/lib/livebook_web/live/session_live.ex +++ b/lib/livebook_web/live/session_live.ex @@ -137,7 +137,15 @@ defmodule LivebookWeb.SessionLive do
-
+ +
-
- -
<.current_user_modal return_to={@self_path} current_user={@current_user} /> diff --git a/lib/livebook_web/live/session_live/indicators_component.ex b/lib/livebook_web/live/session_live/indicators_component.ex index 6110b0683..800f267c8 100644 --- a/lib/livebook_web/live/session_live/indicators_component.ex +++ b/lib/livebook_web/live/session_live/indicators_component.ex @@ -1,69 +1,47 @@ defmodule LivebookWeb.SessionLive.IndicatorsComponent do - use LivebookWeb, :live_component + use Phoenix.Component + + alias Phoenix.LiveView.JS + alias LivebookWeb.Router.Helpers, as: Routes + + import LivebookWeb.LiveHelpers - @impl true def render(assigns) do ~H""" -
- <.code_zen_indicator /> - <%= if @file do %> - <%= if @dirty do %> - <%= if @autosave_interval_s do %> - - <%= live_patch to: Routes.session_path(@socket, :file_settings, @session_id), - class: "icon-button icon-outlined-button border-blue-400 hover:bg-blue-50 focus:bg-blue-50", - aria_label: "autosave pending, click to open file settings" do %> - <.remix_icon icon="save-line" class="text-xl text-blue-500" /> - <% end %> - - <% else %> - - <%= live_patch to: Routes.session_path(@socket, :file_settings, @session_id), - class: "icon-button icon-outlined-button border-yellow-bright-200 hover:bg-red-50 focus:bg-red-50", - aria_label: "no autosave configured, click to open file settings" do %> - <.remix_icon icon="save-line" class="text-xl text-yellow-bright-300" /> - <% end %> - - <% end %> - <% else %> - - <%= live_patch to: Routes.session_path(@socket, :file_settings, @session_id), - class: "icon-button icon-outlined-button border-green-bright-300 hover:bg-green-bright-50 focus:bg-green-bright-50", - aria_label: "notebook saved, click to open file settings" do %> - <.remix_icon icon="save-line" class="text-xl text-green-bright-400" /> - <% end %> - - <% end %> - <% else %> - - <%= live_patch to: Routes.session_path(@socket, :file_settings, @session_id), - class: "icon-button icon-outlined-button border-gray-200 hover:bg-gray-100 focus:bg-gray-100", - aria_label: "choose a file to save the notebook" do %> - <.remix_icon icon="save-line" class="text-xl text-gray-400" /> - <% end %> - - <% end %> +
+
+ - <%= if Livebook.Runtime.connected?(@runtime) do %> - <.global_status - status={elem(@global_status, 0)} - cell_id={elem(@global_status, 1)} /> - <% else %> - - <%= live_patch to: Routes.session_path(@socket, :runtime_settings, @session_id), - class: "icon-button icon-outlined-button border-gray-200 hover:bg-gray-100 focus:bg-gray-100", - aria_label: "choose a runtime to run the notebook in" do %> - <.remix_icon icon="loader-3-line" class="text-xl text-gray-400" /> - <% end %> - - <% end %> - - <%# Note: this indicator is shown/hidden using CSS based on the current mode %> - - - ins - - + +
+
+
+ <.code_zen_indicator /> + <.persistence_indicator + file={@file} + dirty={@dirty} + autosave_interval_s={@autosave_interval_s} + socket={@socket} + session_id={@session_id} /> + <.runtime_indicator + runtime={@runtime} + global_status={@global_status} + socket={@socket} + session_id={@session_id} /> + <.insert_mode_indicator /> +
+
""" end @@ -105,6 +83,72 @@ defmodule LivebookWeb.SessionLive.IndicatorsComponent do """ end + defp persistence_indicator(%{file: nil} = assigns) do + ~H""" + + <%= live_patch to: Routes.session_path(@socket, :file_settings, @session_id), + class: "icon-button icon-outlined-button border-gray-200 hover:bg-gray-100 focus:bg-gray-100", + aria_label: "choose a file to save the notebook" do %> + <.remix_icon icon="save-line" class="text-xl text-gray-400" /> + <% end %> + + """ + end + + defp persistence_indicator(%{dirty: false} = assigns) do + ~H""" + + <%= live_patch to: Routes.session_path(@socket, :file_settings, @session_id), + class: "icon-button icon-outlined-button border-green-bright-300 hover:bg-green-bright-50 focus:bg-green-bright-50", + aria_label: "notebook saved, click to open file settings" do %> + <.remix_icon icon="save-line" class="text-xl text-green-bright-400" /> + <% end %> + + """ + end + + defp persistence_indicator(%{autosave_interval_s: nil} = assigns) do + ~H""" + + <%= live_patch to: Routes.session_path(@socket, :file_settings, @session_id), + class: "icon-button icon-outlined-button border-yellow-bright-200 hover:bg-red-50 focus:bg-red-50", + aria_label: "no autosave configured, click to open file settings" do %> + <.remix_icon icon="save-line" class="text-xl text-yellow-bright-300" /> + <% end %> + + """ + end + + defp persistence_indicator(assigns) do + ~H""" + + <%= live_patch to: Routes.session_path(@socket, :file_settings, @session_id), + class: "icon-button icon-outlined-button border-blue-400 hover:bg-blue-50 focus:bg-blue-50", + aria_label: "autosave pending, click to open file settings" do %> + <.remix_icon icon="save-line" class="text-xl text-blue-500" /> + <% end %> + + """ + end + + defp runtime_indicator(assigns) do + ~H""" + <%= if Livebook.Runtime.connected?(@runtime) do %> + <.global_status + status={elem(@global_status, 0)} + cell_id={elem(@global_status, 1)} /> + <% else %> + + <%= live_patch to: Routes.session_path(@socket, :runtime_settings, @session_id), + class: "icon-button icon-outlined-button border-gray-200 hover:bg-gray-100 focus:bg-gray-100", + aria_label: "choose a runtime to run the notebook in" do %> + <.remix_icon icon="loader-3-line" class="text-xl text-gray-400" /> + <% end %> + + <% end %> + """ + end + defp global_status(%{status: :evaluating} = assigns) do ~H""" @@ -154,4 +198,15 @@ defmodule LivebookWeb.SessionLive.IndicatorsComponent do """ end + + defp insert_mode_indicator(assigns) do + ~H""" + <%# Note: this indicator is shown/hidden using CSS based on the current mode %> + + + ins + + + """ + end end diff --git a/lib/livebook_web/live/sidebar_helpers.ex b/lib/livebook_web/live/sidebar_helpers.ex index e37f3f6fb..e72fa94b6 100644 --- a/lib/livebook_web/live/sidebar_helpers.ex +++ b/lib/livebook_web/live/sidebar_helpers.ex @@ -15,7 +15,7 @@ defmodule LivebookWeb.SidebarHelpers do """ def sidebar(assigns) do ~H""" -