defmodule LivebookWeb.SessionLive.ExportComponent do use LivebookWeb, :live_component alias Livebook.Session @impl true def update(assigns, socket) do socket = assign(socket, assigns) socket = if socket.assigns[:notebook] do socket else # Note: we need to load the notebook, because the local data # has cell contents stripped out notebook = Session.get_notebook(socket.assigns.session_id) assign(socket, :notebook, notebook) end {:ok, socket} end @impl true def render(assigns) do ~H"""

Export

Here you can preview and directly export the notebook source.

<%= live_patch to: Routes.session_path(@socket, :export, @session_id, "livemd"), class: "tab #{if(@tab == "livemd", do: "active")}" do %> Live Markdown <% end %> <%= live_patch to: Routes.session_path(@socket, :export, @session_id, "exs"), class: "tab #{if(@tab == "exs", do: "active")}" do %> Elixir Script <% end %>
<%= live_component component_for_tab(@tab), id: "export-notebook-#{@tab}", session_id: @session_id, notebook: @notebook %>
""" end defp component_for_tab("livemd"), do: LivebookWeb.SessionLive.ExportLiveMarkdownComponent defp component_for_tab("exs"), do: LivebookWeb.SessionLive.ExportElixirComponent end