defmodule LivebookWeb.SidebarHelpers do use Phoenix.Component import LivebookWeb.Helpers 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 ~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 do %> <.remix_icon icon={@icon} class="text-2xl" /> <% end %> """ end def shutdown_item(assigns) do if :code.get_mode() == :interactive do ~H""" """ else ~H""" """ end end def break_item(assigns) do ~H"""
""" end def user_item(assigns) do ~H""" <%= live_patch to: @path, class: "text-gray-400 rounded-xl h-8 w-8 flex items-center justify-center mt-2", aria_label: "user profile" do %> <.user_avatar user={@current_user} text_class="text-xs" /> <% end %> """ 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} path={@user_path} /> """ end def shared_home_handlers(socket) 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) end end