defmodule LivebookWeb.SessionLive.IndicatorsComponent do
use LivebookWeb, :live_component
@impl true
def render(assigns) do
~H"""
<%= 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 @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
"""
end
defp global_status(%{status: :evaluating} = assigns) do
~H"""
"""
end
defp global_status(%{status: :evaluated} = assigns) do
~H"""
"""
end
defp global_status(%{status: :stale} = assigns) do
~H"""
"""
end
defp global_status(%{status: :fresh} = assigns) do
~H"""