Add live preview of template
This commit is contained in:
@@ -1,7 +1,9 @@
|
|||||||
defmodule MusicLibraryWeb.OnlineStoreTemplateLive.FormComponent do
|
defmodule MusicLibraryWeb.OnlineStoreTemplateLive.FormComponent do
|
||||||
use MusicLibraryWeb, :live_component
|
use MusicLibraryWeb, :live_component
|
||||||
|
|
||||||
|
alias MusicLibrary.Artists.Artist
|
||||||
alias MusicLibrary.OnlineStoreTemplates
|
alias MusicLibrary.OnlineStoreTemplates
|
||||||
|
alias MusicLibrary.Records.Record
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def render(assigns) do
|
def render(assigns) do
|
||||||
@@ -33,6 +35,7 @@ defmodule MusicLibraryWeb.OnlineStoreTemplateLive.FormComponent do
|
|||||||
label={gettext("URL Template")}
|
label={gettext("URL Template")}
|
||||||
placeholder={gettext("e.g. https://www.amazon.co.uk/s?k={artist}+{title}+vinyl")}
|
placeholder={gettext("e.g. https://www.amazon.co.uk/s?k={artist}+{title}+vinyl")}
|
||||||
class="font-mono"
|
class="font-mono"
|
||||||
|
help_text={@generated_url_preview}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<.textarea
|
<.textarea
|
||||||
@@ -71,9 +74,13 @@ defmodule MusicLibraryWeb.OnlineStoreTemplateLive.FormComponent do
|
|||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def update(%{template: template} = assigns, socket) do
|
def update(%{template: template} = assigns, socket) do
|
||||||
|
test_record = %Record{title: "Dark Side of the Moon", artists: [%Artist{name: "Pink Floyd"}]}
|
||||||
|
|
||||||
{:ok,
|
{:ok,
|
||||||
socket
|
socket
|
||||||
|> assign(assigns)
|
|> assign(assigns)
|
||||||
|
|> assign(:test_record, test_record)
|
||||||
|
|> assign(:generated_url_preview, OnlineStoreTemplates.generate_url(template, test_record))
|
||||||
|> assign_new(:form, fn ->
|
|> assign_new(:form, fn ->
|
||||||
to_form(OnlineStoreTemplates.change_template(template))
|
to_form(OnlineStoreTemplates.change_template(template))
|
||||||
end)}
|
end)}
|
||||||
@@ -84,7 +91,15 @@ defmodule MusicLibraryWeb.OnlineStoreTemplateLive.FormComponent do
|
|||||||
changeset =
|
changeset =
|
||||||
OnlineStoreTemplates.change_template(socket.assigns.template, template_params)
|
OnlineStoreTemplates.change_template(socket.assigns.template, template_params)
|
||||||
|
|
||||||
{:noreply, assign(socket, form: to_form(changeset, action: :validate))}
|
new_template = Ecto.Changeset.apply_changes(changeset)
|
||||||
|
|
||||||
|
generated_url_preview =
|
||||||
|
OnlineStoreTemplates.generate_url(new_template, socket.assigns.test_record)
|
||||||
|
|
||||||
|
{:noreply,
|
||||||
|
socket
|
||||||
|
|> assign(:generated_url_preview, generated_url_preview)
|
||||||
|
|> assign(form: to_form(changeset, action: :validate))}
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_event("save", %{"online_store_template" => template_params}, socket) do
|
def handle_event("save", %{"online_store_template" => template_params}, socket) do
|
||||||
|
|||||||
Reference in New Issue
Block a user