livebook/lib/livebook_web/live/session_live/export_component.ex
Jonatan Kłosko 4ff1ff0d5a
Use Phoenix.Tracker to keep track of sessions within the cluster (#540)
* Use Phoenix.Tracker to keep track of sessions within the cluster

* Apply review comments

* Cleanup topics and updates

* Update lib/livebook_web/live/session_live.ex
2021-09-04 19:16:01 +02:00

61 lines
1.8 KiB
Elixir

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"""
<div class="p-6 max-w-4xl flex flex-col space-y-3">
<h3 class="text-2xl font-semibold text-gray-800">
Export
</h3>
<div class="w-full flex-col space-y-5">
<p class="text-gray-700">
Here you can preview and directly export the notebook source.
</p>
<div class="tabs">
<%= live_patch to: Routes.session_path(@socket, :export, @session.id, "livemd"),
class: "tab #{if(@tab == "livemd", do: "active")}" do %>
<span class="font-medium">
Live Markdown
</span>
<% end %>
<%= live_patch to: Routes.session_path(@socket, :export, @session.id, "exs"),
class: "tab #{if(@tab == "exs", do: "active")}" do %>
<span class="font-medium">
Elixir Script
</span>
<% end %>
</div>
<div>
<%= live_component component_for_tab(@tab),
id: "export-notebook-#{@tab}",
session: @session,
notebook: @notebook %>
</div>
</div>
</div>
"""
end
defp component_for_tab("livemd"), do: LivebookWeb.SessionLive.ExportLiveMarkdownComponent
defp component_for_tab("exs"), do: LivebookWeb.SessionLive.ExportElixirComponent
end