diff --git a/assets/js/hooks.js b/assets/js/hooks.js index 779e08c..f291434 100644 --- a/assets/js/hooks.js +++ b/assets/js/hooks.js @@ -111,6 +111,20 @@ const Hooks = { } }, + // Hook for persisting view mode preference to localStorage + ViewModePreference: { + mounted() { + const savedMode = localStorage.getItem("claper_event_list_view_mode"); + if (savedMode && (savedMode === "grid" || savedMode === "list")) { + this.pushEvent("restore-view-mode", { view: savedMode }); + } + + this.handleEvent("save-view-mode", ({ view }) => { + localStorage.setItem("claper_event_list_view_mode", view); + }); + } + }, + // Hook for Event Creation Chart EventCreationChart: { mounted() { diff --git a/lib/claper_web/live/event_live/index.ex b/lib/claper_web/live/event_live/index.ex index e6d8e32..44194a3 100644 --- a/lib/claper_web/live/event_live/index.ex +++ b/lib/claper_web/live/event_live/index.ex @@ -201,6 +201,14 @@ defmodule ClaperWeb.EventLive.Index do @impl true def handle_event("change-view", %{"view" => view_mode}, socket) do + {:noreply, + socket + |> assign(:view_mode, view_mode) + |> push_event("save-view-mode", %{view: view_mode})} + end + + @impl true + def handle_event("restore-view-mode", %{"view" => view_mode}, socket) do {:noreply, assign(socket, :view_mode, view_mode)} end diff --git a/lib/claper_web/live/event_live/index.html.heex b/lib/claper_web/live/event_live/index.html.heex index a931a78..3948b1a 100644 --- a/lib/claper_web/live/event_live/index.html.heex +++ b/lib/claper_web/live/event_live/index.html.heex @@ -104,7 +104,7 @@