Basic onboading flow (#24)

* removed unused file

* [WIP] Created onboarding form

* Finished basic onboarding flow; added tests

* Improved onboarding language
This commit is contained in:
Kieran
2024-02-20 17:37:17 -08:00
committed by GitHub
parent 1f56db01a5
commit 69c47c2c65
27 changed files with 313 additions and 244 deletions
@@ -16,18 +16,37 @@ defmodule PinchflatWeb.MediaSources.SourceController do
def new(conn, _params) do
changeset = MediaSource.change_source(%Source{})
render(conn, :new, changeset: changeset, media_profiles: media_profiles())
if get_session(conn, :onboarding) do
render(conn, :new,
changeset: changeset,
media_profiles: media_profiles(),
layout: {Layouts, :onboarding}
)
else
render(conn, :new, changeset: changeset, media_profiles: media_profiles())
end
end
def create(conn, %{"source" => source_params}) do
case MediaSource.create_source(source_params) do
{:ok, source} ->
redirect_location =
if get_session(conn, :onboarding), do: ~p"/?onboarding=1", else: ~p"/sources/#{source}"
conn
|> put_flash(:info, "Source created successfully.")
|> redirect(to: ~p"/sources/#{source}")
|> redirect(to: redirect_location)
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, :new, changeset: changeset, media_profiles: media_profiles())
if get_session(conn, :onboarding) do
render(conn, :new,
changeset: changeset,
media_profiles: media_profiles(),
layout: {Layouts, :onboarding}
)
else
render(conn, :new, changeset: changeset, media_profiles: media_profiles())
end
end
end
@@ -1,5 +1,5 @@
<div class="mb-6 flex gap-3 flex-row items-center">
<.link navigate={~p"/sources"}>
<.link :if={!Plug.Conn.get_session(@conn, :onboarding)} navigate={~p"/sources"}>
<.icon name="hero-arrow-left" class="w-10 h-10 hover:dark:text-white" />
</.link>
<h2 class="text-title-md2 font-bold text-black dark:text-white ml-4">New Source</h2>
@@ -3,9 +3,9 @@
Oops, something went wrong! Please check the errors below.
</.error>
<.input field={f[:original_url]} type="text" label="Source URL" help="URL of a channel or playlist (required)" />
<.input field={f[:friendly_name]} type="text" label="Custom Name" />
<.input field={f[:friendly_name]} type="text" label="Friendly Name" />
<.input field={f[:original_url]} type="text" label="Source URL" help="URL of a channel or playlist (required)" />
<.input
field={f[:media_profile_id]}
@@ -21,14 +21,14 @@
options={friendly_index_frequencies()}
type="select"
label="Index Frequency"
help="Roughly how often to check for media to download"
help="The time between one index of this source finishing and the next one starting"
/>
<.input
field={f[:download_media]}
type="toggle"
label="Download Media?"
help="Unchecking still indexes media but it won't be downloaded"
help="Unchecking still indexes media but it won't be downloaded until you enable this option"
/>
<:actions>