defmodule LivebookWeb.ExploreLive do use LivebookWeb, :live_view import LivebookWeb.SessionHelpers alias LivebookWeb.{SidebarHelpers, ExploreHelpers, PageHelpers} alias Livebook.Notebook.Explore @impl true def mount(_params, _session, socket) do [lead_notebook_info | notebook_infos] = Explore.notebook_infos() {:ok, assign(socket, lead_notebook_info: lead_notebook_info, notebook_infos: notebook_infos )} end @impl true def render(assigns) do ~H"""

Check out a number of examples showcasing various parts of the Elixir ecosystem. Click on any notebook you like and start playing around with it!

<%= @lead_notebook_info.title %>

<%= @lead_notebook_info.description %>

<%= live_patch "Let's go", to: Routes.explore_path(@socket, :notebook, @lead_notebook_info.slug), class: "button button-blue" %>
<%# Note: it's fine to use stateless components in this comprehension, because @notebook_infos never change %> <%= for info <- @notebook_infos do %> <% end %>
<%= if @live_action == :user do %> <%= live_modal LivebookWeb.UserComponent, id: "user", modal_class: "w-full max-w-sm", user: @current_user, return_to: Routes.explore_path(@socket, :page) %> <% end %> """ end @impl true def handle_params(%{"slug" => "new"}, _url, socket) do {:noreply, create_session(socket)} end def handle_params(%{"slug" => slug}, _url, socket) do {notebook, images} = Explore.notebook_by_slug!(slug) {:noreply, create_session(socket, notebook: notebook, images: images)} end def handle_params(_params, _url, socket), do: {:noreply, socket} end