defmodule PrymnWeb.ServerLive.NewServer do use PrymnWeb, :live_component alias Prymn.Servers require Logger @impl true def render(assigns) do ~H"""
<.header> Add a new server <:subtitle>Connect your server to Prymn! <.error :if={assigns[:error]}>There were some errors. <.simple_form for={@form} phx-change="validate" phx-submit="connect" phx-target={@myself}> <.input field={@form[:name]} label="Server Name" phx-debounce={1000} /> <.input field={@form[:provider]} label="Provider" type="select" prompt="Select a provider" options={Ecto.Enum.mappings(Servers.Server, :provider)} /> <.provider id="provider" provider={@form[:provider]} /> <:actions> <.button>Connect
""" end @impl true def update(assigns, socket) do changeset = Servers.change_server(%Servers.Server{}) socket = socket |> assign(assigns) |> assign(:form, to_form(changeset)) {:ok, socket} end @impl true def handle_event("validate", %{"server" => params}, socket) do form = %Servers.Server{} |> Servers.change_server(params) |> Map.put(:action, :validate) |> to_form() {:noreply, assign(socket, form: form)} end @impl true def handle_event("connect", %{"server" => params}, socket) do socket = case Servers.create_server(params) do {:ok, server} -> # Notify parent send(self(), {:connect, server}) socket |> put_flash(:info, "Starting new server connection...") |> push_patch(to: ~p"/servers") {:error, %Ecto.Changeset{} = changeset} -> socket |> assign(:form, to_form(changeset)) |> assign(:error, true) end {:noreply, socket} end defp provider(%{provider: %{value: :Custom}} = assigns) do ~H"""

Manual installation: To connect, you must have root SSH access to your server. When you click connect, you will be prompted to execute a command on your server to complete the installation.

""" end defp provider(assigns), do: ~H"" end