defmodule ScalesCmsWeb.Live.AppLayoutComponent do @moduledoc """ Main layout component that wraps all CMS pages. """ use ScalesCmsWeb, :live_component @sidebar_enabled Application.compile_env(:scales_cms, :enabled_sidebar, true) @impl Phoenix.LiveComponent def mount(socket) do {:ok, socket |> assign_new(:sidebar_open, fn -> @sidebar_enabled end) |> assign_new(:sidebar_enabled, fn -> @sidebar_enabled end)} end @impl Phoenix.LiveComponent def update(assigns, socket) do socket = socket |> assign(assigns) {:ok, socket} end @impl Phoenix.LiveComponent def handle_event("toggle-sidebar", _params, socket) do new_state = !socket.assigns.sidebar_open send(self(), {:update_persisted_state, :sidebar_open, new_state}) socket |> assign(:sidebar_open, new_state) |> push_event("persisted-state-changed", %{name: :sidebar_open, value: new_state}) |> then(&{:noreply, &1}) end @impl Phoenix.LiveComponent def render(assigns) do if assigns.sidebar_enabled do render_with_sidebar(assigns) else render_without_sidebar(assigns) end end defp render_with_sidebar(assigns) do ~H"""