defmodule LivebookWeb.SidebarHelpers do use Phoenix.Component import LivebookWeb.LiveHelpers import LivebookWeb.UserHelpers alias Phoenix.LiveView.JS alias LivebookWeb.Router.Helpers, as: Routes @doc """ Renders sidebar container. Other functions in this module render sidebar items of various type. """ def sidebar(assigns) do ~H""" """ end def logo_item(assigns) do ~H""" <%= live_redirect to: Routes.home_path(@socket, :page), aria_label: "go to homepage" do %> <% end %> """ end def button_item(assigns) do ~H""" """ end def link_item(assigns) do assigns = assign_new(assigns, :link_attrs, fn -> [] end) ~H""" <%= live_patch [to: @path, class: "text-gray-400 hover:text-gray-50 focus:text-gray-50 rounded-xl h-10 w-10 flex items-center justify-center #{if(@active, do: "text-gray-50 bg-gray-700")}", aria_label: @label] ++ @link_attrs do %> <.remix_icon icon={@icon} class="text-2xl" /> <% end %> """ end def shutdown_item(assigns) do if Livebook.Config.shutdown_enabled?() do ~H""" """ else ~H""" """ end end def break_item(assigns) do ~H"""
""" end def user_item(assigns) do ~H""" """ end ## Shared home functionality @doc """ A footer shared across home, settings, explore, etc. Note you must call `shared_home_handlers` on mount/3. """ def shared_home_footer(assigns) do ~H""" <.break_item /> <.shutdown_item /> <.link_item icon="settings-3-fill" label="Settings" path={Routes.settings_path(@socket, :page)} active={false} /> <.user_item current_user={@current_user} /> """ end def shared_home_handlers(socket) do if Livebook.Config.shutdown_enabled?() do attach_hook(socket, :shutdown, :handle_event, fn "shutdown", _params, socket -> System.stop() {:halt, put_flash(socket, :info, "Livebook is shutting down. You can close this page.")} _event, _params, socket -> {:cont, socket} end) else socket end end end