defmodule MoonWeb.Hooks.Cookies do
@moduledoc """
Setting globals - site-wide params for (almost) all LiveViews
"""
import Phoenix.Component, only: [assign: 2]
import Phoenix.LiveView, only: [attach_hook: 4, push_event: 3]
import Surface.Components.Context, only: [put: 2]
def on_mount(:default, params, session, socket) do
{:cont,
socket
|> attach_hook(:set_global_params, :handle_event, &handle_event/3)
|> assign(
theme_name: params["theme_name"] || session["theme_name"] || "theme-moon-light",
direction: params["direction"] || session["direction"] || "ltr",
active_page: socket.view
)
|> put(active_page: socket.view)}
end
def handle_event("toggle_dark_mode", %{"value" => is_dark}, socket) do
theme_name =
String.replace(socket.assigns.theme_name, ["-light", "-dark"], "") <>
if is_dark == "true", do: "-dark", else: "-light"
{:halt,
socket
|> assign(theme_name: theme_name)
|> push_event("set-cookie", %{name: "theme_name", value: theme_name})}
end
def handle_event("toggle_direction", %{"value" => is_rtl}, socket) do
direction = if is_rtl == "true", do: "rtl", else: "ltr"
{:halt,
socket
|> assign(direction: direction)
|> push_event("set-cookie", %{name: "direction", value: direction})}
end
def handle_event(_, _, socket), do: {:cont, socket}
end