Packages
livebook
0.8.0
0.19.8
0.19.7
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.6
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.3
0.17.2
0.17.1
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.14.0-rc.1
0.14.0-rc.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
Automate code & data workflows with interactive notebooks
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
lib/livebook_web/live/hub/new_live.ex
defmodule LivebookWeb.Hub.NewLive do
use LivebookWeb, :live_view
alias LivebookWeb.{PageHelpers, LayoutHelpers}
alias Phoenix.LiveView.JS
on_mount LivebookWeb.SidebarHook
@impl true
def mount(_params, _session, socket) do
{:ok, assign(socket, selected_type: nil, page_title: "Livebook - Hub")}
end
@impl true
def handle_params(_params, _url, socket), do: {:noreply, socket}
@impl true
def render(assigns) do
~H"""
<LayoutHelpers.layout
socket={@socket}
current_page={Routes.hub_path(@socket, :new)}
current_user={@current_user}
saved_hubs={@saved_hubs}
>
<div class="p-4 md:px-12 md:py-7 max-w-screen-md mx-auto space-y-8">
<div>
<PageHelpers.title text="Add Hub" socket={@socket} />
<p class="mt-4 text-gray-700">
Manage your Livebooks in the cloud with Hubs.
</p>
</div>
<div class="flex flex-col space-y-4">
<h2 class="text-xl text-gray-800 font-medium pb-2 border-b border-gray-200">
1. Select your Hub service
</h2>
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
<.card_item id="fly" selected={@selected_type} title="Fly">
<:logo>
<%= Phoenix.HTML.raw(File.read!("static/images/fly.svg")) %>
</:logo>
<:headline>
Deploy notebooks to your Fly account.
</:headline>
</.card_item>
<.card_item id="enterprise" selected={@selected_type} title="Livebook Enterprise">
<:logo>
<img
src={Routes.static_path(@socket, "/images/enterprise.png")}
class="max-h-full max-w-[75%]"
alt="Livebook Enterprise logo"
/>
</:logo>
<:headline>
Control access, manage secrets, and deploy notebooks within your team.
</:headline>
</.card_item>
</div>
</div>
<%= if @selected_type do %>
<div class="flex flex-col space-y-4">
<h2 class="text-xl text-gray-800 font-medium pb-2 border-b border-gray-200">
2. Configure your Hub
</h2>
<%= if @selected_type == "fly" do %>
<.live_component module={LivebookWeb.Hub.New.FlyComponent} id="fly-form" />
<% end %>
<%= if @selected_type == "enterprise" do %>
<.live_component module={LivebookWeb.Hub.New.EnterpriseComponent} id="enterprise-form" />
<% end %>
</div>
<% end %>
</div>
</LayoutHelpers.layout>
"""
end
defp card_item(assigns) do
~H"""
<div
id={@id}
class={"flex card-item flex-col " <> card_item_bg_color(@id, @selected)}
phx-click={JS.push("select_type", value: %{value: @id})}
>
<div class="flex items-center justify-center card-item-logo p-6 border-2 rounded-t-2xl h-[150px]">
<%= render_slot(@logo) %>
</div>
<div class="card-item-body px-6 py-4 rounded-b-2xl grow">
<p class="text-gray-800 font-semibold cursor-pointer">
<%= @title %>
</p>
<p class="mt-2 text-sm text-gray-600">
<%= render_slot(@headline) %>
</p>
</div>
</div>
"""
end
defp card_item_bg_color(id, selected) when id == selected, do: "selected"
defp card_item_bg_color(_id, _selected), do: ""
@impl true
def handle_event("select_type", %{"value" => service}, socket) do
{:noreply, assign(socket, selected_type: service)}
end
end