59 lines
1.6 KiB
Elixir
59 lines
1.6 KiB
Elixir
defmodule LabelmakerWeb.Home do
|
|
use LabelmakerWeb, :live_view
|
|
import LabelmakerWeb.RadioComponent
|
|
alias LabelmakerWeb.Constants
|
|
alias LabelmakerWeb.Tools
|
|
|
|
def mount(_params, _session, socket) do
|
|
assigns =
|
|
Constants.defaults()
|
|
|> Map.merge(Constants.form_defaults())
|
|
|> Map.put(
|
|
:preview_background,
|
|
Tools.process_preview_background(Constants.form_defaults().preview_background)
|
|
)
|
|
|> Enum.to_list()
|
|
|
|
{
|
|
:ok,
|
|
assign(
|
|
socket,
|
|
assigns
|
|
)
|
|
}
|
|
end
|
|
|
|
def handle_event("update_label", params, socket) do
|
|
assigns =
|
|
socket.assigns
|
|
|> Enum.map(fn {k, v} -> {Atom.to_string(k), v} end)
|
|
|> Map.new()
|
|
|> Map.merge(params)
|
|
|> Tools.process_parameters()
|
|
|> Enum.to_list()
|
|
|
|
{:noreply, assign(socket, assigns)}
|
|
end
|
|
|
|
def handle_event("update_preview", %{"bg" => bg}, socket) do
|
|
{:noreply, assign(socket, :preview_background, Tools.process_preview_background(bg))}
|
|
end
|
|
|
|
def handle_event("update_sizing", %{"sizing" => sizing}, socket) do
|
|
sizing =
|
|
if sizing in Constants.sizing_values(), do: sizing, else: Constants.form_defaults().sizing
|
|
|
|
assigns = Map.put(socket.assigns, :sizing, sizing)
|
|
|
|
{:noreply, assign(socket, sizing: sizing, link: Tools.generate_link(assigns))}
|
|
end
|
|
|
|
def handle_event("update_alignment", %{"option" => option}, socket) do
|
|
{:noreply, assign(socket, :align, option)}
|
|
end
|
|
|
|
def handle_event("make_label", params, socket) do
|
|
{:noreply, redirect(socket, to: ~p"/#{params["label"]}?#{Map.drop(params, ["label"])}")}
|
|
end
|
|
end
|