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.pid) 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 module={component_for_tab(@tab)} id={"export-notebook-#{@tab}"} session={@session} notebook={@notebook} />
""" end defp component_for_tab("livemd"), do: LivebookWeb.SessionLive.ExportLiveMarkdownComponent defp component_for_tab("exs"), do: LivebookWeb.SessionLive.ExportElixirComponent end