Add settings model (#54)
* Adds a basic settings model * Added more settings methods; Hooked up initial settings runner to app boot * Update onboarding flow to use settings model instead of session data
This commit is contained in:
@@ -13,29 +13,21 @@ defmodule PinchflatWeb.MediaProfiles.MediaProfileController do
|
||||
def new(conn, _params) do
|
||||
changeset = Profiles.change_media_profile(%MediaProfile{})
|
||||
|
||||
if get_session(conn, :onboarding) do
|
||||
render(conn, :new, changeset: changeset, layout: {Layouts, :onboarding})
|
||||
else
|
||||
render(conn, :new, changeset: changeset)
|
||||
end
|
||||
render(conn, :new, changeset: changeset, layout: get_onboarding_layout())
|
||||
end
|
||||
|
||||
def create(conn, %{"media_profile" => media_profile_params}) do
|
||||
case Profiles.create_media_profile(media_profile_params) do
|
||||
{:ok, media_profile} ->
|
||||
redirect_location =
|
||||
if get_session(conn, :onboarding), do: ~p"/?onboarding=1", else: ~p"/media_profiles/#{media_profile}"
|
||||
if Settings.get!(:onboarding), do: ~p"/?onboarding=1", else: ~p"/media_profiles/#{media_profile}"
|
||||
|
||||
conn
|
||||
|> put_flash(:info, "Media profile created successfully.")
|
||||
|> redirect(to: redirect_location)
|
||||
|
||||
{:error, %Ecto.Changeset{} = changeset} ->
|
||||
if get_session(conn, :onboarding) do
|
||||
render(conn, :new, changeset: changeset, layout: {Layouts, :onboarding})
|
||||
else
|
||||
render(conn, :new, changeset: changeset)
|
||||
end
|
||||
render(conn, :new, changeset: changeset, layout: get_onboarding_layout())
|
||||
end
|
||||
end
|
||||
|
||||
@@ -85,4 +77,12 @@ defmodule PinchflatWeb.MediaProfiles.MediaProfileController do
|
||||
|> put_flash(:info, flash_message)
|
||||
|> redirect(to: ~p"/media_profiles")
|
||||
end
|
||||
|
||||
defp get_onboarding_layout do
|
||||
if Settings.get!(:onboarding) do
|
||||
{Layouts, :onboarding}
|
||||
else
|
||||
{Layouts, :app}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<div class="mb-6 flex gap-3 flex-row items-center">
|
||||
<.link :if={!Plug.Conn.get_session(@conn, :onboarding)} navigate={~p"/media_profiles"}>
|
||||
<.link :if={!Settings.get!(:onboarding)} navigate={~p"/media_profiles"}>
|
||||
<.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 Media Profile</h2>
|
||||
|
||||
@@ -20,12 +20,12 @@ defmodule PinchflatWeb.Pages.PageController do
|
||||
end
|
||||
|
||||
defp render_home_page(conn) do
|
||||
Settings.set!(:onboarding, false)
|
||||
media_profile_count = Repo.aggregate(MediaProfile, :count, :id)
|
||||
source_count = Repo.aggregate(Source, :count, :id)
|
||||
media_item_count = Repo.aggregate(MediaItem, :count, :id)
|
||||
|
||||
conn
|
||||
|> put_session(:onboarding, false)
|
||||
|> render(:home,
|
||||
media_profile_count: media_profile_count,
|
||||
source_count: source_count,
|
||||
@@ -34,8 +34,9 @@ defmodule PinchflatWeb.Pages.PageController do
|
||||
end
|
||||
|
||||
defp render_onboarding_page(conn, media_profiles_exist, sources_exist) do
|
||||
Settings.set!(:onboarding, true)
|
||||
|
||||
conn
|
||||
|> put_session(:onboarding, true)
|
||||
|> render(:onboarding_checklist,
|
||||
media_profiles_exist: media_profiles_exist,
|
||||
sources_exist: sources_exist,
|
||||
|
||||
@@ -16,37 +16,29 @@ defmodule PinchflatWeb.Sources.SourceController do
|
||||
def new(conn, _params) do
|
||||
changeset = Sources.change_source(%Source{})
|
||||
|
||||
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
|
||||
render(conn, :new,
|
||||
changeset: changeset,
|
||||
media_profiles: media_profiles(),
|
||||
layout: get_onboarding_layout()
|
||||
)
|
||||
end
|
||||
|
||||
def create(conn, %{"source" => source_params}) do
|
||||
case Sources.create_source(source_params) do
|
||||
{:ok, source} ->
|
||||
redirect_location =
|
||||
if get_session(conn, :onboarding), do: ~p"/?onboarding=1", else: ~p"/sources/#{source}"
|
||||
if Settings.get!(:onboarding), do: ~p"/?onboarding=1", else: ~p"/sources/#{source}"
|
||||
|
||||
conn
|
||||
|> put_flash(:info, "Source created successfully.")
|
||||
|> redirect(to: redirect_location)
|
||||
|
||||
{:error, %Ecto.Changeset{} = changeset} ->
|
||||
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
|
||||
render(conn, :new,
|
||||
changeset: changeset,
|
||||
media_profiles: media_profiles(),
|
||||
layout: get_onboarding_layout()
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -107,4 +99,12 @@ defmodule PinchflatWeb.Sources.SourceController do
|
||||
defp media_profiles do
|
||||
Profiles.list_media_profiles()
|
||||
end
|
||||
|
||||
defp get_onboarding_layout do
|
||||
if Settings.get!(:onboarding) do
|
||||
{Layouts, :onboarding}
|
||||
else
|
||||
{Layouts, :app}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<div class="mb-6 flex gap-3 flex-row items-center">
|
||||
<.link :if={!Plug.Conn.get_session(@conn, :onboarding)} navigate={~p"/sources"}>
|
||||
<.link :if={!Settings.get!(: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>
|
||||
|
||||
Reference in New Issue
Block a user