defmodule LabelmakerWeb.Home do use LabelmakerWeb, :live_view alias LabelmakerWeb.Constants alias LabelmakerWeb.Tools def mount(_params, _session, socket) do assigns = Constants.defaults() |> Map.merge(Constants.preview()) |> Enum.to_list() { :ok, assign( socket, assigns ) } end def handle_event("update_preview", %{"bg" => bg}, socket) do {:noreply, assign(socket, :preview_bg, bg)} 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("make_label", params, socket) do {:noreply, redirect(socket, to: ~p"/#{params["label"]}?#{Map.drop(params, ["label"])}")} end def render(assigns) do assigns = assign( assigns, :label_too_long, String.length(assigns.label) > Constants.max_label_length() ) preview_background = case assigns.preview_bg do "r" -> "bg-[linear-gradient(to_right,_black_33%,_white_67%)]" "b" -> "bg-[linear-gradient(to_bottom,_black_33%,_white_67%)]" "c" -> "bg-[#{assigns.color}]" _ -> "bg-[linear-gradient(to_right,_black_33%,_white_67%)]" end ~H"""
Note: not all fonts are available for preview.